import type { ClientTicket, ClientTicketWrite, ClientTicketStatusUpdate } from './dto/client-ticket' import type { HydraCollection } from '~/utils/api' import { extractHydraMembers } from '~/utils/api' export function useClientTicketService() { const api = useApi() async function getAll(params?: { project?: number; status?: string; submittedBy?: number }): Promise { const query: Record = {} if (params?.project) query.project = `/api/projects/${params.project}` if (params?.status) query.status = params.status if (params?.submittedBy) query.submittedBy = `/api/users/${params.submittedBy}` const data = await api.get>('/client_tickets', query) return extractHydraMembers(data) } async function getById(id: number): Promise { return api.get(`/client_tickets/${id}`) } async function create(payload: ClientTicketWrite): Promise { return api.post('/client_tickets', payload as Record, { toastSuccessKey: 'portal.ticketCreated', }) } async function updateStatus(id: number, payload: ClientTicketStatusUpdate): Promise { return api.patch(`/client_tickets/${id}`, payload as Record, { toastSuccessKey: 'clientTicket.statusUpdated', }) } async function update(id: number, data: Partial): Promise { return api.patch(`/client_tickets/${id}`, data as Record, { toastSuccessKey: 'clientTicket.updated', }) } async function remove(id: number): Promise { await api.delete(`/client_tickets/${id}`, {}, { toastSuccessKey: 'clientTicket.deleted', }) } return { getAll, getById, create, update, updateStatus, remove } }