72 lines
2.4 KiB
TypeScript
72 lines
2.4 KiB
TypeScript
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<AgentProviderConfig[]> {
|
|
return this.prisma.agentProviderConfig.findMany({
|
|
orderBy: [{ createdAt: "desc" }, { id: "desc" }],
|
|
});
|
|
}
|
|
|
|
async getById(id: string): Promise<AgentProviderConfig> {
|
|
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<AgentProviderConfig> {
|
|
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<AgentProviderConfig> {
|
|
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<AgentProviderConfig> {
|
|
await this.getById(id);
|
|
|
|
return this.prisma.agentProviderConfig.delete({
|
|
where: { id },
|
|
});
|
|
}
|
|
|
|
private toJsonValue(value: Record<string, unknown>): Prisma.InputJsonValue {
|
|
return value as Prisma.InputJsonValue;
|
|
}
|
|
}
|