This commit is contained in:
2025-11-18 16:18:43 +07:00
parent f150a84cf0
commit 08b352f686
10 changed files with 2140 additions and 27 deletions

View File

@@ -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
View 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();