summaryrefslogtreecommitdiff
path: root/src/app/api/product/route.tsx
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-11-09 15:40:16 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-11-09 15:40:16 +0700
commitbe0f537dc4fe384eef09436833c6407e6482c16d (patch)
tree194b1ad3f34396cb8149075bbbd38b854aedf361 /src/app/api/product/route.tsx
parent5d5401ae36e7e0c8eb38ccd943c1aa44a9573d35 (diff)
Initial commit
Diffstat (limited to 'src/app/api/product/route.tsx')
-rw-r--r--src/app/api/product/route.tsx48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/app/api/product/route.tsx b/src/app/api/product/route.tsx
new file mode 100644
index 0000000..1161a4e
--- /dev/null
+++ b/src/app/api/product/route.tsx
@@ -0,0 +1,48 @@
+import { NextRequest, NextResponse } from "next/server";
+import { prisma } from "prisma/client";
+import { Credential } from "@/common/types/auth"
+
+export async function GET(request: NextRequest) {
+ const PAGE_SIZE = 30;
+
+ const searchParams = request.nextUrl.searchParams;
+ const type = searchParams.get('type')
+ const search = searchParams.get('search');
+ const page = searchParams.get('page');
+ const intPage: number = page ? parseInt(page) : 1;
+
+ const credentialStr = request.cookies.get('credential')?.value
+ const credential: Credential | null = credentialStr ? JSON.parse(credentialStr) : null
+
+ if (!credential) {
+ return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
+ }
+
+ const { companyId } = credential
+
+ const where = {
+ AND: {
+ OR: [
+ { name: { contains: search ?? '' } },
+ { barcode: { contains: search ?? '' } },
+ { itemCode: { contains: search ?? '' } },
+ ],
+ companyId: type == 'all' ? undefined : companyId
+ }
+ }
+
+ const products = await prisma.product.findMany({
+ where,
+ include: { company: true },
+ take: PAGE_SIZE,
+ skip: (intPage - 1) * PAGE_SIZE
+ })
+
+ const count = await prisma.product.count({ where })
+ const pagination = {
+ page: intPage,
+ totalPage: Math.ceil(count / PAGE_SIZE),
+ }
+
+ return NextResponse.json({ products, ...pagination })
+} \ No newline at end of file