Shun Miyazawa 3 ani în urmă
părinte
comite
913330a6be
1 a modificat fișierele cu 28 adăugiri și 0 ștergeri
  1. 28 0
      packages/app/src/server/routes/apiv3/activity.ts

+ 28 - 0
packages/app/src/server/routes/apiv3/activity.ts

@@ -1,4 +1,5 @@
 import { parse, addMinutes, isValid } from 'date-fns';
 import { parse, addMinutes, isValid } from 'date-fns';
+import escapeStringRegexp from 'escape-string-regexp';
 import express, { Request, Router } from 'express';
 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';
@@ -36,6 +37,8 @@ module.exports = (crowi: Crowi): Router => {
   const accessTokenParser = require('../../middlewares/access-token-parser')(crowi);
   const accessTokenParser = require('../../middlewares/access-token-parser')(crowi);
   const loginRequiredStrictly = require('../../middlewares/login-required')(crowi);
   const loginRequiredStrictly = require('../../middlewares/login-required')(crowi);
 
 
+  const User = crowi.model('User');
+
   const router = express.Router();
   const router = express.Router();
 
 
   // eslint-disable-next-line max-len
   // eslint-disable-next-line max-len
@@ -96,5 +99,30 @@ module.exports = (crowi: Crowi): Router => {
     }
     }
   });
   });
 
 
+  router.get('/usernames', loginRequiredStrictly, adminRequired, async(req: Request, res: ApiV3Response) => {
+    const q = req.query.q as string;
+    const escapedString = escapeStringRegexp(q);
+
+    try {
+      const undeletedUsernames = await User.find({
+        status: { $ne: User.STATUS_DELETED },
+        username: new RegExp(`^${escapedString}`, 'i'),
+      }).distinct('username');
+
+      const activitySnapshotUsernames = await Activity.find({
+        $and: [
+          { 'snapshot.username': { $nin: undeletedUsernames } },
+          { 'snapshot.username': new RegExp(`^${escapedString}`, 'i') },
+        ],
+      }).distinct('snapshot.username');
+
+      return res.apiv3({ usernames: [...undeletedUsernames, ...activitySnapshotUsernames] });
+    }
+    catch (err) {
+      logger.error('failed to get usernames', err);
+      return res.apiv3Err(err);
+    }
+  });
+
   return router;
   return router;
 };
 };