Browse Source

feat: agent模块开发完成

huangzhichao 2 ngày trước cách đây
mục cha
commit
c8553e0421

+ 4 - 2
src/app.module.ts

@@ -1,8 +1,9 @@
 import { Module } from '@nestjs/common'
 
 import { AgentListModule } from '@/module/agent-list/agent-list.module'
+import { AgentModuleModule } from '@/module/agent-module/agent-module.module'
 import { AgentServerModule } from '@/module/agent-server/agent-server.module'
-import { AgentTestModule } from '@/module/agent-test-management/agent-test.module'
+import { AgentTestModule } from '@/module/agent-test/agent-test.module'
 import { ChatManagementModule } from '@/module/chat-management/chat-management.module'
 import { SqlAgentModule } from '@/module/sql-agent/sql-agent.module'
 import { TencentCloudModule } from '@/module/tencent-cloud/tencent-cloud.module'
@@ -14,7 +15,8 @@ import { TencentCloudModule } from '@/module/tencent-cloud/tencent-cloud.module'
     AgentServerModule,
     ChatManagementModule,
     AgentListModule,
-    AgentTestModule
+    AgentTestModule,
+    AgentModuleModule
   ]
 })
 export class AppModule {}

+ 37 - 0
src/dto/agent-module.ts

@@ -0,0 +1,37 @@
+import { IsString, IsNotEmpty, IsNumber } from 'class-validator'
+
+export class GetModuleConfigurationDto {
+  @IsString()
+  @IsNotEmpty({ message: 'module_id不能为空' })
+  moduleId: number
+}
+
+export class SaveModuleConfigurationDto {
+  @IsNumber()
+  @IsNotEmpty({ message: 'id不能为空' })
+  id: number
+
+  @IsString()
+  @IsNotEmpty({ message: 'name不能为空' })
+  name: string
+
+  @IsString()
+  @IsNotEmpty({ message: 'display_name不能为空' })
+  displayName: string
+
+  @IsNumber()
+  @IsNotEmpty({ message: 'default_agent_type不能为空' })
+  defaultAgentType: number
+
+  @IsNumber()
+  @IsNotEmpty({ message: 'default_agent_id不能为空' })
+  defaultAgentId: number
+
+  @IsString()
+  @IsNotEmpty({ message: 'create_time不能为空' })
+  createTime: string
+
+  @IsString()
+  @IsNotEmpty({ message: 'updated_time不能为空' })
+  updatedTime: string
+}

+ 15 - 0
src/interface/agent-module.interface.ts

@@ -0,0 +1,15 @@
+import { ServiceResponse } from '../response/response.interface'
+
+export interface IAgentModuleService {
+  getModuleList(): Promise<ServiceResponse<ModuleConfigurationType[]>>
+  getModuleConfiguration(
+    module_id: number
+  ): Promise<ServiceResponse<ModuleConfigurationType>>
+  saveModuleConfiguration(
+    module_id: number,
+    name: string,
+    display_name: string,
+    default_agent_type: number,
+    default_agent_id: number
+  ): Promise<ServiceResponse<any>>
+}

+ 45 - 0
src/module/agent-module/agent-module.controller.ts

@@ -0,0 +1,45 @@
+import { Controller, Get, Query, Post, Body } from '@nestjs/common'
+import { ApiOperation, ApiTags } from '@nestjs/swagger'
+
+import {
+  GetModuleConfigurationDto,
+  SaveModuleConfigurationDto
+} from '@/dto/agent-module'
+
+import { AgentModuleService } from './service/agent-module.service'
+
+@ApiTags('agent-module')
+@Controller('agent-module')
+export class AgentModuleController {
+  constructor(private readonly agentModuleService: AgentModuleService) {}
+
+  @Get('get-module-list')
+  @ApiOperation({ summary: '获取模块列表' })
+  async getModuleList() {
+    return this.agentModuleService.getModuleList()
+  }
+
+  @Get('get-module-configuration')
+  @ApiOperation({ summary: '获取模块配置' })
+  async getModuleConfiguration(@Query() query: GetModuleConfigurationDto) {
+    return this.agentModuleService.getModuleConfiguration(query.moduleId)
+  }
+
+  @Post('save-module-configuration')
+  @ApiOperation({ summary: '保存模块配置' })
+  async saveModuleConfiguration(@Body() body: SaveModuleConfigurationDto) {
+    return this.agentModuleService.saveModuleConfiguration(
+      body.id,
+      body.name,
+      body.displayName,
+      body.defaultAgentType,
+      body.defaultAgentId
+    )
+  }
+
+  @Get('get-module-agent-types')
+  @ApiOperation({ summary: '获取模块代理类型' })
+  async getModuleAgentTypes() {
+    return this.agentModuleService.getModuleAgentTypes()
+  }
+}

+ 14 - 0
src/module/agent-module/agent-module.module.ts

@@ -0,0 +1,14 @@
+import { Module } from '@nestjs/common'
+
+import { HttpClientModule } from '@/shared/http-client/http-client.module'
+
+import { AgentModuleController } from './agent-module.controller'
+import { AgentModuleHttpService } from './service/agent-module-http.service'
+import { AgentModuleService } from './service/agent-module.service'
+
+@Module({
+  imports: [HttpClientModule],
+  controllers: [AgentModuleController],
+  providers: [AgentModuleHttpService, AgentModuleService]
+})
+export class AgentModuleModule {}

+ 59 - 0
src/module/agent-module/service/agent-module-http.service.ts

@@ -0,0 +1,59 @@
+import { Injectable } from '@nestjs/common'
+
+import { ServiceResponse } from '@/response/response.interface'
+import { HttpClientService } from '@/shared/http-client/http-client.service'
+
+@Injectable()
+export class AgentModuleHttpService {
+  private readonly baseUrl = 'http://192.168.206.189:8083/api'
+
+  constructor(private readonly httpClientService: HttpClientService) {}
+
+  private async makeRequest<T>(
+    endpoint: string,
+    params?: Record<string, any>
+  ): Promise<ServiceResponse<T>> {
+    const url = `${this.baseUrl}/${endpoint}`
+    return this.httpClientService.get<T>(url, params)
+  }
+
+  async makeRequestPost<T>(
+    endpoint: string,
+    params?: Record<string, any>
+  ): Promise<ServiceResponse<T>> {
+    const url = `${this.baseUrl}/${endpoint}`
+    return this.httpClientService.post<T>(url, params)
+  }
+
+  async getModuleList(): Promise<ServiceResponse<ModuleConfigurationType[]>> {
+    return this.makeRequest<ModuleConfigurationType[]>('getModuleList')
+  }
+
+  async getModuleConfiguration(
+    module_id: number
+  ): Promise<ServiceResponse<ModuleConfigurationType>> {
+    return this.makeRequest<ModuleConfigurationType>('getModuleConfiguration', {
+      module_id
+    })
+  }
+
+  async saveModuleConfiguration(
+    module_id: number,
+    name: string,
+    display_name: string,
+    default_agent_type: number,
+    default_agent_id: number
+  ): Promise<ServiceResponse<any>> {
+    return this.makeRequestPost<any>('saveModuleConfiguration', {
+      module_id,
+      name,
+      display_name,
+      default_agent_type,
+      default_agent_id
+    })
+  }
+
+  async getModuleAgentTypes(): Promise<ServiceResponse<any>> {
+    return this.makeRequest<any>('getModuleAgentTypes')
+  }
+}

+ 91 - 0
src/module/agent-module/service/agent-module.service.ts

@@ -0,0 +1,91 @@
+import { Injectable } from '@nestjs/common'
+
+import { IAgentModuleService } from '@/interface/agent-module.interface'
+import { ServiceResponse } from '@/response/response.interface'
+import { BusinessCode, HttpStatusCode } from '@/response/status-code.enum'
+
+import { AgentModuleHttpService } from './agent-module-http.service'
+
+@Injectable()
+export class AgentModuleService implements IAgentModuleService {
+  constructor(private readonly httpService: AgentModuleHttpService) {}
+
+  async getModuleList(): Promise<ServiceResponse<ModuleConfigurationType[]>> {
+    const { code, data, msg } = await this.httpService.getModuleList()
+    if (code !== HttpStatusCode.OK) {
+      return {
+        code: BusinessCode.BAD_REQUEST,
+        msg: msg || '获取模块列表失败',
+        data: null
+      }
+    }
+    return {
+      code: BusinessCode.SUCCESS,
+      data,
+      msg: msg || '获取模块列表成功'
+    }
+  }
+
+  async getModuleConfiguration(
+    module_id: number
+  ): Promise<ServiceResponse<ModuleConfigurationType>> {
+    const { code, data, msg } =
+      await this.httpService.getModuleConfiguration(module_id)
+    if (code !== HttpStatusCode.OK) {
+      return {
+        code: BusinessCode.BAD_REQUEST,
+        msg: msg || '获取模块配置失败',
+        data: null
+      }
+    }
+    return {
+      code: BusinessCode.SUCCESS,
+      data,
+      msg: msg || '获取模块配置成功'
+    }
+  }
+
+  async saveModuleConfiguration(
+    module_id: number,
+    name: string,
+    display_name: string,
+    default_agent_type: number,
+    default_agent_id: number
+  ): Promise<ServiceResponse<any>> {
+    const { code, data, msg } = await this.httpService.saveModuleConfiguration(
+      module_id,
+      name,
+      display_name,
+      default_agent_type,
+      default_agent_id
+    )
+    if (code !== HttpStatusCode.OK) {
+      return {
+        code: BusinessCode.BAD_REQUEST,
+        msg: msg || '保存模块配置失败',
+        data: null
+      }
+    }
+    return {
+      code: BusinessCode.SUCCESS,
+      data,
+      msg: msg || '保存模块配置成功'
+    }
+  }
+
+  async getModuleAgentTypes(): Promise<ServiceResponse<any>> {
+    const { code, data, msg } = await this.httpService.getModuleAgentTypes()
+    if (code !== HttpStatusCode.OK) {
+      return {
+        code: BusinessCode.BAD_REQUEST,
+        msg: msg || '获取模块代理类型失败',
+        data: null
+      }
+    }
+    return {
+      code: BusinessCode.SUCCESS,
+      data,
+      msg: msg || '获取模块代理类型成功'
+    }
+  }
+}

+ 9 - 0
src/module/agent-module/type.d.ts

@@ -0,0 +1,9 @@
+type ModuleConfigurationType = {
+  id: number
+  name: string
+  display_name: string
+  default_agent_type: number
+  default_agent_id: number
+  create_time: string
+  updated_time: string
+}

+ 0 - 0
src/module/agent-test-management/agent-test.controller.ts → src/module/agent-test/agent-test.controller.ts


+ 0 - 0
src/module/agent-test-management/agent-test.module.ts → src/module/agent-test/agent-test.module.ts


+ 0 - 0
src/module/agent-test-management/service/agent-test-http.service.ts → src/module/agent-test/service/agent-test-http.service.ts


+ 0 - 0
src/module/agent-test-management/service/agent-test.service.ts → src/module/agent-test/service/agent-test.service.ts


+ 0 - 0
src/module/agent-test-management/type.d.ts → src/module/agent-test/type.d.ts