From 17feb5192eea02c8c51d0cd55c875db01476861a Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 21 May 2024 16:51:19 +0700 Subject: [PATCH] feat: cortex client sdk compatible --- .../controllers/assistants.controller.ts | 12 ++++++- .../controllers/messages.controller.ts | 3 ++ .../controllers/models.controller.ts | 3 ++ .../controllers/threads.controller.ts | 3 ++ .../interceptors/transform.interceptor.ts | 33 +++++++++++++++++++ 5 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 cortex-js/src/infrastructure/interceptors/transform.interceptor.ts diff --git a/cortex-js/src/infrastructure/controllers/assistants.controller.ts b/cortex-js/src/infrastructure/controllers/assistants.controller.ts index 117c1b064..a6273ab5a 100644 --- a/cortex-js/src/infrastructure/controllers/assistants.controller.ts +++ b/cortex-js/src/infrastructure/controllers/assistants.controller.ts @@ -1,10 +1,20 @@ -import { Body, Controller, Delete, Get, Param, Post } from '@nestjs/common'; +import { + Body, + Controller, + Delete, + Get, + Param, + Post, + UseInterceptors, +} from '@nestjs/common'; import { AssistantsUsecases } from '@/usecases/assistants/assistants.usecases'; import { CreateAssistantDto } from '@/infrastructure/dtos/assistants/create-assistant.dto'; import { ApiTags } from '@nestjs/swagger'; +import { TransformInterceptor } from '../interceptors/transform.interceptor'; @ApiTags('Assistants') @Controller('assistants') +@UseInterceptors(TransformInterceptor) export class AssistantsController { constructor(private readonly assistantsService: AssistantsUsecases) {} diff --git a/cortex-js/src/infrastructure/controllers/messages.controller.ts b/cortex-js/src/infrastructure/controllers/messages.controller.ts index f91872209..0aed6ef0d 100644 --- a/cortex-js/src/infrastructure/controllers/messages.controller.ts +++ b/cortex-js/src/infrastructure/controllers/messages.controller.ts @@ -6,14 +6,17 @@ import { Patch, Param, Delete, + UseInterceptors, } from '@nestjs/common'; import { MessagesUsecases } from '@/usecases/messages/messages.usecases'; import { CreateMessageDto } from '@/infrastructure/dtos/messages/create-message.dto'; import { UpdateMessageDto } from '@/infrastructure/dtos/messages/update-message.dto'; import { ApiTags } from '@nestjs/swagger'; +import { TransformInterceptor } from '../interceptors/transform.interceptor'; @ApiTags('Messages') @Controller('messages') +@UseInterceptors(TransformInterceptor) export class MessagesController { constructor(private readonly messagesService: MessagesUsecases) {} diff --git a/cortex-js/src/infrastructure/controllers/models.controller.ts b/cortex-js/src/infrastructure/controllers/models.controller.ts index 2983d1c31..dc3d9dfe9 100644 --- a/cortex-js/src/infrastructure/controllers/models.controller.ts +++ b/cortex-js/src/infrastructure/controllers/models.controller.ts @@ -7,6 +7,7 @@ import { Param, Delete, HttpCode, + UseInterceptors, } from '@nestjs/common'; import { ModelsUsecases } from '@/usecases/models/models.usecases'; import { CreateModelDto } from '@/infrastructure/dtos/models/create-model.dto'; @@ -14,9 +15,11 @@ import { UpdateModelDto } from '@/infrastructure/dtos/models/update-model.dto'; import { ApiResponse, ApiTags } from '@nestjs/swagger'; import { StartModelSuccessDto } from '@/infrastructure/dtos/models/start-model-success.dto'; import { ModelSettingParamsDto } from '../dtos/models/model-setting-params.dto'; +import { TransformInterceptor } from '../interceptors/transform.interceptor'; @ApiTags('Models') @Controller('models') +@UseInterceptors(TransformInterceptor) export class ModelsController { constructor(private readonly modelsUsecases: ModelsUsecases) {} diff --git a/cortex-js/src/infrastructure/controllers/threads.controller.ts b/cortex-js/src/infrastructure/controllers/threads.controller.ts index e022756ae..938d977c9 100644 --- a/cortex-js/src/infrastructure/controllers/threads.controller.ts +++ b/cortex-js/src/infrastructure/controllers/threads.controller.ts @@ -6,14 +6,17 @@ import { Patch, Param, Delete, + UseInterceptors, } from '@nestjs/common'; import { ThreadsUsecases } from '@/usecases/threads/threads.usecases'; import { CreateThreadDto } from '@/infrastructure/dtos/threads/create-thread.dto'; import { UpdateThreadDto } from '@/infrastructure/dtos/threads/update-thread.dto'; import { ApiTags } from '@nestjs/swagger'; +import { TransformInterceptor } from '../interceptors/transform.interceptor'; @ApiTags('Threads') @Controller('threads') +@UseInterceptors(TransformInterceptor) export class ThreadsController { constructor(private readonly threadsService: ThreadsUsecases) {} diff --git a/cortex-js/src/infrastructure/interceptors/transform.interceptor.ts b/cortex-js/src/infrastructure/interceptors/transform.interceptor.ts new file mode 100644 index 000000000..1cc5a44fe --- /dev/null +++ b/cortex-js/src/infrastructure/interceptors/transform.interceptor.ts @@ -0,0 +1,33 @@ +import { + CallHandler, + ExecutionContext, + Injectable, + NestInterceptor, +} from '@nestjs/common'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +export interface Response { + data: T; +} + +@Injectable() +export class TransformInterceptor + implements NestInterceptor> +{ + intercept( + context: ExecutionContext, + next: CallHandler, + ): Observable> { + return next.handle().pipe( + map((data) => { + return Array.isArray(data) + ? { + object: 'list', + data, + } + : data; + }), + ); + } +}