canina/frontend/application/lib/services/ticketService.ts
2026-08-16 18:01:43 +03:30

64 lines
1.5 KiB
TypeScript

import api from './api';
export interface TicketMessage {
id: string;
ticketId: string;
senderId?: string;
senderRole: 'USER' | 'ADMIN' | 'VET_DOCTOR';
senderName: string;
message: string;
attachment?: string;
createdAt: string;
}
export interface Ticket {
id: string;
ticketNumber: string;
userId: string;
petId?: string;
subject: string;
category: 'VET_CONSULTATION' | 'ORDER_SUPPORT' | 'PRODUCT_INQUIRY' | 'GENERAL';
priority: 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT';
status: 'OPEN' | 'ANSWERED' | 'IN_PROGRESS' | 'CLOSED';
createdAt: string;
updatedAt: string;
pet?: {
id: string;
name: string;
type: string;
breed: string;
};
messages: TicketMessage[];
}
export interface CreateTicketPayload {
subject: string;
message: string;
category?: string;
priority?: string;
petId?: string;
attachment?: string;
}
export const ticketService = {
async getMyTickets(): Promise<Ticket[]> {
const res = await api.get('/tickets/my-tickets');
return res.data?.data || [];
},
async getTicketDetails(id: string): Promise<Ticket> {
const res = await api.get(`/tickets/${id}`);
return res.data?.data;
},
async createTicket(payload: CreateTicketPayload): Promise<Ticket> {
const res = await api.post('/tickets', payload);
return res.data?.data;
},
async replyTicket(ticketId: string, message: string, attachment?: string): Promise<TicketMessage> {
const res = await api.post(`/tickets/${ticketId}/messages`, { message, attachment });
return res.data?.data;
}
};