pages.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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.completelyDeletePageRecursively('/trash', req.user);
  65. return res.apiv3({ pages });
  66. }
  67. catch (err) {
  68. res.code = 'unknown';
  69. logger.error('Failed to delete trash pages', err);
  70. return res.apiv3Err(err, 500);
  71. }
  72. });
  73. /**
  74. * @swagger
  75. *
  76. * /pages/export:
  77. * get:
  78. * tags: [Export]
  79. * description: get currently page file as md or pdf
  80. * responses:
  81. * 200:
  82. * description: Return currently page file
  83. */
  84. router.get('/export', async(req, res) => {
  85. // TODO use res.apiv3
  86. return res.json({ ok: true });
  87. });
  88. return router;
  89. };