user-group-relation.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import ErrorV3 from '@growi/core/src/models/vo/error-apiv3';
  2. import loggerFactory from '~/utils/logger';
  3. const logger = loggerFactory('growi:routes:apiv3:user-group-relation'); // eslint-disable-line no-unused-vars
  4. const express = require('express');
  5. const { query } = require('express-validator');
  6. const { serializeUserGroupRelationSecurely } = require('../../models/serializers/user-group-relation-serializer');
  7. const router = express.Router();
  8. const validator = {};
  9. /**
  10. * @swagger
  11. * tags:
  12. * name: UserGroupRelation
  13. */
  14. module.exports = (crowi) => {
  15. const loginRequiredStrictly = require('../../middlewares/login-required')(crowi);
  16. const adminRequired = require('../../middlewares/admin-required')(crowi);
  17. const { UserGroupRelation } = crowi.models;
  18. validator.list = [
  19. query('groupIds', 'groupIds is required and must be an array').isArray(),
  20. query('childGroupIds', 'childGroupIds must be an array').optional().isArray(),
  21. ];
  22. /**
  23. * @swagger
  24. * paths:
  25. * /user-group-relations:
  26. * get:
  27. * tags: [UserGroupRelation]
  28. * operationId: listUserGroupRelations
  29. * summary: /user-group-relations
  30. * description: Gets the user group relations
  31. * responses:
  32. * 200:
  33. * description: user group relations are fetched
  34. * content:
  35. * application/json:
  36. * schema:
  37. * properties:
  38. * userGroupRelations:
  39. * type: object
  40. * description: contains arrays user objects related
  41. */
  42. router.get('/', loginRequiredStrictly, adminRequired, validator.list, async(req, res) => {
  43. const { query } = req;
  44. try {
  45. const relations = await UserGroupRelation.find({ relatedGroup: { $in: query.groupIds } }).populate('relatedUser');
  46. let relationsOfChildGroups = null;
  47. if (Array.isArray(query.childGroupIds)) {
  48. const _relationsOfChildGroups = await UserGroupRelation.find({ relatedGroup: { $in: query.childGroupIds } }).populate('relatedUser');
  49. relationsOfChildGroups = _relationsOfChildGroups.map(relation => serializeUserGroupRelationSecurely(relation)); // serialize
  50. }
  51. const serialized = relations.map(relation => serializeUserGroupRelationSecurely(relation));
  52. return res.apiv3({ userGroupRelations: serialized, relationsOfChildGroups });
  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. };