Files
project_it207_client/services/orderApi.ts
2025-11-18 16:18:43 +07:00

136 lines
2.9 KiB
TypeScript

import api from './api';
export interface CreateOrderRequest {
shippingAddress: string;
items: {
productId: number;
quantity: number;
}[];
}
export interface OrderItem {
orderItemId: number;
productId: number;
productName: string;
quantity: number;
price: number;
subtotal: number;
}
export interface Order {
orderId: number;
userId: number;
userName: string;
totalPrice: number;
orderStatus: string;
shippingAddress: string;
createdAt: string;
updatedAt: string;
orderItems: OrderItem[];
}
export interface OrderProgress {
orderId: number;
orderStatus: string;
timeline: {
status: string;
timestamp: string | null;
completed: boolean;
}[];
}
export interface ApiResponse<T> {
success: boolean;
message?: string;
data?: T;
total?: number;
}
class OrderApiService {
/**
* Tạo đơn hàng
*/
async createOrder(userId: number,orderData: CreateOrderRequest): Promise<ApiResponse<Order>> {
try {
return await api.post(`/orders/${userId}`, orderData, {
requireAuth: true
});
} catch (error) {
console.error('Create order error:', error);
throw error;
}
}
/**
* Lấy tất cả đơn hàng
*/
async getAllOrders(): Promise<ApiResponse<Order[]>> {
try {
return await api.get<ApiResponse<Order[]>>('/orders', {
requireAuth: true
});
} catch (error) {
console.error('Get all orders error:', error);
throw error;
}
}
/**
* Lọc đơn hàng theo trạng thái
*/
async getOrdersByStatus(status: string): Promise<ApiResponse<Order[]>> {
try {
return await api.get<ApiResponse<Order[]>>(
`/orders/filter?status=${status}`,
{ requireAuth: true }
);
} catch (error) {
console.error('Get orders by status error:', error);
throw error;
}
}
/**
* Lấy chi tiết đơn hàng
*/
async getOrderDetail(orderId: number): Promise<ApiResponse<Order>> {
try {
return await api.get<ApiResponse<Order>>(`/orders/${orderId}`, {
requireAuth: true
});
} catch (error) {
console.error('Get order detail error:', error);
throw error;
}
}
/**
* Lấy tiến độ đơn hàng
*/
async getOrderProgress(orderId: number): Promise<ApiResponse<OrderProgress>> {
try {
return api.get(`/orders/${orderId}/progress`, { requireAuth: true });
} catch (error) {
console.error('Get order progress error:', error);
throw error;
}
}
/**
* Hủy đơn hàng
*/
async cancelOrder(orderId: number): Promise<ApiResponse<Order>> {
try {
return await api.put<ApiResponse<Order>>(
`/orders/${orderId}/cancel`,
undefined,
{ requireAuth: true }
);
} catch (error) {
console.error('Cancel order error:', error);
throw error;
}
}
}
export default new OrderApiService();