93 lines
2.5 KiB
TypeScript
93 lines
2.5 KiB
TypeScript
import api from './api';
|
|
|
|
export interface CartItem {
|
|
cartItemId: number;
|
|
productId: number;
|
|
productName: string;
|
|
productImage: string;
|
|
quantity: number;
|
|
price: number;
|
|
subtotal: number;
|
|
}
|
|
|
|
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> => {
|
|
console.log('=== GET CART REQUEST ===', { userId });
|
|
const response = await api.get<CartResponse>(
|
|
`/cart/${userId}`,
|
|
{ requireAuth: true }
|
|
);
|
|
console.log('=== GET CART RESPONSE ===', response);
|
|
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; |