order
This commit is contained in:
@@ -2,12 +2,15 @@ import api from './api';
|
||||
|
||||
export interface CartItem {
|
||||
cartItemId: number;
|
||||
productId: number;
|
||||
productName: string;
|
||||
productImage: string;
|
||||
quantity: number;
|
||||
price: number;
|
||||
subtotal: number;
|
||||
|
||||
product: {
|
||||
productId: number;
|
||||
productName: string;
|
||||
price: number;
|
||||
imageUrl: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface CartResponse {
|
||||
@@ -43,12 +46,20 @@ const cartService = {
|
||||
|
||||
// Lấy danh sách sản phẩm trong giỏ hàng
|
||||
getCart: async (userId: number): Promise<CartResponse> => {
|
||||
console.log('=== GET CART REQUEST ===', { userId });
|
||||
const response = await api.get<CartResponse>(
|
||||
`/cart/${userId}`,
|
||||
{ requireAuth: true }
|
||||
);
|
||||
console.log('=== GET CART RESPONSE ===', response);
|
||||
|
||||
// MAP lại items để UI dùng dễ hơn
|
||||
response.items = response.items.map(item => ({
|
||||
...item,
|
||||
productName: item.product.productName,
|
||||
productImage: item.product.imageUrl,
|
||||
price: Number(item.product.price),
|
||||
subtotal: Number(item.subtotal),
|
||||
}));
|
||||
|
||||
return response;
|
||||
},
|
||||
|
||||
|
||||
136
services/orderApi.ts
Normal file
136
services/orderApi.ts
Normal file
@@ -0,0 +1,136 @@
|
||||
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();
|
||||
Reference in New Issue
Block a user