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

Revert "Refactor setDefaultAiAssistant"

This reverts commit 90960a748f70a10a0418c892edc780d33340dadb.
Shun Miyazawa 1 год назад
Родитель
Сommit
583009aa34

+ 19 - 1
apps/app/src/features/openai/server/models/ai-assistant.ts

@@ -1,4 +1,5 @@
 import { type IGrantedGroup, GroupType } from '@growi/core';
+import createError from 'http-errors';
 import { type Model, type Document, Schema } from 'mongoose';
 
 import { getOrCreateModel } from '~/server/util/mongoose-utils';
@@ -7,7 +8,9 @@ import { type AiAssistant, AiAssistantShareScope, AiAssistantAccessScope } from
 
 export interface AiAssistantDocument extends AiAssistant, Document {}
 
-type AiAssistantModel = Model<AiAssistantDocument>;
+interface AiAssistantModel extends Model<AiAssistantDocument> {
+  setDefault(id: string, isDefault: boolean): Promise<AiAssistantDocument>;
+}
 
 /*
  * Schema Definition
@@ -108,4 +111,19 @@ const schema = new Schema<AiAssistantDocument>(
 );
 
 
+schema.statics.setDefault = async function(id: string, isDefault: boolean): Promise<AiAssistantDocument> {
+  const aiAssistant = await this.findOne({ _id: id, shareScope: AiAssistantAccessScope.PUBLIC_ONLY });
+  if (aiAssistant == null) {
+    throw createError(404, 'AiAssistant document does not exist');
+  }
+
+  await this.updateMany({ isDefault: true }, { isDefault: false });
+
+  aiAssistant.isDefault = isDefault;
+  const updatedAiAssistant = await aiAssistant.save();
+
+  return updatedAiAssistant;
+};
+
+
 export default getOrCreateModel<AiAssistantDocument, AiAssistantModel>('AiAssistant', schema);

+ 1 - 8
apps/app/src/features/openai/server/routes/set-default-ai-assistant.ts

@@ -9,10 +9,8 @@ import { apiV3FormValidator } from '~/server/middlewares/apiv3-form-validator';
 import type { ApiV3Response } from '~/server/routes/apiv3/interfaces/apiv3-response';
 import loggerFactory from '~/utils/logger';
 
-import { AiAssistantAccessScope } from '../../interfaces/ai-assistant';
 import AiAssistantModel from '../models/ai-assistant';
 import { getOpenaiService } from '../services/openai';
-import { setDefaultAiAssistant } from '../services/set-default-ai-assistant';
 
 import { certifyAiService } from './middlewares/certify-ai-service';
 
@@ -51,12 +49,7 @@ export const setDefaultAiAssistantFactory: setDefaultAiAssistantFactory = (crowi
         const { id } = req.params;
         const { isDefault } = req.body;
 
-        const aiAssistant = await AiAssistantModel.findOne({ _id: id, shareScope: AiAssistantAccessScope.PUBLIC_ONLY });
-        if (aiAssistant == null) {
-          return res.apiv3Err(new ErrorV3('The AiAssistant does not exist or is not public'), 404);
-        }
-
-        const updatedAiAssistant = await setDefaultAiAssistant(id, isDefault);
+        const updatedAiAssistant = await AiAssistantModel.setDefault(id, isDefault);
         return res.apiv3({ updatedAiAssistant });
       }
       catch (err) {

+ 5 - 6
apps/app/src/features/openai/server/services/openai.ts

@@ -42,7 +42,6 @@ import { generateGlobPatterns } from '../utils/generate-glob-patterns';
 import { getClient } from './client-delegator';
 import { openaiApiErrorHandler } from './openai-api-error-handler';
 import { replaceAnnotationWithPageLink } from './replace-annotation-with-page-link';
-import { setDefaultAiAssistant } from './set-default-ai-assistant';
 
 const { isDeepEquals } = deepEquals;
 
@@ -830,17 +829,17 @@ class OpenaiService implements IOpenaiService {
       this.createVectorStoreFileWithStream(newVectorStoreRelation, conditions);
     }
 
+    if (data.shareScope !== AiAssistantShareScope.PUBLIC_ONLY && aiAssistant.isDefault) {
+      await AiAssistantModel.setDefault(aiAssistant._id, false);
+    }
+
     const newData = {
       ...data,
       vectorStore: newVectorStoreRelation ?? aiAssistant.vectorStore,
     };
 
     aiAssistant.set({ ...newData });
-
-    let updatedAiAssistant: AiAssistantDocument = await aiAssistant.save();
-    if (data.shareScope !== AiAssistantShareScope.PUBLIC_ONLY && aiAssistant.isDefault) {
-      updatedAiAssistant = await setDefaultAiAssistant(aiAssistant._id, false);
-    }
+    const updatedAiAssistant = await aiAssistant.save();
 
     return updatedAiAssistant;
   }

+ 0 - 18
apps/app/src/features/openai/server/services/set-default-ai-assistant.ts

@@ -1,18 +0,0 @@
-import createError from 'http-errors';
-
-import AiAssistantModel, { type AiAssistantDocument } from '../models/ai-assistant';
-
-
-export const setDefaultAiAssistant = async(id: string, isDefault: boolean): Promise<AiAssistantDocument> => {
-  const aiAssistant = await AiAssistantModel.findById(id);
-  if (aiAssistant == null) {
-    throw createError(404, 'AiAssistant document does not exist');
-  }
-
-  await AiAssistantModel.updateMany({ isDefault: true }, { isDefault: false });
-
-  aiAssistant.isDefault = isDefault;
-  const updatedAiAssistant = await aiAssistant.save();
-
-  return updatedAiAssistant;
-};