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

Implement route to toggle isDefault

Shun Miyazawa 1 год назад
Родитель
Сommit
c7de09abf4

+ 4 - 0
apps/app/src/features/openai/server/routes/index.ts

@@ -55,6 +55,10 @@ export const factory = (crowi: Crowi): express.Router => {
       router.put('/ai-assistant/:id', updateAiAssistantsFactory(crowi));
     });
 
+    import('./toggle-default-ai-assistant').then(({ toggleDefaultAiAssistantFactory }) => {
+      router.put('/ai-assistant/:id/toggle-default', toggleDefaultAiAssistantFactory(crowi));
+    });
+
     import('./delete-ai-assistant').then(({ deleteAiAssistantsFactory }) => {
       router.delete('/ai-assistant/:id', deleteAiAssistantsFactory(crowi));
     });

+ 66 - 0
apps/app/src/features/openai/server/routes/toggle-default-ai-assistant.ts

@@ -0,0 +1,66 @@
+import { ErrorV3 } from '@growi/core/dist/models';
+import type { Request, RequestHandler } from 'express';
+import { type ValidationChain, param, body } from 'express-validator';
+import { isHttpError } from 'http-errors';
+
+import type Crowi from '~/server/crowi';
+import { accessTokenParser } from '~/server/middlewares/access-token-parser';
+import { apiV3FormValidator } from '~/server/middlewares/apiv3-form-validator';
+import type { ApiV3Response } from '~/server/routes/apiv3/interfaces/apiv3-response';
+import loggerFactory from '~/utils/logger';
+
+import AiAssistantModel from '../models/ai-assistant';
+import { getOpenaiService } from '../services/openai';
+
+import { certifyAiService } from './middlewares/certify-ai-service';
+
+const logger = loggerFactory('growi:routes:apiv3:openai:toggle-default-ai-assistants');
+
+type ToggleDefaultAiAssistantFactory = (crowi: Crowi) => RequestHandler[];
+
+type ReqParams = {
+  id: string,
+}
+
+type ReqBody = {
+  isDefault: boolean,
+}
+
+type Req = Request<ReqParams, Response, ReqBody>
+
+export const toggleDefaultAiAssistantFactory: ToggleDefaultAiAssistantFactory = (crowi) => {
+  const adminRequired = require('~/server/middlewares/admin-required')(crowi);
+  const loginRequiredStrictly = require('~/server/middlewares/login-required')(crowi);
+
+  const validator: ValidationChain[] = [
+    param('id').isMongoId().withMessage('aiAssistant id is required'),
+    body('isDefault').isBoolean().withMessage('isDefault is required'),
+  ];
+
+  return [
+    accessTokenParser, loginRequiredStrictly, adminRequired, certifyAiService, validator, apiV3FormValidator,
+    async(req: Req, res: ApiV3Response) => {
+      const openaiService = getOpenaiService();
+      if (openaiService == null) {
+        return res.apiv3Err(new ErrorV3('GROWI AI is not enabled'), 501);
+      }
+
+      try {
+        const { id } = req.params;
+        const { isDefault } = req.body;
+
+        const updatedAiAssistant = await AiAssistantModel.toggleDefault(id, isDefault);
+        return res.apiv3({ updatedAiAssistant });
+      }
+      catch (err) {
+        logger.error(err);
+
+        if (isHttpError(err)) {
+          return res.apiv3Err(new ErrorV3(err.message), err.status);
+        }
+
+        return res.apiv3Err(new ErrorV3('Failed to update AiAssistant'));
+      }
+    },
+  ];
+};