import type { ClientTicket, ClientTicketCreate, ClientTicketStatusUpdate, } from './dto/client-ticket' import type { HydraCollection } from '~/utils/api' import { extractHydraMembers } from '~/utils/api' export type ClientTicketFilters = { project?: number | string status?: string submittedBy?: number | string } export function useClientTicketService() { const api = useApi() async function getAll(params?: ClientTicketFilters): Promise { const query: Record = {} if (params?.project !== undefined && params.project !== '') { query.project = typeof params.project === 'number' ? `/api/projects/${params.project}` : params.project } if (params?.status) { query.status = params.status } if (params?.submittedBy !== undefined && params.submittedBy !== '') { query.submittedBy = typeof params.submittedBy === 'number' ? `/api/users/${params.submittedBy}` : 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: ClientTicketCreate): Promise { return api.post('/client_tickets', payload as Record, { toastSuccessKey: 'clientTicket.created', }) } async function updateStatus(id: number, payload: ClientTicketStatusUpdate): Promise { return api.patch(`/client_tickets/${id}`, payload as Record, { toastSuccessKey: 'clientTicket.statusChanged', }) } async function remove(id: number): Promise { await api.delete(`/client_tickets/${id}`, {}, { toastSuccessKey: 'clientTicket.deleted', }) } return { getAll, getById, create, updateStatus, remove } }