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

104 lines
2.7 KiB
TypeScript

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<CartResponse> => {
console.log('=== ADD TO CART REQUEST ===', { userId, data });
const response = await api.post<CartResponse>(
`/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<CartResponse> => {
const response = await api.get<CartResponse>(
`/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<CartResponse> => {
console.log('=== UPDATE CART ITEM REQUEST ===', { userId, cartItemId, data });
const response = await api.put<CartResponse>(
`/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<CartResponse> => {
console.log('=== REMOVE CART ITEM REQUEST ===', { userId, cartItemId });
const response = await api.delete<CartResponse>(
`/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<void> => {
console.log('=== CLEAR CART REQUEST ===', { userId });
await api.delete<void>(
`/cart/${userId}/clear`,
{ requireAuth: true }
);
console.log('=== CLEAR CART SUCCESS ===');
},
};
export default cartService;