pages.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. const loggerFactory = require('@alias/logger');
  2. const logger = loggerFactory('growi:routes:apiv3:pages'); // eslint-disable-line no-unused-vars
  3. const express = require('express');
  4. const router = express.Router();
  5. /**
  6. * @swagger
  7. * tags:
  8. * name: Pages
  9. */
  10. module.exports = (crowi) => {
  11. const accessTokenParser = require('../../middlewares/access-token-parser')(crowi);
  12. const loginRequired = require('../../middlewares/login-required')(crowi, true);
  13. const adminRequired = require('../../middlewares/admin-required')(crowi);
  14. const csrf = require('../../middlewares/csrf')(crowi);
  15. const Page = crowi.model('Page');
  16. /**
  17. * @swagger
  18. *
  19. * /pages/recent:
  20. * get:
  21. * tags: [Pages]
  22. * description: Get recently updated pages
  23. * responses:
  24. * 200:
  25. * description: Return pages recently updated
  26. *
  27. */
  28. router.get('/recent', loginRequired, async(req, res) => {
  29. const limit = 20;
  30. const offset = parseInt(req.query.offset) || 0;
  31. const queryOptions = {
  32. offset,
  33. limit,
  34. includeTrashed: false,
  35. isRegExpEscapedFromPath: true,
  36. sort: 'updatedAt',
  37. desc: -1,
  38. };
  39. try {
  40. const result = await Page.findListWithDescendants('/', req.user, queryOptions);
  41. if (result.pages.length > limit) {
  42. result.pages.pop();
  43. }
  44. return res.apiv3(result);
  45. }
  46. catch (err) {
  47. res.code = 'unknown';
  48. logger.error('Failed to get recent pages', err);
  49. return res.apiv3Err(err, 500);
  50. }
  51. });
  52. /**
  53. * @swagger
  54. *
  55. * /pages/empty-trash:
  56. * delete:
  57. * tags: [Pages]
  58. * description: empty trash
  59. * responses:
  60. * 200:
  61. * description: Succeeded to remove all trash pages
  62. */
  63. router.delete('/empty-trash', loginRequired, adminRequired, csrf, async(req, res) => {
  64. try {
  65. const pages = await Page.completelyDeletePageRecursively('/trash', req.user);
  66. return res.apiv3({ pages });
  67. }
  68. catch (err) {
  69. res.code = 'unknown';
  70. logger.error('Failed to delete trash pages', err);
  71. return res.apiv3Err(err, 500);
  72. }
  73. });
  74. router.get('/list', accessTokenParser, loginRequired, async(req, res) => {
  75. const { path } = req.query;
  76. const limit = +req.query.limit || 30;
  77. const offset = +req.query.offset || 0;
  78. const queryOptions = { offset, limit };
  79. try {
  80. const result = await Page.findListWithDescendants(path, req.user, queryOptions);
  81. return res.apiv3(result);
  82. }
  83. catch (err) {
  84. logger.error('Failed to get Descendants Pages', err);
  85. return res.apiv3Err(err, 500);
  86. }
  87. });
  88. return router;
  89. };