136 lines
2.9 KiB
TypeScript
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(); |