admin / Synapse-Cortex
publicSelf Hosted ITSM Tool with RBAC/Tenanting and MFA
Synapse-Cortex / Synapse-Cortexv2 / frontend / src / api / tickets.ts
1926 B · main
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | import { api } from './client' import type { TicketActionOut, TicketOut, TicketPriority, TicketStatus, TicketType } from './types' export interface TicketCreatePayload { title: string description?: string ticket_type?: TicketType priority?: TicketPriority asset_id?: string assigned_to_id?: string } export interface TicketUpdatePayload { title?: string description?: string status?: TicketStatus assigned_to_id?: string priority?: TicketPriority credential_ref_id?: string } export type TicketQueueFilter = 'unassigned' | 'awaiting_user' | 'sla_breaching' | 'resolved_today' export type TicketSort = 'newest' | 'oldest' | 'priority' | 'status' export interface TicketListParams { status_filter?: TicketStatus filter?: TicketQueueFilter q?: string sort?: TicketSort } export const ticketsApi = { list: (params?: TicketListParams) => { const usp = new URLSearchParams() if (params?.status_filter) usp.set('status_filter', params.status_filter) if (params?.filter) usp.set('filter', params.filter) if (params?.q) usp.set('q', params.q) if (params?.sort) usp.set('sort', params.sort) const qs = usp.toString() return api.get<TicketOut[]>(`/api/v1/tickets${qs ? `?${qs}` : ''}`) }, get: (id: string) => api.get<TicketOut>(`/api/v1/tickets/${id}`), create: (payload: TicketCreatePayload) => api.post<TicketOut>('/api/v1/tickets', payload), update: (id: string, payload: TicketUpdatePayload) => api.patch<TicketOut>(`/api/v1/tickets/${id}`, payload), delete: (id: string) => api.delete<void>(`/api/v1/tickets/${id}`), bulkDelete: (ticket_ids: string[]) => api.post<{ deleted: number }>('/api/v1/tickets/bulk-delete', { ticket_ids }), listActions: (id: string) => api.get<TicketActionOut[]>(`/api/v1/tickets/${id}/actions`), addAction: (id: string, body: string) => api.post<TicketActionOut>(`/api/v1/tickets/${id}/actions`, { body }), } |