From a7694bd7d5d72b6499443faf99301faca730d3ed Mon Sep 17 00:00:00 2001 From: bagasbanuna Date: Mon, 9 Feb 2026 15:08:33 +0800 Subject: [PATCH] feat: Tambahkan pagination pada API mobile investasi Co-authored-by: Qwen-Coder Deskripsi: - Tambahkan pagination pada endpoint investor/route.ts - Tambahkan pagination pada endpoint news/route.ts untuk kategori all-news - Gunakan konstanta PAGINATION_DEFAULT_TAKE untuk jumlah data per halaman - Tambahkan metadata pagination (currentPage, totalData, totalPage, dataPerPage) Fixes #issue-number --- .../mobile/investment/[id]/investor/route.ts | 23 +++++++++++++++ .../api/mobile/investment/[id]/news/route.ts | 29 ++++++++++++++++++- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/app/api/mobile/investment/[id]/investor/route.ts b/src/app/api/mobile/investment/[id]/investor/route.ts index f1467762..4948629c 100644 --- a/src/app/api/mobile/investment/[id]/investor/route.ts +++ b/src/app/api/mobile/investment/[id]/investor/route.ts @@ -1,10 +1,16 @@ import { NextResponse } from "next/server"; import prisma from "@/lib/prisma"; +import { PAGINATION_DEFAULT_TAKE } from "@/lib/constans-value/constansValue"; export { GET }; async function GET(request: Request, { params }: { params: { id: string } }) { const { id } = params; + + const { searchParams } = new URL(request.url); + const page = Number(searchParams.get("page")) || 1; + const takeData = PAGINATION_DEFAULT_TAKE; + const skipData = page * takeData - takeData; try { const data = await prisma.investasi_Invoice.findMany({ @@ -29,13 +35,30 @@ async function GET(request: Request, { params }: { params: { id: string } }) { }, }, }, + take: takeData, + skip: skipData, }); + const totalData = await prisma.investasi_Invoice.count({ + where: { + investasiId: id, + statusInvoiceId: "1", + }, + }); + + const totalPages = Math.ceil(totalData / takeData); + return NextResponse.json({ status: 200, success: true, message: "Berhasil Mendapatkan Data", data: data, + meta: { + currentPage: page, + totalData: totalData, + totalPage: totalPages, + dataPerPage: takeData, + }, }); } catch (error) { return NextResponse.json({ diff --git a/src/app/api/mobile/investment/[id]/news/route.ts b/src/app/api/mobile/investment/[id]/news/route.ts index 7faa94d6..ffbd2d5a 100644 --- a/src/app/api/mobile/investment/[id]/news/route.ts +++ b/src/app/api/mobile/investment/[id]/news/route.ts @@ -2,6 +2,7 @@ import _ from "lodash"; import { prisma } from "@/lib"; import { NextResponse } from "next/server"; import { sendNotificationInvestmentAddNews } from "@/lib/mobile/notification/notification-add-news-investment"; +import { PAGINATION_DEFAULT_TAKE } from "@/lib/constans-value/constansValue"; export { POST, GET, DELETE }; @@ -88,8 +89,13 @@ async function GET(request: Request, { params }: { params: { id: string } }) { console.log("id", id); const { searchParams } = new URL(request.url); const category = searchParams.get("category"); + const page = Number(searchParams.get("page")) || 1; + const takeData = PAGINATION_DEFAULT_TAKE; + const skipData = page * takeData - takeData; let fixData; + let meta = null; + try { if (category === "one-news") { const data = await prisma.beritaInvestasi.findFirst({ @@ -113,7 +119,7 @@ async function GET(request: Request, { params }: { params: { id: string } }) { fixData = newData; } else if (category === "all-news") { - fixData = await prisma.beritaInvestasi.findMany({ + const newsData = await prisma.beritaInvestasi.findMany({ orderBy: { updatedAt: "desc", }, @@ -121,7 +127,27 @@ async function GET(request: Request, { params }: { params: { id: string } }) { investasiId: id, active: true, }, + take: takeData, + skip: skipData, }); + + const totalData = await prisma.beritaInvestasi.count({ + where: { + investasiId: id, + active: true, + }, + }); + + const totalPages = Math.ceil(totalData / takeData); + + fixData = newsData; + + meta = { + currentPage: page, + totalData: totalData, + totalPage: totalPages, + dataPerPage: takeData, + }; } return NextResponse.json({ @@ -129,6 +155,7 @@ async function GET(request: Request, { params }: { params: { id: string } }) { success: true, message: "Berita berhasil diambil", data: fixData, + ...(meta && { meta }), }); } catch (error) { console.log("[ERROR]", error);