import api from './api'; export interface ProductResponse { productId: number; productName: string; description: string; price: number; stockQuantity: number; imageUrl: string; categoryId: number; categoryName: string; createdAt: string; updatedAt: string; } export interface ProductListResponse { products: ProductResponse[]; currentPage: number; totalItems: number; totalPages: number; hasNext: boolean; hasPrevious: boolean; } class ProductService { /** * Lấy danh sách tất cả sản phẩm */ async getAllProducts( page: number = 0, size: number = 10, sortBy: string = 'productId', sortDir: 'asc' | 'desc' = 'asc' ): Promise { const params = new URLSearchParams({ page: page.toString(), size: size.toString(), sortBy, sortDir, }); return await api.get(`/products?${params}`); } /** * Lấy chi tiết sản phẩm theo ID */ async getProductById(id: number): Promise { return await api.get(`/products/${id}`); } /** * Lấy sản phẩm theo category */ async getProductsByCategory( categoryId: number, page: number = 0, size: number = 10, sortBy: string = 'productId', sortDir: 'asc' | 'desc' = 'asc' ): Promise { const params = new URLSearchParams({ page: page.toString(), size: size.toString(), sortBy, sortDir, }); return await api.get(`/products/category/${categoryId}?${params}`); } /** * Tìm kiếm sản phẩm */ async searchProducts( keyword: string, page: number = 0, size: number = 10, sortBy: string = 'productId', sortDir: 'asc' | 'desc' = 'asc' ): Promise { const params = new URLSearchParams({ keyword, page: page.toString(), size: size.toString(), sortBy, sortDir, }); return await api.get(`/products/search?${params}`); } /** * Lấy sản phẩm còn hàng */ async getAvailableProducts( page: number = 0, size: number = 10, sortBy: string = 'productId', sortDir: 'asc' | 'desc' = 'asc' ): Promise { const params = new URLSearchParams({ page: page.toString(), size: size.toString(), sortBy, sortDir, }); return await api.get(`/products/available?${params}`); } } export default new ProductService();