import { Body, Controller, Delete, Get, Param, Post, Put, Query, UseGuards, } from '@nestjs/common'; import type { CreateLlmApiConfigRequest, UpdateLlmApiConfigRequest, } from '@dukang/shared-types'; import { HqAuthGuard } from '../../common/guards/hq-auth.guard'; import { HqPermissionGuard, RequireHqPermissions, } from '../../common/guards/hq-permission.guard'; import { CurrentUser } from '../../common/decorators/current-user.decorator'; import type { AuthUser } from '../../common/guards/jwt-auth.guard'; import { HqOperation } from '../../common/hq-operation/hq-operation.decorator'; import { HqOperationAction } from '../../common/hq-operation/hq-operation.constants'; import { AdminLlmConfigsService } from './admin-llm-configs.service'; @Controller('admin/llm-configs') @UseGuards(HqAuthGuard, HqPermissionGuard) @RequireHqPermissions('llm_configs') export class AdminLlmConfigsController { constructor(private readonly service: AdminLlmConfigsService) {} @Get() async list( @CurrentUser() user: AuthUser, @Query('name') name?: string, @Query('enabled') enabled?: string, @Query('page') page?: string, @Query('pageSize') pageSize?: string, ) { const actor = await this.service.resolveActor(user.actorId); return this.service.list(actor, { name, enabled, page: page ? Number(page) : undefined, pageSize: pageSize ? Number(pageSize) : undefined, }); } @Get('options') async options(@CurrentUser() user: AuthUser) { const actor = await this.service.resolveActor(user.actorId); return this.service.options(actor); } @Get(':id') async detail(@CurrentUser() user: AuthUser, @Param('id') id: string) { const actor = await this.service.resolveActor(user.actorId); return this.service.detail(actor, BigInt(id)); } @Post() @HqOperation({ action: HqOperationAction.LLM_CONFIG_CREATE, refType: 'LLM_CONFIG', includeBody: true, }) async create(@CurrentUser() user: AuthUser, @Body() body: CreateLlmApiConfigRequest) { const actor = await this.service.resolveActor(user.actorId); return this.service.create(actor, body); } @Put(':id') @HqOperation({ action: HqOperationAction.LLM_CONFIG_UPDATE, refType: 'LLM_CONFIG', refIdField: 'id', includeBody: true, }) async update( @CurrentUser() user: AuthUser, @Param('id') id: string, @Body() body: UpdateLlmApiConfigRequest, ) { const actor = await this.service.resolveActor(user.actorId); return this.service.update(actor, BigInt(id), body); } @Delete(':id') @HqOperation({ action: HqOperationAction.LLM_CONFIG_DELETE, refType: 'LLM_CONFIG', refIdField: 'id', }) async remove(@CurrentUser() user: AuthUser, @Param('id') id: string) { const actor = await this.service.resolveActor(user.actorId); return this.service.remove(actor, BigInt(id)); } @Post(':id/test') @HqOperation({ action: HqOperationAction.LLM_CONFIG_TEST, refType: 'LLM_CONFIG', refIdField: 'id', }) async test(@CurrentUser() user: AuthUser, @Param('id') id: string) { const actor = await this.service.resolveActor(user.actorId); return this.service.test(actor, BigInt(id)); } }