diff --git a/PROMPT-AI.md b/PROMPT-AI.md index 5b27b3fc..254ce82c 100644 --- a/PROMPT-AI.md +++ b/PROMPT-AI.md @@ -1,5 +1,5 @@ -File utama: src/app/api/mobile/admin/investment/[id]/investor/route.ts +File utama: src/app/api/mobile/admin/forum/[id]/comment/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 diff --git a/src/app/api/mobile/admin/forum/[id]/comment/route.ts b/src/app/api/mobile/admin/forum/[id]/comment/route.ts index d334908d..1845362b 100644 --- a/src/app/api/mobile/admin/forum/[id]/comment/route.ts +++ b/src/app/api/mobile/admin/forum/[id]/comment/route.ts @@ -7,6 +7,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, PUT }; @@ -14,9 +15,9 @@ async function GET(request: Request, { params }: { params: { id: string } }) { const { id } = params; const { searchParams } = new URL(request.url); const search = searchParams.get("search"); - const page = searchParams.get("page"); - const takeData = 10; - const skipData = Number(page) * takeData - takeData; + const page = Number(searchParams.get("page")); + const takeData = PAGINATION_DEFAULT_TAKE; + const skipData = page * takeData - takeData; const category = searchParams.get("category"); let fixData; try { diff --git a/src/app/api/mobile/admin/forum/[id]/report-posting/route.ts b/src/app/api/mobile/admin/forum/[id]/report-posting/route.ts index d171e725..87e6240b 100644 --- a/src/app/api/mobile/admin/forum/[id]/report-posting/route.ts +++ b/src/app/api/mobile/admin/forum/[id]/report-posting/route.ts @@ -1,15 +1,16 @@ import { NextResponse } from "next/server"; import { prisma } from "@/lib"; +import { PAGINATION_DEFAULT_TAKE } from "@/lib/constans-value/constansValue"; export async function GET( request: Request, - { params }: { params: { id: string } } + { params }: { params: { id: string } }, ) { const { id } = params; const { searchParams } = new URL(request.url); const search = searchParams.get("search"); const page = searchParams.get("page"); - const takeData = 10; + const takeData = PAGINATION_DEFAULT_TAKE; const skipData = Number(page) * takeData - takeData; let fixData; @@ -60,7 +61,7 @@ export async function GET( message: "Success get list report posting", data: fixData, }, - { status: 200 } + { status: 200 }, ); } catch (error) { console.error("[ERROR GET LIST REPORT POSTING]", error); @@ -70,7 +71,7 @@ export async function GET( message: "Error get list report posting", reason: (error as Error).message, }, - { status: 500 } + { status: 500 }, ); } } diff --git a/src/app/api/mobile/admin/forum/route.ts b/src/app/api/mobile/admin/forum/route.ts index a8e9119a..6a70eab2 100644 --- a/src/app/api/mobile/admin/forum/route.ts +++ b/src/app/api/mobile/admin/forum/route.ts @@ -80,7 +80,11 @@ async function GET(request: Request, { params }: { params: { name: string } }) { _count: { select: { Forum_ReportPosting: true, - Forum_Komentar: true, + Forum_Komentar: { + where: { + isActive: true, + }, + }, }, }, }, @@ -140,6 +144,14 @@ async function GET(request: Request, { params }: { params: { name: string } }) { }, }); + // Hitung count report untuk setiap Forum_Posting id + const countByPostingId = data.reduce((acc: any, item: any) => { + const key = item.Forum_Posting?.id; + if (!key) return acc; + acc[key] = (acc[key] || 0) + 1; + return acc; + }, {}); + const filterLatest = (data: any) => Object.values( data.reduce((acc: any, item: any) => { @@ -152,10 +164,16 @@ async function GET(request: Request, { params }: { params: { name: string } }) { acc[key] = item; } return acc; - }, {}) + }, {}), ); - fixData = filterLatest(data); + const filteredData = filterLatest(data); + + // Tambahkan count ke setiap item + fixData = filteredData.map((item: any) => ({ + ...item, + count: countByPostingId[item.Forum_Posting?.id] || 0, + })); } else if (category === "report_comment") { const data = await prisma.forum_ReportKomentar.findMany({ take: page ? takeData : undefined, @@ -194,6 +212,14 @@ async function GET(request: Request, { params }: { params: { name: string } }) { }, }); + // Hitung count report untuk setiap Forum_Komentar id + const countByKomentarId = data.reduce((acc: any, item: any) => { + const key = item.Forum_Komentar?.id; + if (!key) return acc; + acc[key] = (acc[key] || 0) + 1; + return acc; + }, {}); + const filterLatest = (data: any) => Object.values( data.reduce((acc: any, item: any) => { @@ -206,10 +232,16 @@ async function GET(request: Request, { params }: { params: { name: string } }) { acc[key] = item; } return acc; - }, {}) + }, {}), ); - fixData = filterLatest(data); + const filteredData = filterLatest(data); + + // Tambahkan count ke setiap item + fixData = filteredData.map((item: any) => ({ + ...item, + count: countByKomentarId[item.Forum_Komentar?.id] || 0, + })); } else { return NextResponse.json( { @@ -217,7 +249,7 @@ async function GET(request: Request, { params }: { params: { name: string } }) { message: "Invalid category", reason: "Invalid category", }, - { status: 400 } + { status: 400 }, ); } @@ -227,7 +259,7 @@ async function GET(request: Request, { params }: { params: { name: string } }) { message: `Success get data forum ${category}`, data: fixData, }, - { status: 200 } + { status: 200 }, ); } catch (error) { return NextResponse.json( @@ -236,7 +268,7 @@ async function GET(request: Request, { params }: { params: { name: string } }) { message: `Error get data forum ${category}`, reason: (error as Error).message, }, - { status: 500 } + { status: 500 }, ); } }