import getServerCredential from "@/common/libs/getServerCredential"; import { NextRequest, NextResponse } from "next/server"; import { prisma } from "prisma/client"; import { Prisma } from "prisma/generated/client"; export async function GET(request: NextRequest) { const PAGE_SIZE = 30; const searchParams = request.nextUrl.searchParams; const search = searchParams.get('search'); const page = searchParams.get('page'); const intPage: number = page ? parseInt(page) : 1; const paramCompanyId = searchParams.get('companyId') const companyId = paramCompanyId ? parseInt(paramCompanyId) : null const show = searchParams.get('show') const credential = getServerCredential() if (!credential) return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) const where: Prisma.ProductWhereInput = { AND: { OR: [ { name: { mode: 'insensitive', contains: search ?? '' } }, { barcode: { mode: 'insensitive', contains: search ?? '' } }, { itemCode: { mode: 'insensitive', contains: search ?? '' } }, ], companyId: companyId ?? credential.companyId, stockOpnames: { none: show === 'not-count' ? {} : undefined }, onhandQty: { gt: show === 'not-count' ? 0 : undefined }, }, } const products = await prisma.product.findMany({ where, include: { company: true }, take: PAGE_SIZE, skip: (intPage - 1) * PAGE_SIZE, orderBy: { name: 'asc' } }) const count = await prisma.product.count({ where }) const pagination = { page: intPage, totalPage: Math.ceil(count / PAGE_SIZE), count } return NextResponse.json({ products, ...pagination }) } // TODO: Search case sensitive // TODO: Submit harus di done