import { IProduct, IProductDetail } from '~/types/product'; import snakeCase from 'snakecase-keys'; import odooApi from '~/libs/odooApi'; import { ICategoryBreadcrumb } from '~/types/category'; const SELF_HOST = process.env.NEXT_PUBLIC_SELF_HOST; export const getProductById = async ( id: string, tier: string ): Promise => { const url = `${SELF_HOST}/api/shop/product-detail`; const params = new URLSearchParams({ id, auth: tier }); return await fetch(`${url}?${params.toString()}`) .then((res) => res.json()) .then((res) => { if (res.length > 0) return snakeCase(res[0]) as IProductDetail; return null; }); }; export interface GetProductSimilarProps { name: string; except?: { productId?: number; manufactureId?: number; }; limit?: number; } export interface GetProductSimilarRes { products: IProduct[]; num_found: number; num_found_exact: boolean; start: number; } export const getProductSimilar = async ({ name, except, limit = 30, }: GetProductSimilarProps): Promise => { const query = [ `q=${name}`, 'page=1', 'operation=OR', // 'priceFrom=1', `source=similar`, ]; if (except?.productId) query.push(`fq=-product_id_i:${except.productId}`); if (except?.manufactureId) query.push(`fq=-manufacture_id_i:${except.manufactureId}`); const url = `${SELF_HOST}/api/shop/search?${query.join('&')}`; return await fetch(url) .then((res) => res.json()) .then((res) => snakeCase(res.response)); }; export const getProductCategoryBreadcrumb = async ( id: number ): Promise => { return await odooApi('GET', `/api/v1/product/${id}/category-breadcrumb`); };