diff --git a/PROMPT-AI.md b/PROMPT-AI.md index 512243a8..1b275007 100644 --- a/PROMPT-AI.md +++ b/PROMPT-AI.md @@ -1,6 +1,5 @@ -File utama: src/app/api/mobile/event/route.ts -File refrensi: src/app/api/mobile/job/[id]/[status]/route.ts +File utama: src/app/api/mobile/voting/[id]/[status]/route.ts Terapkan pagination pada file "File utama" pada method GET Analisa juga file "File utama", jika belum memiliki page dari seachParams maka terapkan. Juga pastikan take dan skip sudah sesuai dengan pagination. Buat default nya menjadi 10 untuk take data @@ -14,6 +13,8 @@ dan penerapannya pada query take: page ? takeData : undefined, skip: page ? skipData : undefined, -Anda bisa menggunakan refrensi dari "File refrensi" jika butuh pemahaman dengan tipe fitur yang sama - Gunakan bahasa indonesia pada cli agar saya mudah membacanya. + + +File refrensi: src/app/api/mobile/event/[id]/[status]/route.ts +Anda bisa menggunakan refrensi dari "File refrensi" jika butuh pemahaman dengan tipe fitur yang sama \ No newline at end of file diff --git a/src/app/api/mobile/event/[id]/[status]/route.ts b/src/app/api/mobile/event/[id]/[status]/route.ts index 11988199..9f61d6d1 100644 --- a/src/app/api/mobile/event/[id]/[status]/route.ts +++ b/src/app/api/mobile/event/[id]/[status]/route.ts @@ -1,6 +1,7 @@ import { NextResponse } from "next/server"; import prisma from "@/lib/prisma"; import _ from "lodash"; +import { PAGINATION_DEFAULT_TAKE } from "@/lib/constans-value/constansValue"; export { GET, PUT }; @@ -14,7 +15,7 @@ async function GET( const { searchParams } = new URL(request.url); const page = Number(searchParams.get("page")) || 1; - const takeData = 10; + const takeData = PAGINATION_DEFAULT_TAKE const skipData = page * takeData - takeData; const data = await prisma.event.findMany({ diff --git a/src/app/api/mobile/event/[id]/participants/route.ts b/src/app/api/mobile/event/[id]/participants/route.ts index c0d2b46b..0ffbc644 100644 --- a/src/app/api/mobile/event/[id]/participants/route.ts +++ b/src/app/api/mobile/event/[id]/participants/route.ts @@ -6,6 +6,7 @@ import { NotificationMobileTitleType, } from "../../../../../../../types/type-mobile-notification"; import { routeUserMobile } from "@/lib/mobile/route-page-mobile"; +import { PAGINATION_DEFAULT_TAKE } from "@/lib/constans-value/constansValue"; export { GET, POST }; @@ -47,7 +48,7 @@ async function POST(request: Request, { params }: { params: { id: string } }) { message: "Success join event", data: createJoin, }, - { status: 200 } + { status: 200 }, ); } catch (error) { return NextResponse.json( @@ -56,7 +57,7 @@ async function POST(request: Request, { params }: { params: { id: string } }) { message: "Error join event", reason: (error as Error).message, }, - { status: 500 } + { status: 500 }, ); } } @@ -64,12 +65,17 @@ async function POST(request: Request, { params }: { params: { id: string } }) { async function GET(request: Request, { params }: { params: { id: string } }) { try { 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; const data = await prisma.event_Peserta.findMany({ where: { eventId: id, }, select: { + id: true, eventId: true, userId: true, isPresent: true, @@ -87,6 +93,8 @@ async function GET(request: Request, { params }: { params: { id: string } }) { }, }, }, + take: takeData, + skip: skipData, }); return NextResponse.json( @@ -94,8 +102,14 @@ async function GET(request: Request, { params }: { params: { id: string } }) { success: true, message: "Success get participants", data: data, + meta: { + page, + take: takeData, + total: await prisma.event_Peserta.count({ where: { eventId: id } }), + totalPages: Math.ceil(await prisma.event_Peserta.count({ where: { eventId: id } }) / takeData), + }, }, - { status: 200 } + { status: 200 }, ); } catch (error) { return NextResponse.json( @@ -104,7 +118,7 @@ async function GET(request: Request, { params }: { params: { id: string } }) { message: "Error get participants", reason: (error as Error).message, }, - { status: 500 } + { status: 500 }, ); } } diff --git a/src/app/api/mobile/event/route.ts b/src/app/api/mobile/event/route.ts index 907b7d08..5fef6d6d 100644 --- a/src/app/api/mobile/event/route.ts +++ b/src/app/api/mobile/event/route.ts @@ -5,6 +5,7 @@ import _ from "lodash"; import moment from "moment"; import { NextResponse } from "next/server"; import { NotificationMobileBodyType } from "../../../../../types/type-mobile-notification"; +import { PAGINATION_DEFAULT_TAKE } from "@/lib/constans-value/constansValue"; export { GET, POST }; @@ -77,7 +78,7 @@ async function GET(request: Request) { const category = searchParams.get("category"); const userId = searchParams.get("userId"); const page = Number(searchParams.get("page")) || 1; - const takeData = 5; + const takeData = PAGINATION_DEFAULT_TAKE; const skipData = page * takeData - takeData; console.log("[CAT]", category); @@ -165,6 +166,7 @@ async function GET(request: Request) { userId: userId, }, select: { + id: true, eventId: true, userId: true, Event: { diff --git a/src/app/api/mobile/voting/[id]/[status]/route.ts b/src/app/api/mobile/voting/[id]/[status]/route.ts index ee836fef..5cc8f4bf 100644 --- a/src/app/api/mobile/voting/[id]/[status]/route.ts +++ b/src/app/api/mobile/voting/[id]/[status]/route.ts @@ -14,10 +14,31 @@ async function GET( const fixStatusName = _.startCase(status); console.log("[STATUS]", fixStatusName); - let fixData; + const { searchParams } = new URL(request.url); + const page = Number(searchParams.get("page")) || 1; + const takeData = 10; + const skipData = page * takeData - takeData; + + let data; + let totalCount; if (fixStatusName === "Publish") { - fixData = await prisma.voting.findMany({ + data = await prisma.voting.findMany({ + where: { + authorId: id, + isActive: true, + akhirVote: { + gte: new Date(), + }, + Voting_Status: { + name: fixStatusName, + }, + }, + take: takeData, + skip: skipData, + }); + + totalCount = await prisma.voting.count({ where: { authorId: id, isActive: true, @@ -30,7 +51,18 @@ async function GET( }, }); } else { - fixData = await prisma.voting.findMany({ + data = await prisma.voting.findMany({ + where: { + authorId: id, + Voting_Status: { + name: fixStatusName, + }, + }, + take: takeData, + skip: skipData, + }); + + totalCount = await prisma.voting.count({ where: { authorId: id, Voting_Status: { @@ -40,10 +72,18 @@ async function GET( }); } + const totalPages = Math.ceil(totalCount / takeData); + return NextResponse.json({ success: true, message: "Success get voting", - data: fixData, + data: data, + pagination: { + currentPage: page, + totalPages: totalPages, + totalData: totalCount, + dataPerPage: takeData, + }, }); } catch (error) { console.log("[ERROR]", error);