Catalyst / admin/Synapse-Cortex 14.8 GB / 57.8 GB 40.0 GB free
Help Sign in

admin / Synapse-Cortex

public

Self Hosted ITSM Tool with RBAC/Tenanting and MFA

Code Issues Pull requests Pipelines Packages Security Insights Wiki Settings
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 }),
}