Compare commits
7 Commits
develop/fo
...
develop/fr
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c1b71fca64 | ||
![]() |
08642a2bf6 | ||
![]() |
043d45862c | ||
![]() |
8444b947a4 | ||
![]() |
e791b01160 | ||
![]() |
8383be13bc | ||
![]() |
d82afe5a5f |
@@ -1146,46 +1146,47 @@ model EventReview {
|
||||
|
||||
// NOTE: need to consider with Event
|
||||
// mapped to IEventItem
|
||||
// a.k.a. PartyEvent party-event
|
||||
model EventItem {
|
||||
id String @id @default(uuid())
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
//
|
||||
sku String
|
||||
name String
|
||||
code String
|
||||
price Float
|
||||
taxes Float
|
||||
tags String[]
|
||||
sizes String[]
|
||||
publish String
|
||||
gender String[]
|
||||
coverUrl String
|
||||
images String[]
|
||||
colors String[]
|
||||
quantity Int
|
||||
category String
|
||||
available Int
|
||||
totalSold Int
|
||||
category String
|
||||
code String
|
||||
colors String[]
|
||||
coverUrl String
|
||||
description String
|
||||
gender String[]
|
||||
images String[]
|
||||
inventoryType String
|
||||
name String
|
||||
newLabel Json
|
||||
price Float
|
||||
priceSale Float?
|
||||
publish String
|
||||
quantity Int
|
||||
ratings Json[]
|
||||
saleLabel Json
|
||||
sizes String[]
|
||||
sku String
|
||||
subDescription String
|
||||
tags String[]
|
||||
taxes Float
|
||||
totalRatings Float
|
||||
totalReviews Int
|
||||
inventoryType String
|
||||
subDescription String
|
||||
priceSale Float?
|
||||
newLabel Json
|
||||
saleLabel Json
|
||||
ratings Json[]
|
||||
totalSold Int
|
||||
//
|
||||
eventDate DateTime @default(now())
|
||||
joinMembers Json[]
|
||||
title String
|
||||
currency String
|
||||
duration_m Float
|
||||
ageBottom Float
|
||||
ageTop Float
|
||||
location String
|
||||
avatar String[]
|
||||
currency String
|
||||
duration_m Float
|
||||
eventDate DateTime @default(now())
|
||||
joinMembers Json[]
|
||||
location String
|
||||
title String
|
||||
//
|
||||
reviews EventReview[]
|
||||
}
|
||||
|
@@ -0,0 +1,16 @@
|
||||
import type { NextRequest, NextResponse } from 'next/server';
|
||||
|
||||
import { STATUS, response, handleError } from 'src/utils/response';
|
||||
|
||||
/**
|
||||
***************************************
|
||||
* GET - helloworld
|
||||
***************************************
|
||||
*/
|
||||
export async function GET(req: NextRequest, res: NextResponse) {
|
||||
try {
|
||||
return response({ helloworld: 'product' }, STATUS.OK);
|
||||
} catch (error) {
|
||||
return handleError('Helloworld - Get all', error);
|
||||
}
|
||||
}
|
@@ -0,0 +1,4 @@
|
||||
###
|
||||
GET /api/product/helloworld HTTP/1.1
|
||||
Host: localhost:7272
|
||||
|
@@ -1,30 +0,0 @@
|
||||
// src/app/api/product/image/upload/route.ts
|
||||
//
|
||||
// PURPOSE:
|
||||
// handle upload product image
|
||||
//
|
||||
// RULES:
|
||||
// T.B.A.
|
||||
|
||||
import type { NextRequest } from 'next/server';
|
||||
|
||||
import { STATUS, response, handleError } from 'src/utils/response';
|
||||
|
||||
// import prisma from '../../../lib/prisma';
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
/** **************************************
|
||||
* GET - Products
|
||||
*************************************** */
|
||||
export async function POST(req: NextRequest) {
|
||||
try {
|
||||
const { data } = await req.json();
|
||||
console.log('helloworld');
|
||||
|
||||
return response({ hello: 'world' }, STATUS.OK);
|
||||
} catch (error) {
|
||||
console.log({ hello: 'world' });
|
||||
return handleError('Product - store product image', error);
|
||||
}
|
||||
}
|
@@ -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,12 +21,9 @@ export async function GET(req: NextRequest) {
|
||||
return response({ results: [] }, STATUS.OK);
|
||||
}
|
||||
|
||||
const products = _products();
|
||||
const results = 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', results.length);
|
||||
logger('[Product] search-results', results?.length);
|
||||
|
||||
return response({ results }, STATUS.OK);
|
||||
} catch (error) {
|
||||
|
@@ -0,0 +1,8 @@
|
||||
###
|
||||
GET http://localhost:7272/api/product/search?query=B
|
||||
|
||||
###
|
||||
GET http://localhost:7272/api/product/search?query=Classic
|
||||
|
||||
###
|
||||
GET http://localhost:7272/api/product/search?query=zzzzzz
|
@@ -68,9 +68,7 @@ type UpdateProduct = {
|
||||
|
||||
async function listProducts(): Promise<ProductItem[]> {
|
||||
return prisma.productItem.findMany({
|
||||
include: {
|
||||
reviews: true,
|
||||
},
|
||||
include: { 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) {
|
||||
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 };
|
||||
|
@@ -99,7 +99,9 @@ export async function createProduct(productData: IProductItem) {
|
||||
* Work on server
|
||||
*/
|
||||
const data = { productData };
|
||||
await axiosInstance.post(endpoints.product.create, data);
|
||||
const {
|
||||
data: { id },
|
||||
} = await axiosInstance.post(endpoints.product.create, data);
|
||||
|
||||
/**
|
||||
* Work in local
|
||||
@@ -109,7 +111,7 @@ export async function createProduct(productData: IProductItem) {
|
||||
(currentData: any) => {
|
||||
const currentProducts: IProductItem[] = currentData?.products;
|
||||
|
||||
const products = [...currentProducts, productData];
|
||||
const products = [...currentProducts, { ...productData, id }];
|
||||
|
||||
return { ...currentData, products };
|
||||
},
|
||||
|
@@ -0,0 +1 @@
|
||||
T.B.A.
|
||||
|
@@ -1,6 +1,6 @@
|
||||
```markdown
|
||||
# Greetings
|
||||
|
||||
```markdown
|
||||
Hi,
|
||||
|
||||
Imagine you are a software engineer and i will send you the guideline.
|
||||
|
@@ -25,7 +25,7 @@ T.B.A.
|
||||
1 AI tools/co-pilot
|
||||
|
||||
```prompt
|
||||
please read and follow steps in the markdown files in `98_AI_workspace` folder thanks.
|
||||
please read and follow steps in the markdown files in `98_AI_workspace/software-engineer` folder thanks.
|
||||
```
|
||||
|
||||
<!-- AI: please fill the step to setup project below -->
|
||||
|
Reference in New Issue
Block a user