import { Injectable, NotFoundException } from "@nestjs/common"; import type { AgentProviderConfig, Prisma } from "@prisma/client"; import { PrismaService } from "../../prisma/prisma.service"; import { CreateAgentProviderDto } from "./dto/create-agent-provider.dto"; import { UpdateAgentProviderDto } from "./dto/update-agent-provider.dto"; @Injectable() export class AgentProvidersService { constructor(private readonly prisma: PrismaService) {} async list(): Promise { return this.prisma.agentProviderConfig.findMany({ orderBy: [{ createdAt: "desc" }, { id: "desc" }], }); } async getById(id: string): Promise { const providerConfig = await this.prisma.agentProviderConfig.findUnique({ where: { id }, }); if (!providerConfig) { throw new NotFoundException(`Agent provider config with id ${id} not found`); } return providerConfig; } async create(dto: CreateAgentProviderDto): Promise { return this.prisma.agentProviderConfig.create({ data: { workspaceId: dto.workspaceId, name: dto.name, provider: dto.provider, gatewayUrl: dto.gatewayUrl, credentials: this.toJsonValue(dto.credentials ?? {}), ...(dto.isActive !== undefined ? { isActive: dto.isActive } : {}), }, }); } async update(id: string, dto: UpdateAgentProviderDto): Promise { await this.getById(id); const data: Prisma.AgentProviderConfigUpdateInput = { ...(dto.workspaceId !== undefined ? { workspaceId: dto.workspaceId } : {}), ...(dto.name !== undefined ? { name: dto.name } : {}), ...(dto.provider !== undefined ? { provider: dto.provider } : {}), ...(dto.gatewayUrl !== undefined ? { gatewayUrl: dto.gatewayUrl } : {}), ...(dto.isActive !== undefined ? { isActive: dto.isActive } : {}), ...(dto.credentials !== undefined ? { credentials: this.toJsonValue(dto.credentials) } : {}), }; return this.prisma.agentProviderConfig.update({ where: { id }, data, }); } async delete(id: string): Promise { await this.getById(id); return this.prisma.agentProviderConfig.delete({ where: { id }, }); } private toJsonValue(value: Record): Prisma.InputJsonValue { return value as Prisma.InputJsonValue; } }