From ccfb36156464358d954de8646715b430e3a2cdff Mon Sep 17 00:00:00 2001 From: bagasbanuna Date: Wed, 29 Oct 2025 17:27:44 +0800 Subject: [PATCH 1/2] chore(release): 1.5.8 --- CHANGELOG.md | 2 ++ package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a35b7f5e..f0fa35c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ 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.5.8](https://wibugit.wibudev.com/wibu/hipmi/compare/v1.5.7...v1.5.8) (2025-10-29) + ## [1.5.7](https://wibugit.wibudev.com/wibu/hipmi/compare/v1.5.6...v1.5.7) (2025-10-28) ## [1.5.6](https://wibugit.wibudev.com/bip/hipmi/compare/v1.5.5...v1.5.6) (2025-10-21) diff --git a/package.json b/package.json index f166d0d0..cf44c061 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hipmi", - "version": "1.5.7", + "version": "1.5.8", "private": true, "prisma": { "seed": "bun prisma/seed.ts" From 2e2a5c2566fc6dd15b5d31cf399619d7a6a6cc44 Mon Sep 17 00:00:00 2001 From: bagasbanuna Date: Wed, 29 Oct 2025 17:31:41 +0800 Subject: [PATCH 2/2] Mobile API: Donation & Admin Donation Add: - src/app/api/mobile/admin/donation/[id]/disbursement/ - src/app/api/mobile/donation/[id]/disbursement/ - src/app/api/mobile/donation/[id]/donatur/ ### No Issue --- .../admin/donation/[id]/disbursement/route.ts | 166 ++++++++++++++++++ .../donation/[id]/disbursement/route.ts | 37 ++++ .../api/mobile/donation/[id]/donatur/route.ts | 74 ++++++++ 3 files changed, 277 insertions(+) create mode 100644 src/app/api/mobile/admin/donation/[id]/disbursement/route.ts create mode 100644 src/app/api/mobile/donation/[id]/disbursement/route.ts create mode 100644 src/app/api/mobile/donation/[id]/donatur/route.ts diff --git a/src/app/api/mobile/admin/donation/[id]/disbursement/route.ts b/src/app/api/mobile/admin/donation/[id]/disbursement/route.ts new file mode 100644 index 00000000..26500868 --- /dev/null +++ b/src/app/api/mobile/admin/donation/[id]/disbursement/route.ts @@ -0,0 +1,166 @@ +import prisma from "@/lib/prisma"; +import { NextResponse } from "next/server"; + +export { POST, GET }; + +async function POST(request: Request, { params }: { params: { id: string } }) { + const { id } = params; + const { data } = await request.json(); + + try { + const dataDonasi = await prisma.donasi.findUnique({ + where: { + id: id, + }, + select: { + akumulasiPencairan: true, + totalPencairan: true, + }, + }); + + if (!dataDonasi) + return NextResponse.json( + { + success: false, + message: "Pencarian Donasi Gagal", + reason: "Pencarian Donasi Gagal", + }, + { status: 400 } + ); + + const createPencairan = await prisma.donasi_PencairanDana.create({ + data: { + donasiId: id, + nominalCair: +data.nominalCair, + deskripsi: data.deskripsi, + title: data.title, + imageId: data.imageId, + }, + }); + + if (!createPencairan) + return NextResponse.json( + { + success: false, + message: "Pencairan Dana Gagal", + reason: "Pencairan Dana Gagal", + }, + { status: 400 } + ); + + const hasilTotalPencairan = + Number(dataDonasi.totalPencairan) + Number(data.nominalCair); + // const hasilAkumulasiPencairan = Number(dataDonasi.akumulasiPencairan) + 1; + + const countPencairan = await prisma.donasi_PencairanDana.count({ + where: { + donasiId: id, + }, + }); + + const updateDonasi = await prisma.donasi.update({ + where: { + id: id, + }, + data: { + akumulasiPencairan: countPencairan, + totalPencairan: hasilTotalPencairan, + }, + }); + + if (!updateDonasi) + return NextResponse.json( + { + success: false, + message: "Update Donasi Gagal", + reason: "Update Donasi Gagal", + }, + { status: 400 } + ); + + return NextResponse.json( + { + success: true, + message: "Pencairan Dana Berhasil", + // data: data, + }, + { status: 200 } + ); + } catch (error) { + console.error("[ERROR]", error); + return NextResponse.json( + { + success: false, + message: "Pencairan Dana Gagal", + reason: (error as Error).message, + }, + { status: 500 } + ); + } +} + +async function GET(request: Request, { params }: { params: { id: string } }) { + const { id } = params; + const { searchParams } = new URL(request.url); + const category = searchParams.get("category"); + const page = searchParams.get("page"); + const takeData = 10; + const skipData = Number(page) * takeData - takeData; + + console.log("[CATEGORY]", category); + let fixData; + try { + + if (category === "get-all") { + fixData = await prisma.donasi_PencairanDana.findMany({ + take: page ? takeData : undefined, + skip: page ? skipData : undefined, + orderBy: { + createdAt: "desc", + }, + where: { + donasiId: id, + }, + select: { + id: true, + createdAt: true, + nominalCair: true, + }, + }); + } else if (category === "get-one") { + fixData = await prisma.donasi_PencairanDana.findUnique({ + where: { + id: id, + }, + }); + } else { + return NextResponse.json( + { + success: false, + message: "Category tidak ditemukan", + reason: "Category tidak ditemukan", + }, + { status: 400 } + ); + } + + return NextResponse.json( + { + success: true, + message: "Success get data disbursement", + data: fixData, + }, + { status: 200 } + ); + } catch (error) { + console.error("[ERROR]", error); + return NextResponse.json( + { + success: false, + message: "Gagal mendapatkan data disbursement", + reason: (error as Error).message, + }, + { status: 500 } + ); + } +} diff --git a/src/app/api/mobile/donation/[id]/disbursement/route.ts b/src/app/api/mobile/donation/[id]/disbursement/route.ts new file mode 100644 index 00000000..a6786376 --- /dev/null +++ b/src/app/api/mobile/donation/[id]/disbursement/route.ts @@ -0,0 +1,37 @@ +import { NextResponse } from "next/server"; +import { prisma } from "@/lib"; + +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")); + const takeData = 5; + const skipData = page * takeData - takeData; + + try { + const data = await prisma.donasi_PencairanDana.findMany({ + take: page ? takeData : undefined, + skip: page ? skipData : undefined, + orderBy: { + createdAt: "asc", + }, + where: { + donasiId: id, + }, + }); + + return NextResponse.json({ + success: true, + message: "Success get disbursement data", + data: data, + }); + } catch (error) { + return NextResponse.json({ + success: false, + message: "Error get disbursement data", + reason: error as Error, + }); + } +} diff --git a/src/app/api/mobile/donation/[id]/donatur/route.ts b/src/app/api/mobile/donation/[id]/donatur/route.ts new file mode 100644 index 00000000..d33b97f9 --- /dev/null +++ b/src/app/api/mobile/donation/[id]/donatur/route.ts @@ -0,0 +1,74 @@ +import prisma from "@/lib/prisma"; +import { NextResponse } from "next/server"; + +export async function GET( + request: Request, + { params }: { params: { id: string } } +) { + try { + let fixData; + const { id } = params; + const { searchParams } = new URL(request.url); + const page = Number(searchParams.get("page")); + const takeData = 10; + const skipData = page * takeData - takeData; + + fixData = await prisma.donasi_Invoice.findMany({ + take: page ? takeData : undefined, + skip: page ? skipData : undefined, + orderBy: { + createdAt: "desc", + }, + where: { + donasiId: id, + DonasiMaster_StatusInvoice: { + name: "Berhasil", + }, + }, + select: { + id: true, + Author: { + select: { + id: true, + username: true, + }, + }, + nominal: true, + createdAt: true, + // updatedAt: true, + // DonasiMaster_StatusInvoice: true, + // donasiMaster_StatusInvoiceId: true, + // Donasi: { + // select: { + // id: true, + // title: true, + // target: true, + // progres: true, + // authorId: true, + // imagesId: true, + // publishTime: true, + // donasiMaster_KategoriId: true, + // donasiMaster_DurasiId: true, + // donasiMaster_StatusDonasiId: true, + // imageDonasi: true, + // DonasiMaster_Ketegori: true, + // DonasiMaster_Durasi: true, + // DonasiMaster_Status: true, + // }, + // }, + }, + }); + + return NextResponse.json({ + success: true, + message: "Data berhasil diambil", + data: fixData, + }); + } catch (error) { + return NextResponse.json({ + success: false, + message: "Terjadi kesalahan saat mengambil data", + reason: error as Error, + }); + } +}