Files
SR-SYSTEM/src/services/ticketService.ts
T

73 lines
2.2 KiB
TypeScript

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<ApiResponse<Page<IssueTicket>>>('/tickets', { params });
},
getTicket(ticketId: number) {
return apiClient.get<ApiResponse<IssueTicket>>(`/tickets/${ticketId}`);
},
createTicket(data: Partial<IssueTicket>) {
return apiClient.post<ApiResponse<IssueTicket>>('/tickets', data);
},
updateStatus(ticketId: number, status: string, assigneeId?: number) {
const body: Record<string, string> = { status };
if (assigneeId) body.assigneeId = String(assigneeId);
return apiClient.put<ApiResponse<IssueTicket>>(`/tickets/${ticketId}/status`, body);
},
resolveTicket(ticketId: number, resolutionNote: string) {
return apiClient.put<ApiResponse<IssueTicket>>(`/tickets/${ticketId}/resolve`, { resolutionNote });
},
deleteTicket(ticketId: number) {
return apiClient.delete<ApiResponse<void>>(`/tickets/${ticketId}`);
},
getComments(ticketId: number) {
return apiClient.get<ApiResponse<TicketComment[]>>(`/tickets/${ticketId}/comments`);
},
addComment(ticketId: number, commentText: string, attachedFileUrl?: string) {
return apiClient.post<ApiResponse<TicketComment>>(`/tickets/${ticketId}/comments`, {
commentText,
attachedFileUrl,
});
},
deleteComment(ticketId: number, commentId: number) {
return apiClient.delete<ApiResponse<void>>(`/tickets/${ticketId}/comments/${commentId}`);
},
getPendingApprovals() {
return apiClient.get<ApiResponse<IssueTicket[]>>('/tickets/pending');
},
approveTicket(ticketId: number) {
return apiClient.post<ApiResponse<IssueTicket>>(`/tickets/${ticketId}/approve`);
},
rejectTicket(ticketId: number, reason: string) {
return apiClient.post<ApiResponse<IssueTicket>>(`/tickets/${ticketId}/reject`, { reason });
},
reopenTicket(ticketId: number) {
return apiClient.post<ApiResponse<IssueTicket>>(`/tickets/${ticketId}/reopen`);
},
};
export default ticketService;