diff --git a/CHANGELOG.md b/CHANGELOG.md index 70248321..284647ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines. +## [1.6.0](https://wibugit.wibudev.com/wibu/hipmi/compare/v1.5.40...v1.6.0) (2026-02-23) + + +### Features + +* Implementasi pagination pada endpoint mobile donation ([e89886e](https://wibugit.wibudev.com/wibu/hipmi/commit/e89886e1dbc8cb4d95e6cc7c2787fb22a1dcaf56)) +* Tambahkan pagination pada API mobile investasi ([a7694bd](https://wibugit.wibudev.com/wibu/hipmi/commit/a7694bd7d5d72b6499443faf99301faca730d3ed)) +* update mobile donation API and related dependencies ([934d6a3](https://wibugit.wibudev.com/wibu/hipmi/commit/934d6a3ef1015367bee85779796df4f11c5e779c)) + ## [1.5.40](https://wibugit.wibudev.com/wibu/hipmi/compare/v1.5.39...v1.5.40) (2026-02-06) ## [1.5.39](https://wibugit.wibudev.com/wibu/hipmi/compare/v1.5.38...v1.5.39) (2026-01-30) diff --git a/PROMPT-AI.md b/PROMPT-AI.md index 8798ce07..254ce82c 100644 --- a/PROMPT-AI.md +++ b/PROMPT-AI.md @@ -1,5 +1,5 @@ -File utama: src/app/api/mobile/admin/donation/[id]/donatur/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/package.json b/package.json index fed140e3..e03cd35e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hipmi", - "version": "1.5.40", + "version": "1.6.0", "private": true, "prisma": { "seed": "bun prisma/seed.ts" diff --git a/src/app/api/auth/register/route.ts b/src/app/api/auth/register/route.ts index 4a93a84b..f71f6623 100644 --- a/src/app/api/auth/register/route.ts +++ b/src/app/api/auth/register/route.ts @@ -14,8 +14,6 @@ export async function POST(req: Request) { try { const { data } = await req.json(); - console.log("data >>", data); - const cekUsername = await prisma.user.findUnique({ where: { username: data.username, 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 881ce3ae..6a70eab2 100644 --- a/src/app/api/mobile/admin/forum/route.ts +++ b/src/app/api/mobile/admin/forum/route.ts @@ -1,6 +1,7 @@ import { NextResponse } from "next/server"; import { prisma } from "@/lib"; import _ from "lodash"; +import { PAGINATION_DEFAULT_TAKE } from "@/lib/constans-value/constansValue"; export { GET }; @@ -9,7 +10,7 @@ async function GET(request: Request, { params }: { params: { name: string } }) { const category = searchParams.get("category"); 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; @@ -79,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, + }, + }, }, }, }, @@ -139,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) => { @@ -151,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, @@ -193,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) => { @@ -205,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( { @@ -216,7 +249,7 @@ async function GET(request: Request, { params }: { params: { name: string } }) { message: "Invalid category", reason: "Invalid category", }, - { status: 400 } + { status: 400 }, ); } @@ -226,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( @@ -235,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 }, ); } } diff --git a/src/app/api/mobile/admin/investment/[id]/investor/route.ts b/src/app/api/mobile/admin/investment/[id]/investor/route.ts index 7a5f0d45..0418258e 100644 --- a/src/app/api/mobile/admin/investment/[id]/investor/route.ts +++ b/src/app/api/mobile/admin/investment/[id]/investor/route.ts @@ -1,19 +1,20 @@ import _ from "lodash"; import { NextResponse } from "next/server"; import prisma from "@/lib/prisma"; +import { PAGINATION_DEFAULT_TAKE } from "@/lib/constans-value/constansValue"; export async function GET( request: Request, - { params }: { params: { id: string } } + { params }: { params: { id: string } }, ) { try { let fixData; const { id } = params; const { searchParams } = new URL(request.url); - const page = searchParams.get("page"); + const page = Number(searchParams.get("page")); const status = searchParams.get("status"); - const takeData = 10; - const skipData = Number(page) * takeData - takeData; + const takeData = PAGINATION_DEFAULT_TAKE; + const skipData = page * takeData - takeData; const fixStatus = _.startCase(status ? status : ""); @@ -43,6 +44,7 @@ export async function GET( id: true, Author: true, StatusInvoice: true, + nominal: true, }, }); @@ -54,7 +56,7 @@ export async function GET( message: "Success get status transaksi", data: fixData, }, - { status: 200 } + { status: 200 }, ); } catch (error) { console.error("Eror get status transaksi", error); @@ -64,7 +66,7 @@ export async function GET( message: "Error get status transaksi", reason: (error as Error).message, }, - { status: 500 } + { status: 500 }, ); } } diff --git a/src/app/api/mobile/admin/investment/route.ts b/src/app/api/mobile/admin/investment/route.ts index e0548821..bde32970 100644 --- a/src/app/api/mobile/admin/investment/route.ts +++ b/src/app/api/mobile/admin/investment/route.ts @@ -1,6 +1,7 @@ import _ from "lodash"; import { NextResponse } from "next/server"; import { prisma } from "@/lib"; +import { PAGINATION_DEFAULT_TAKE } from "@/lib/constans-value/constansValue"; export { GET }; @@ -9,12 +10,9 @@ async function GET(request: Request) { const category = searchParams.get("category"); const search = searchParams.get("search"); const page = searchParams.get("page"); - const takeData = 10; + const takeData = PAGINATION_DEFAULT_TAKE; const skipData = Number(page) * takeData - takeData; - console.log("[CATEGORY]", category); - console.log("[PAGE]", page); - let fixData; try { if (category === "dashboard") { @@ -49,7 +47,6 @@ async function GET(request: Request) { }; } else { const fixCategoryToStatus = _.startCase(category || ""); - console.log("[STATUS]", fixCategoryToStatus); const data = await prisma.investasi.findMany({ take: page ? takeData : undefined, @@ -70,6 +67,12 @@ async function GET(request: Request) { select: { id: true, title: true, + targetDana: true, + MasterPencarianInvestor: { + select: { + name: true, + }, + }, author: { select: { id: true, diff --git a/src/app_modules/auth/login/view.tsx b/src/app_modules/auth/login/view.tsx index b6615b05..e5b0eab3 100644 --- a/src/app_modules/auth/login/view.tsx +++ b/src/app_modules/auth/login/view.tsx @@ -28,13 +28,10 @@ export default function Login({ version }: { version: string }) { const [countryCode, setCountryCode] = useState("62"); // default ke Indonesia async function onLogin() { - console.log("phone >>", phone); - const nomor = phone; if (nomor.length <= 4) return setError(true); const fixPhone = `${countryCode}${nomor}`; - console.log("fixPhone >>", fixPhone); try { setLoading(true); @@ -46,7 +43,6 @@ export default function Login({ version }: { version: string }) { router.push("/validasi", { scroll: false }); } else { setLoading(false); - console.log("respone >>", respone); ComponentGlobal_NotifikasiPeringatan(respone?.message); } } catch (error) { @@ -108,9 +104,6 @@ export default function Login({ version }: { version: string }) { // Simpan hasil akhir setCountryCode(dialCode); setPhone(localNumber); - - // console.log("Country Code:", dialCode); - // console.log("Clean Local Number:", localNumber); }} />