import apiClient from './apiClient'; import type { ApiResponse, Page, IssueTicket, TicketComment } from '@/types'; export interface TicketFilterParams { category?: string; priority?: string; status?: string; searchKeyword?: string; page?: number; size?: number; } const ticketService = { getTickets(params?: TicketFilterParams) { return apiClient.get>>('/tickets', { params }); }, getTicket(ticketId: number) { return apiClient.get>(`/tickets/${ticketId}`); }, createTicket(data: Partial) { return apiClient.post>('/tickets', data); }, updateStatus(ticketId: number, status: string, assigneeId?: number) { const body: Record = { status }; if (assigneeId) body.assigneeId = String(assigneeId); return apiClient.put>(`/tickets/${ticketId}/status`, body); }, resolveTicket(ticketId: number, resolutionNote: string) { return apiClient.put>(`/tickets/${ticketId}/resolve`, { resolutionNote }); }, deleteTicket(ticketId: number) { return apiClient.delete>(`/tickets/${ticketId}`); }, getComments(ticketId: number) { return apiClient.get>(`/tickets/${ticketId}/comments`); }, addComment(ticketId: number, commentText: string, attachedFileUrl?: string) { return apiClient.post>(`/tickets/${ticketId}/comments`, { commentText, attachedFileUrl, }); }, deleteComment(ticketId: number, commentId: number) { return apiClient.delete>(`/tickets/${ticketId}/comments/${commentId}`); }, getPendingApprovals() { return apiClient.get>('/tickets/pending'); }, approveTicket(ticketId: number) { return apiClient.post>(`/tickets/${ticketId}/approve`); }, rejectTicket(ticketId: number, reason: string) { return apiClient.post>(`/tickets/${ticketId}/reject`, { reason }); }, reopenTicket(ticketId: number) { return apiClient.post>(`/tickets/${ticketId}/reopen`); }, }; export default ticketService;