Last active
February 21, 2018 15:34
-
-
Save robertz/e9dba9a491680ce6a8ca227f6eec67b3 to your computer and use it in GitHub Desktop.
API method to support data table and paging
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
exports.getPaymentsVue = async (req, res) => { | |
const getPayees = () => { | |
return Payee.find({ owner: req.params.userid }) | |
.cache(0, req.params.userid + "__payees") | |
.then(payees => { | |
return payees; | |
}); | |
}; | |
const getPayments = () => { | |
let page = req.query.page || 1; | |
let per_page = req.query.per_page * 1 || 10; | |
let offset = (page - 1) * per_page; | |
return Payments.find({ owner: req.params.userid }) | |
.sort({ ref: -1 }) | |
.skip(offset) | |
.limit(per_page) | |
.then(payments => { | |
return payments; | |
}); | |
}; | |
const getTotalPayments = () => { | |
return Payments.count({ owner: req.params.userid }); | |
}; | |
try{ | |
let payees = await getPayees(); | |
let payments = await getPayments(); | |
let totalPayments = await getTotalPayments(); | |
let __page = req.query.page * 1 || 1; | |
let __per_page = req.query.per_page * 1 || 10 | |
// Stub out the page payload | |
let data = { | |
links: { | |
pagination: { | |
total: totalPayments, | |
per_page: __per_page, | |
current_page: __page, | |
last_page: 1, | |
next_page_url: null, | |
prev_page_url: null, | |
from: 1, | |
to: 15 | |
}, | |
}, | |
data: [] | |
} | |
data.links.pagination.last_page = Math.ceil(totalPayments / __per_page); | |
data.links.pagination.from = (__page - 1) * __per_page + 1; | |
if(__page > 1) { | |
data.links.pagination.prev_page_url = '/api/user/' + req.params.userid + '/pay?page=' + (__page - 1); | |
} | |
if(__page < data.links.pagination.last_page) { | |
data.links.pagination.next_page_url = '/api/user/' + req.params.userid + '/pay?page=' + (__page + 1); | |
} | |
let page_to = data.links.pagination.from + data.links.pagination.per_page - 1; | |
data.links.pagination.to = page_to <= totalPayments ? page_to : totalPayments; | |
for (let payment of payments) { | |
// Get some information about the payee.. Should always exist | |
let payeeName = payees.filter((payee) => { | |
return payee.id === payment.payee; | |
}); | |
// Push payment to payment array | |
data.data.push({ | |
name: payeeName[0].name, | |
payee: payment.payee, | |
ref: payment.ref, | |
createdAt: payment.createdAt, | |
amount: payment.amount | |
}); | |
} | |
// Render it | |
res.json(data); | |
} | |
catch (err) { | |
return res.status(500); | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment