64 lines
1.5 KiB
TypeScript
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;
|
|
}
|
|
};
|