From d82afe5a5f86dcf84f829679c114ffe0b10451d8 Mon Sep 17 00:00:00 2001 From: louiscklaw Date: Sun, 15 Jun 2025 12:42:08 +0800 Subject: [PATCH] update prisma search products, --- .../src/app/api/product/search/route.ts | 13 +++++-------- .../src/app/api/product/search/test.http | 5 +++++ .../src/app/services/product.service.ts | 14 ++++++++++---- 3 files changed, 20 insertions(+), 12 deletions(-) create mode 100644 03_source/cms_backend/src/app/api/product/search/test.http diff --git a/03_source/cms_backend/src/app/api/product/search/route.ts b/03_source/cms_backend/src/app/api/product/search/route.ts index 6583336..8162f30 100644 --- a/03_source/cms_backend/src/app/api/product/search/route.ts +++ b/03_source/cms_backend/src/app/api/product/search/route.ts @@ -3,11 +3,11 @@ import type { NextRequest } from 'next/server'; import { logger } from 'src/utils/logger'; 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 @@ -21,14 +21,11 @@ export async function GET(req: NextRequest) { return response({ results: [] }, STATUS.OK); } - const products = _products(); + const testResult = await getProductBySkuOrName(query); - // Accept search by name or sku - const results = products.filter(({ name, sku }) => name.toLowerCase().includes(query) || sku?.toLowerCase().includes(query)); + logger('[Product] search-results', testResult?.length); - logger('[Product] search-results', results.length); - - return response({ results }, STATUS.OK); + return response({ testResult }, STATUS.OK); } catch (error) { return handleError('Product - Get search', error); } diff --git a/03_source/cms_backend/src/app/api/product/search/test.http b/03_source/cms_backend/src/app/api/product/search/test.http new file mode 100644 index 0000000..3f98441 --- /dev/null +++ b/03_source/cms_backend/src/app/api/product/search/test.http @@ -0,0 +1,5 @@ +### +GET http://localhost:7272/api/product/search?query=B + +### +GET http://localhost:7272/api/product/search?query=Classic diff --git a/03_source/cms_backend/src/app/services/product.service.ts b/03_source/cms_backend/src/app/services/product.service.ts index d69f1a0..f7708df 100644 --- a/03_source/cms_backend/src/app/services/product.service.ts +++ b/03_source/cms_backend/src/app/services/product.service.ts @@ -68,9 +68,7 @@ type UpdateProduct = { async function listProducts(): Promise { return prisma.productItem.findMany({ - include: { - reviews: true, - }, + include: { reviews: true }, }); } @@ -82,6 +80,14 @@ async function getProduct(productId: string): Promise { }); } +async function getProductBySkuOrName(searchText: string): Promise { + return prisma.productItem.findMany({ + where: { OR: [{ sku: { contains: searchText, mode: 'insensitive' } }, { name: { contains: searchText, mode: 'insensitive' } }] }, + include: { reviews: true }, + // + }); +} + async function createProduct(productData: any) { return await prisma.productItem.create({ data: productData }); } @@ -97,4 +103,4 @@ async function deleteProduct(productId: string) { 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 };