pagination.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. async function getNextId(Model, where, items) {
  2. try {
  3. let maxId = await Model.max('id', { where })
  4. let lastItem = items.slice(-1)[0]
  5. if(!lastItem || maxId === lastItem.id) {
  6. return null
  7. } else {
  8. return lastItem.id
  9. }
  10. } catch (e) {
  11. console.log(e)
  12. return null
  13. }
  14. }
  15. async function getPreviousId(Model, where, items, limit) {
  16. try {
  17. let minId = await Model.min('id', { where })
  18. let firstItem = items[0]
  19. let lteVal
  20. if(firstItem.id - limit) {
  21. lteVal = firstItem.id - limit
  22. } else {
  23. minId
  24. }
  25. if(!firstItem || minId === firstItem.id) {
  26. return null
  27. } else {
  28. let instance = await Model.findOne({
  29. where: Object.assign({}, {
  30. id: {
  31. $lte: lteVal
  32. }
  33. }, where)
  34. })
  35. return instance.id
  36. }
  37. } catch (e) {
  38. console.log(e)
  39. return null
  40. }
  41. }
  42. function getPaginationProps(query) {
  43. let lastId = 0
  44. let limit = 10
  45. if(+query.lastId > 0) lastId = +query.lastId
  46. if(+query.limit > 0) limit = +query.limit
  47. return { lastId, limit }
  48. }
  49. module.exports = {
  50. getNextId,
  51. getPreviousId,
  52. getPaginationProps
  53. }