From be0f537dc4fe384eef09436833c6407e6482c16d Mon Sep 17 00:00:00 2001
From: Rafi Zadanly <zadanlyr@gmail.com>
Date: Thu, 9 Nov 2023 15:40:16 +0700
Subject: Initial commit

---
 src/app/api/product/route.tsx | 48 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)
 create mode 100644 src/app/api/product/route.tsx

(limited to 'src/app/api/product/route.tsx')

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
-- 
cgit v1.2.3

