user-group-relation.js 3.6 KB

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