user-group-relation.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. const loggerFactory = require('@alias/logger');
  2. const logger = loggerFactory('growi:routes:apiv3:user-group-relation'); // eslint-disable-line no-unused-vars
  3. const express = require('express');
  4. const router = express.Router();
  5. /**
  6. * @swagger
  7. * tags:
  8. * name: UserGroupRelation
  9. */
  10. module.exports = (crowi) => {
  11. const loginRequiredStrictly = require('../../middleware/login-required')(crowi);
  12. const adminRequired = require('../../middleware/admin-required')(crowi);
  13. const { ErrorV3, UserGroup, UserGroupRelation } = crowi.models;
  14. /**
  15. * @swagger
  16. * paths:
  17. * /user-group-relations:
  18. * get:
  19. * tags: [UserGroupRelation]
  20. * description: Gets the user group relations
  21. * responses:
  22. * 200:
  23. * description: user group relations are fetched
  24. * content:
  25. * application/json:
  26. * schema:
  27. * properties:
  28. * userGroupRelations:
  29. * type: object
  30. * description: contains arrays user objects related
  31. */
  32. router.get('/', loginRequiredStrictly, adminRequired, async(req, res) => {
  33. // TODO: filter with querystring? or body
  34. try {
  35. const page = parseInt(req.query.page) || 1;
  36. const result = await UserGroup.findUserGroupsWithPagination({ page });
  37. // const pager = createPager(result.total, result.limit, result.page, result.pages, MAX_PAGE_LIST);
  38. const userGroups = result.docs;
  39. const userGroupRelationsObj = {};
  40. await Promise.all(userGroups.map(async(userGroup) => {
  41. const userGroupRelations = await UserGroupRelation.findAllRelationForUserGroup(userGroup);
  42. userGroupRelationsObj[userGroup._id] = userGroupRelations.map((userGroupRelation) => {
  43. return userGroupRelation.relatedUser;
  44. });
  45. }));
  46. const data = {
  47. userGroupRelations: userGroupRelationsObj,
  48. };
  49. return res.apiv3(data);
  50. }
  51. catch (err) {
  52. const msg = 'Error occurred in fetching user group relations';
  53. logger.error('Error', err);
  54. return res.apiv3Err(new ErrorV3(msg, 'user-group-relation-list-fetch-failed'));
  55. }
  56. });
  57. return router;
  58. };
  59. // const MAX_PAGE_LIST = 50;
  60. // function createPager(total, limit, page, pagesCount, maxPageList) {
  61. // const pager = {
  62. // page,
  63. // pagesCount,
  64. // pages: [],
  65. // total,
  66. // previous: null,
  67. // previousDots: false,
  68. // next: null,
  69. // nextDots: false,
  70. // };
  71. // if (page > 1) {
  72. // pager.previous = page - 1;
  73. // }
  74. // if (page < pagesCount) {
  75. // pager.next = page + 1;
  76. // }
  77. // let pagerMin = Math.max(1, Math.ceil(page - maxPageList / 2));
  78. // let pagerMax = Math.min(pagesCount, Math.floor(page + maxPageList / 2));
  79. // if (pagerMin === 1) {
  80. // if (MAX_PAGE_LIST < pagesCount) {
  81. // pagerMax = MAX_PAGE_LIST;
  82. // }
  83. // else {
  84. // pagerMax = pagesCount;
  85. // }
  86. // }
  87. // if (pagerMax === pagesCount) {
  88. // if ((pagerMax - MAX_PAGE_LIST) < 1) {
  89. // pagerMin = 1;
  90. // }
  91. // else {
  92. // pagerMin = pagerMax - MAX_PAGE_LIST;
  93. // }
  94. // }
  95. // pager.previousDots = null;
  96. // if (pagerMin > 1) {
  97. // pager.previousDots = true;
  98. // }
  99. // pager.nextDots = null;
  100. // if (pagerMax < pagesCount) {
  101. // pager.nextDots = true;
  102. // }
  103. // for (let i = pagerMin; i <= pagerMax; i++) {
  104. // pager.pages.push(i);
  105. // }
  106. // return pager;
  107. // }