import { type PromptCreateRequest, type PromptUpdateRequest, promptCreateRequest, promptDeleteResponse, promptRead, promptsListResponse, promptUpdateRequest, publicPromptsListResponse, } from "@/contracts/types/prompts.types"; import { ValidationError } from "@/lib/error"; import { baseApiService } from "./base-api.service"; class PromptsApiService { list = async (workspaceId?: number) => { const params = new URLSearchParams(); if (workspaceId !== undefined) { params.set("workspace_id", String(workspaceId)); } const queryString = params.toString(); const url = queryString ? `/api/v1/prompts?${queryString}` : "/api/v1/prompts"; return baseApiService.get(url, promptsListResponse); }; create = async (request: PromptCreateRequest) => { const parsed = promptCreateRequest.safeParse(request); if (!parsed.success) { const errorMessage = parsed.error.issues.map((issue) => issue.message).join(", "); throw new ValidationError(`Invalid request: ${errorMessage}`); } const { workspace_id, ...body } = parsed.data; return baseApiService.post("/api/v1/prompts", promptRead, { body: { ...body, workspace_id }, }); }; update = async (promptId: number, request: PromptUpdateRequest) => { const parsed = promptUpdateRequest.safeParse(request); if (!parsed.success) { const errorMessage = parsed.error.issues.map((issue) => issue.message).join(", "); throw new ValidationError(`Invalid request: ${errorMessage}`); } return baseApiService.put(`/api/v1/prompts/${promptId}`, promptRead, { body: parsed.data, }); }; delete = async (promptId: number) => { return baseApiService.delete(`/api/v1/prompts/${promptId}`, promptDeleteResponse); }; listPublic = async () => { return baseApiService.get("/api/v1/prompts/public", publicPromptsListResponse); }; copy = async (promptId: number) => { return baseApiService.post(`/api/v1/prompts/${promptId}/copy`, promptRead, {}); }; } export const promptsApiService = new PromptsApiService();