pages.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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 loginRequired = require('../../middlewares/login-required')(crowi, true);
  12. const adminRequired = require('../../middlewares/admin-required')(crowi);
  13. const csrf = require('../../middlewares/csrf')(crowi);
  14. const Page = crowi.model('Page');
  15. /**
  16. * @swagger
  17. *
  18. * /pages/recent:
  19. * get:
  20. * tags: [Pages]
  21. * description: Get recently updated pages
  22. * responses:
  23. * 200:
  24. * description: Return pages recently updated
  25. *
  26. */
  27. router.get('/recent', loginRequired, async(req, res) => {
  28. const limit = 20;
  29. const offset = parseInt(req.query.offset) || 0;
  30. const queryOptions = {
  31. offset,
  32. limit,
  33. includeTrashed: false,
  34. isRegExpEscapedFromPath: true,
  35. sort: 'updatedAt',
  36. desc: -1,
  37. };
  38. try {
  39. const result = await Page.findListWithDescendants('/', req.user, queryOptions);
  40. if (result.pages.length > limit) {
  41. result.pages.pop();
  42. }
  43. return res.apiv3(result);
  44. }
  45. catch (err) {
  46. res.code = 'unknown';
  47. logger.error('Failed to get recent pages', err);
  48. return res.apiv3Err(err, 500);
  49. }
  50. });
  51. /**
  52. * @swagger
  53. *
  54. * /pages/empty-trash:
  55. * delete:
  56. * tags: [Pages]
  57. * description: empty trash
  58. * responses:
  59. * 200:
  60. * description: Succeeded to remove all trash pages
  61. */
  62. router.delete('/empty-trash', loginRequired, adminRequired, csrf, async(req, res) => {
  63. try {
  64. const pages = await Page.deleteMany({
  65. path: { $in: /^\/trash/ },
  66. });
  67. return res.apiv3({ pages });
  68. }
  69. catch (err) {
  70. res.code = 'unknown';
  71. logger.error('Failed to delete trash pages', err);
  72. return res.apiv3Err(err, 500);
  73. }
  74. });
  75. return router;
  76. };