All files / src/api tickets.ts

25.58% Statements 11/43
0% Branches 0/12
0% Functions 0/11
28.94% Lines 11/38

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89                      1x                       1x         1x         1x         1x       1x         1x           1x         1x           1x                                       1x        
import apiClient from './client';
import { Ticket, TicketComment, TicketTemplate, CannedResponse, TicketStatus, TicketPriority, TicketCategory, TicketType } from '../types';
 
export interface TicketFilters {
  status?: TicketStatus;
  priority?: TicketPriority;
  category?: TicketCategory;
  ticketType?: TicketType;
  assignee?: string;
}
 
export const getTickets = async (filters?: TicketFilters): Promise<Ticket[]> => {
  const params = new URLSearchParams();
  if (filters?.status) params.append('status', filters.status);
  if (filters?.priority) params.append('priority', filters.priority);
  if (filters?.category) params.append('category', filters.category);
  if (filters?.ticketType) params.append('ticket_type', filters.ticketType);
  if (filters?.assignee) params.append('assignee', filters.assignee);
 
  const response = await apiClient.get(`/tickets/${params.toString() ? `?${params.toString()}` : ''}`);
  return response.data;
};
 
export const getTicket = async (id: string): Promise<Ticket> => {
  const response = await apiClient.get(`/tickets/${id}/`);
  return response.data;
};
 
export const createTicket = async (data: Partial<Ticket>): Promise<Ticket> => {
  const response = await apiClient.post('/tickets/', data);
  return response.data;
};
 
export const updateTicket = async (id: string, data: Partial<Ticket>): Promise<Ticket> => {
  const response = await apiClient.patch(`/tickets/${id}/`, data);
  return response.data;
};
 
export const deleteTicket = async (id: string): Promise<void> => {
  await apiClient.delete(`/tickets/${id}/`);
};
 
export const getTicketComments = async (ticketId: string): Promise<TicketComment[]> => {
  const response = await apiClient.get(`/tickets/${ticketId}/comments/`);
  return response.data;
};
 
export const createTicketComment = async (ticketId: string, data: Partial<TicketComment>): Promise<TicketComment> => {
  const response = await apiClient.post(`/tickets/${ticketId}/comments/`, data);
  return response.data;
};
 
// Ticket Templates
export const getTicketTemplates = async (): Promise<TicketTemplate[]> => {
  const response = await apiClient.get('/tickets/templates/');
  return response.data;
};
 
export const getTicketTemplate = async (id: string): Promise<TicketTemplate> => {
  const response = await apiClient.get(`/tickets/templates/${id}/`);
  return response.data;
};
 
// Canned Responses
export const getCannedResponses = async (): Promise<CannedResponse[]> => {
  const response = await apiClient.get('/tickets/canned-responses/');
  return response.data;
};
 
// Refresh emails manually
export interface RefreshEmailsResult {
  success: boolean;
  processed: number;
  results: {
    address: string | null;
    display_name?: string;
    processed?: number;
    status: string;
    error?: string;
    message?: string;
    last_check_at?: string;
  }[];
}
 
export const refreshTicketEmails = async (): Promise<RefreshEmailsResult> => {
  const response = await apiClient.post('/tickets/refresh-emails/');
  return response.data;
};