/** * Personality API Client * Handles personality-related API requests */ import type { Personality, FormalityLevel } from "@mosaic/shared"; import { apiGet, apiPost, apiPatch, apiDelete, type ApiResponse } from "./client"; /** * Create personality DTO */ export interface CreatePersonalityDto { name: string; description?: string; tone: string; formalityLevel: FormalityLevel; systemPromptTemplate: string; isDefault?: boolean; isActive?: boolean; } /** * Update personality DTO */ export interface UpdatePersonalityDto { name?: string; description?: string; tone?: string; formalityLevel?: FormalityLevel; systemPromptTemplate?: string; isDefault?: boolean; isActive?: boolean; } /** * Fetch all personalities */ export async function fetchPersonalities(isActive = true): Promise> { const endpoint = `/api/personalities?isActive=${isActive.toString()}`; return apiGet>(endpoint); } /** * Fetch the default personality */ export async function fetchDefaultPersonality(): Promise { return apiGet("/api/personalities/default"); } /** * Fetch a single personality by ID */ export async function fetchPersonality(id: string): Promise { return apiGet(`/api/personalities/${id}`); } /** * Create a new personality */ export async function createPersonality(data: CreatePersonalityDto): Promise { return apiPost("/api/personalities", data); } /** * Update a personality */ export async function updatePersonality( id: string, data: UpdatePersonalityDto ): Promise { return apiPatch(`/api/personalities/${id}`, data); } /** * Delete a personality * The DELETE endpoint returns 204 No Content on success. */ export async function deletePersonality(id: string): Promise { await apiDelete(`/api/personalities/${id}`); }