Compare commits

...

1 Commits

Author SHA1 Message Date
louiscklaw
d82afe5a5f update prisma search products, 2025-06-15 12:42:08 +08:00
3 changed files with 20 additions and 12 deletions

View File

@@ -3,11 +3,11 @@ import type { NextRequest } from 'next/server';
import { logger } from 'src/utils/logger'; import { logger } from 'src/utils/logger';
import { STATUS, response, handleError } from 'src/utils/response'; import { STATUS, response, handleError } from 'src/utils/response';
import { _products } from 'src/_mock/_product'; import { getProductBySkuOrName } from 'src/app/services/product.service';
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
export const runtime = 'edge'; // export const runtime = 'edge';
/** ************************************** /** **************************************
* GET - Search products * GET - Search products
@@ -21,14 +21,11 @@ export async function GET(req: NextRequest) {
return response({ results: [] }, STATUS.OK); return response({ results: [] }, STATUS.OK);
} }
const products = _products(); const testResult = await getProductBySkuOrName(query);
// Accept search by name or sku logger('[Product] search-results', testResult?.length);
const results = products.filter(({ name, sku }) => name.toLowerCase().includes(query) || sku?.toLowerCase().includes(query));
logger('[Product] search-results', results.length); return response({ testResult }, STATUS.OK);
return response({ results }, STATUS.OK);
} catch (error) { } catch (error) {
return handleError('Product - Get search', error); return handleError('Product - Get search', error);
} }

View File

@@ -0,0 +1,5 @@
###
GET http://localhost:7272/api/product/search?query=B
###
GET http://localhost:7272/api/product/search?query=Classic

View File

@@ -68,9 +68,7 @@ type UpdateProduct = {
async function listProducts(): Promise<ProductItem[]> { async function listProducts(): Promise<ProductItem[]> {
return prisma.productItem.findMany({ return prisma.productItem.findMany({
include: { include: { reviews: true },
reviews: true,
},
}); });
} }
@@ -82,6 +80,14 @@ async function getProduct(productId: string): Promise<ProductItem | null> {
}); });
} }
async function getProductBySkuOrName(searchText: string): Promise<ProductItem[] | null> {
return prisma.productItem.findMany({
where: { OR: [{ sku: { contains: searchText, mode: 'insensitive' } }, { name: { contains: searchText, mode: 'insensitive' } }] },
include: { reviews: true },
//
});
}
async function createProduct(productData: any) { async function createProduct(productData: any) {
return await prisma.productItem.create({ data: productData }); return await prisma.productItem.create({ data: productData });
} }
@@ -97,4 +103,4 @@ async function deleteProduct(productId: string) {
return prisma.productItem.delete({ where: { id: productId } }); return prisma.productItem.delete({ where: { id: productId } });
} }
export { getProduct, listProducts, createProduct, updateProduct, deleteProduct, type CreateProduct, type UpdateProduct }; export { getProduct, listProducts, createProduct, updateProduct, deleteProduct, getProductBySkuOrName, type CreateProduct, type UpdateProduct };