73 lines
2.2 KiB
TypeScript
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;
|