Sfoglia il codice sorgente

impl getAiAssistantsFactory

Shun Miyazawa 1 anno fa
parent
commit
30081bae52

+ 28 - 0
apps/app/src/features/openai/server/routes/ai-assistant.ts

@@ -109,3 +109,31 @@ export const createAiAssistantFactory: CreateAssistantFactory = (crowi) => {
     },
     },
   ];
   ];
 };
 };
+
+
+type GetAiAssistantsFactory = (crowi: Crowi) => RequestHandler[];
+
+type GetAiAssistantsFactoryReq = Request<undefined, Response, undefined> & {
+  user: IUserHasId,
+}
+
+export const getAiAssistantsFactory: GetAiAssistantsFactory = (crowi) => {
+
+  const loginRequiredStrictly = require('~/server/middlewares/login-required')(crowi);
+
+  return [
+    accessTokenParser, loginRequiredStrictly, certifyAiService,
+    async(req: GetAiAssistantsFactoryReq, res: ApiV3Response) => {
+      try {
+        const openaiService = getOpenaiService();
+        const aiAssistants = await openaiService?.getAiAssistants(req.user);
+
+        return res.apiv3({ aiAssistants });
+      }
+      catch (err) {
+        logger.error(err);
+        return res.apiv3Err(new ErrorV3('Failed to get AiAssistants'));
+      }
+    },
+  ];
+};

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

@@ -34,6 +34,10 @@ export const factory = (crowi: Crowi): express.Router => {
     import('./ai-assistant').then(({ createAiAssistantFactory }) => {
     import('./ai-assistant').then(({ createAiAssistantFactory }) => {
       router.post('/ai-assistant', createAiAssistantFactory(crowi));
       router.post('/ai-assistant', createAiAssistantFactory(crowi));
     });
     });
+
+    import('./ai-assistant').then(({ getAiAssistantsFactory }) => {
+      router.get('/ai-assistants', getAiAssistantsFactory(crowi));
+    });
   }
   }
 
 
   return router;
   return router;

+ 7 - 0
apps/app/src/features/openai/server/services/openai.ts

@@ -2,6 +2,7 @@ import assert from 'node:assert';
 import { Readable, Transform } from 'stream';
 import { Readable, Transform } from 'stream';
 import { pipeline } from 'stream/promises';
 import { pipeline } from 'stream/promises';
 
 
+import type { IUserHasId } from '@growi/core';
 import { PageGrant, getIdForRef, isPopulated } from '@growi/core';
 import { PageGrant, getIdForRef, isPopulated } from '@growi/core';
 import { isGrobPatternPath } from '@growi/core/dist/utils/page-path-utils';
 import { isGrobPatternPath } from '@growi/core/dist/utils/page-path-utils';
 import escapeStringRegexp from 'escape-string-regexp';
 import escapeStringRegexp from 'escape-string-regexp';
@@ -66,6 +67,7 @@ export interface IOpenaiService {
   // rebuildVectorStoreAll(): Promise<void>;
   // rebuildVectorStoreAll(): Promise<void>;
   // rebuildVectorStore(page: HydratedDocument<PageDocument>): Promise<void>;
   // rebuildVectorStore(page: HydratedDocument<PageDocument>): Promise<void>;
   createAiAssistant(data: Omit<AiAssistant, 'vectorStore'>): Promise<AiAssistantDocument>;
   createAiAssistant(data: Omit<AiAssistant, 'vectorStore'>): Promise<AiAssistantDocument>;
+  getAiAssistants(user: IUserHasId): Promise<AiAssistantDocument[]>;
 }
 }
 class OpenaiService implements IOpenaiService {
 class OpenaiService implements IOpenaiService {
 
 
@@ -520,6 +522,11 @@ class OpenaiService implements IOpenaiService {
     return aiAssistant;
     return aiAssistant;
   }
   }
 
 
+  async getAiAssistants(user: IUserHasId): Promise<AiAssistantDocument[]> {
+    const aiAssistants = await AiAssistantModel.find({ owner: user });
+    return aiAssistants;
+  }
+
 }
 }
 
 
 let instance: OpenaiService;
 let instance: OpenaiService;