Просмотр исходного кода

serialization of paginateResult

Shun Miyazawa 4 лет назад
Родитель
Сommit
7a5f302c28
2 измененных файлов с 20 добавлено и 2 удалено
  1. 1 0
      packages/app/src/server/models/activity.ts
  2. 19 2
      packages/app/src/server/routes/apiv3/activity.ts

+ 1 - 0
packages/app/src/server/models/activity.ts

@@ -111,6 +111,7 @@ activitySchema.statics.getPaginatedActivity = async function(limit: number, offs
       limit,
       limit,
       offset,
       offset,
       sort: { createdAt: -1 },
       sort: { createdAt: -1 },
+      populate: 'user',
     },
     },
   );
   );
   return paginateResult;
   return paginateResult;

+ 19 - 2
packages/app/src/server/routes/apiv3/activity.ts

@@ -2,14 +2,17 @@ import express, { Request, Router } from 'express';
 import rateLimit from 'express-rate-limit';
 import rateLimit from 'express-rate-limit';
 import { query } from 'express-validator';
 import { query } from 'express-validator';
 
 
+import { IActivity } from '~/interfaces/activity';
 import Activity from '~/server/models/activity';
 import Activity from '~/server/models/activity';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 import Crowi from '../../crowi';
 import Crowi from '../../crowi';
 import { apiV3FormValidator } from '../../middlewares/apiv3-form-validator';
 import { apiV3FormValidator } from '../../middlewares/apiv3-form-validator';
+import { serializeUserSecurely } from '../../models/serializers/user-serializer';
 
 
 import { ApiV3Response } from './interfaces/apiv3-response';
 import { ApiV3Response } from './interfaces/apiv3-response';
 
 
+
 const logger = loggerFactory('growi:routes:apiv3:activity');
 const logger = loggerFactory('growi:routes:apiv3:activity');
 
 
 
 
@@ -40,8 +43,22 @@ module.exports = (crowi: Crowi): Router => {
     const offset = req.query.offset || 1;
     const offset = req.query.offset || 1;
 
 
     try {
     try {
-      const paginatedActivity = await Activity.getPaginatedActivity(limit, offset);
-      return res.apiv3({ paginatedActivity });
+      const paginationResult = await Activity.getPaginatedActivity(limit, offset);
+
+      const User = crowi.model('User');
+      const serializedDocs = paginationResult.docs.map((doc: IActivity) => {
+        if (doc.user != null && doc.user instanceof User) {
+          doc.user = serializeUserSecurely(doc.user);
+        }
+        return doc;
+      });
+
+      const serializedPaginationResult = {
+        ...paginationResult,
+        docs: serializedDocs,
+      };
+
+      return res.apiv3({ serializedPaginationResult });
     }
     }
     catch (err) {
     catch (err) {
       logger.error('Failed to get paginated activity', err);
       logger.error('Failed to get paginated activity', err);