import api from './api'; export interface CartItem { cartItemId: number; quantity: number; subtotal: number; product: { productId: number; productName: string; price: number; imageUrl: string; }; } export interface CartResponse { cartId: number; userId: number; items: CartItem[]; totalAmount: number; totalItems: number; createdAt: string; } export interface AddToCartRequest { productId: number; quantity: number; } export interface UpdateCartItemRequest { quantity: number; } const cartService = { // Thêm sản phẩm vào giỏ hàng addToCart: async (userId: number, data: AddToCartRequest): Promise => { console.log('=== ADD TO CART REQUEST ===', { userId, data }); const response = await api.post( `/cart/${userId}`, data, { requireAuth: true } ); console.log('=== ADD TO CART RESPONSE ===', response); return response; }, // Lấy danh sách sản phẩm trong giỏ hàng getCart: async (userId: number): Promise => { const response = await api.get( `/cart/${userId}`, { requireAuth: true } ); // 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; }, // Cập nhật số lượng sản phẩm updateCartItem: async ( userId: number, cartItemId: number, data: UpdateCartItemRequest ): Promise => { console.log('=== UPDATE CART ITEM REQUEST ===', { userId, cartItemId, data }); const response = await api.put( `/cart/${userId}/items/${cartItemId}`, data, { requireAuth: true } ); console.log('=== UPDATE CART ITEM RESPONSE ===', response); return response; }, // Xóa một sản phẩm khỏi giỏ hàng removeCartItem: async (userId: number, cartItemId: number): Promise => { console.log('=== REMOVE CART ITEM REQUEST ===', { userId, cartItemId }); const response = await api.delete( `/cart/${userId}/items/${cartItemId}`, { requireAuth: true } ); console.log('=== REMOVE CART ITEM RESPONSE ===', response); return response; }, // Xóa tất cả sản phẩm khỏi giỏ hàng clearCart: async (userId: number): Promise => { console.log('=== CLEAR CART REQUEST ===', { userId }); await api.delete( `/cart/${userId}/clear`, { requireAuth: true } ); console.log('=== CLEAR CART SUCCESS ==='); }, }; export default cartService;