express-cart-tea
Version:
A fully functioning Node.js shopping cart with Stripe, PayPal and Authorize.net payments.
93 lines (79 loc) • 2.93 kB
JavaScript
const express = require('express');
const { restrict } = require('../lib/auth');
const ObjectId = require('mongodb').ObjectID;
const {
getId,
clearSessionValue
} = require('../lib/common');
const { paginateData } = require('../lib/paginate');
const router = express.Router();
router.get('/admin/transactions/:page?', restrict, async (req, res, next) => {
let pageNum = 1;
if(req.params.page){
pageNum = req.params.page;
}
// Get our paginated data
const transactions = await paginateData(false, req, pageNum, 'transactions', {}, { created: -1 });
res.render('transactions', {
title: 'Cart - Rransactions',
results: transactions.data,
totalItemCount: transactions.totalItems,
pageNum,
paginateUrl: 'admin/transactions',
resultType: 'top',
session: req.session,
admin: true,
config: req.app.config,
message: clearSessionValue(req.session, 'message'),
messageType: clearSessionValue(req.session, 'messageType'),
helpers: req.handlebars.helpers
});
});
router.get('/admin/transactions/filter/:search', restrict, async (req, res, next) => {
const db = req.app.db;
const searchTerm = req.params.search;
const transactionsIndex = req.app.transactionsIndex;
const lunrIdArray = [];
transactionsIndex.search(searchTerm).forEach((id) => {
lunrIdArray.push(getId(id.ref));
});
// we search on the lunr indexes
const results = await db.transactions.find({ _id: { $in: lunrIdArray } }).sort({ created: -1 }).toArray();
if(req.apiAuthenticated){
res.status(200).json(results);
return;
}
res.render('transactions', {
title: 'Transactions',
results: results,
resultType: 'filtered',
admin: true,
config: req.app.config,
session: req.session,
searchTerm: searchTerm,
message: clearSessionValue(req.session, 'message'),
messageType: clearSessionValue(req.session, 'messageType'),
helpers: req.handlebars.helpers
});
});
router.get('/admin/transaction/:id', restrict, async (req, res, next) => {
const db = req.app.db;
// we search on the lunr indexes
const transaction = await db.transactions.findOne({ _id: ObjectId(req.params.id) });
if(req.apiAuthenticated){
res.status(200).json(transaction);
return;
}
res.render('transaction', {
title: 'Transaction',
result: transaction,
resultType: 'filtered',
admin: true,
config: req.app.config,
session: req.session,
message: clearSessionValue(req.session, 'message'),
messageType: clearSessionValue(req.session, 'messageType'),
helpers: req.handlebars.helpers
});
});
module.exports = router;