diff --git a/src/app/api/mobile/donation/[id]/[status]/route.ts b/src/app/api/mobile/donation/[id]/[status]/route.ts new file mode 100644 index 00000000..9b67d81a --- /dev/null +++ b/src/app/api/mobile/donation/[id]/[status]/route.ts @@ -0,0 +1,130 @@ +import _ from "lodash"; +import { NextResponse } from "next/server"; +import prisma from "@/lib/prisma"; + +export { GET, PUT }; + +async function GET( + request: Request, + { params }: { params: { id: string; status: string } } +) { + const { id, status } = params; + const fixStatus = _.startCase(status); + + let fixData; + try { + const checkStatus = await prisma.donasiMaster_StatusDonasi.findFirst({ + where: { + name: fixStatus, + }, + }); + + console.log("[CHECK STATUS]", checkStatus); + + if (!checkStatus) + return NextResponse.json({ + status: 400, + success: false, + reason: "Gagal mendapatkan data", + }); + + const res = await prisma.donasi.findMany({ + where: { + authorId: id, + donasiMaster_StatusDonasiId: checkStatus.id, + active: true, + }, + select: { + id: true, + title: true, + imagesId: true, + target: true, + progres: true, + publishTime: true, + DonasiMaster_Durasi: { + select: { + name: true, + }, + }, + terkumpul: true, + imageId: true, + }, + orderBy: { + updatedAt: "desc", + }, + }); + + fixData = res.map((v: any) => ({ + ..._.omit(v, ["DonasiMaster_Durasi"]), + nameDonasiDurasi: v.DonasiMaster_Durasi.name, + })); + + return NextResponse.json({ + status: 200, + success: true, + message: "Berhasil mendapatkan data", + data: fixData, + }); + } catch (error) { + console.log("[ERROR]", error); + return NextResponse.json({ + status: 500, + success: false, + message: "Error mendapatkan data", + reason: (error as Error).message, + }); + } +} + +async function PUT( + request: Request, + { params }: { params: { id: string; status: string } } +) { + const { id, status } = params; + const fixStatus = _.startCase(status); + + try { + const checkStatus = await prisma.donasiMaster_StatusDonasi.findFirst({ + where: { + name: fixStatus, + }, + }); + + if (!checkStatus) + return NextResponse.json({ + status: 400, + success: false, + reason: "Gagal mendapatkan data", + }); + + const res = await prisma.donasi.update({ + where: { + id: id, + }, + data: { + donasiMaster_StatusDonasiId: checkStatus.id, + }, + }); + + if (!res) + return NextResponse.json({ + status: 400, + success: false, + reason: "Gagal mengubah status", + }); + + return NextResponse.json({ + status: 200, + success: true, + message: "Berhasil mengubah status", + }); + } catch (error) { + console.log("[ERROR]", error); + return NextResponse.json({ + status: 500, + success: false, + message: "Error mendapatkan data", + reason: (error as Error).message, + }); + } +} diff --git a/src/app/api/mobile/donation/[id]/route.ts b/src/app/api/mobile/donation/[id]/route.ts index 27e9e7dd..96d783dc 100644 --- a/src/app/api/mobile/donation/[id]/route.ts +++ b/src/app/api/mobile/donation/[id]/route.ts @@ -1,6 +1,7 @@ import { NextResponse } from "next/server"; +import prisma from "@/lib/prisma"; -export { GET }; +export { GET, DELETE, PUT }; async function GET(request: Request, { params }: { params: { id: string } }) { const { id } = params; @@ -23,6 +24,17 @@ async function GET(request: Request, { params }: { params: { id: string } }) { where: { id: id, }, + include: { + Author: true, + imageDonasi: true, + CeritaDonasi: true, + DonasiMaster_Ketegori: true, + DonasiMaster_Durasi: true, + DonasiMaster_Status: true, + Donasi_Invoice: true, + Donasi_Kabar: true, + Donasi_PencairanDana: true, + }, }); } @@ -42,3 +54,171 @@ async function GET(request: Request, { params }: { params: { id: string } }) { }); } } + +async function DELETE( + request: Request, + { params }: { params: { id: string } } +) { + try { + const id = params.id; + console.log("[ID]", id); + + const checkData = await prisma.donasi.findUnique({ + where: { + id: id, + }, + include: { + CeritaDonasi: { + select: { + imageId: true, + }, + }, + }, + }); + + console.log(["DATA"], checkData); + + const deleteStory = await prisma.donasi_Cerita.delete({ + where: { + donasiId: id, + }, + }); + + if (!deleteStory) + return NextResponse.json({ + status: 400, + success: false, + reason: "Gagal menghapus data cerita", + }); + + const deleteImageStory = await fetch( + `https://wibu-storage.wibudev.com/api/files/${checkData?.CeritaDonasi?.imageId}/delete`, + { + method: "DELETE", + headers: { + Authorization: `Bearer ${process.env.WS_APIKEY}`, + }, + } + ); + + if (!deleteImageStory) { + console.log("[DELETE IMAGE STORY]", deleteImageStory); + } + + const res = await prisma.donasi.delete({ + where: { + id: id, + }, + }); + + if (!res) + return NextResponse.json({ + status: 400, + success: false, + reason: "Gagal menghapus donasi", + }); + + const deleteImageDonation = await fetch( + `https://wibu-storage.wibudev.com/api/files/${checkData?.imageId}/delete`, + { + method: "DELETE", + headers: { + Authorization: `Bearer ${process.env.WS_APIKEY}`, + }, + } + ); + + if (!deleteImageDonation) { + console.log("[DELETE IMAGE DONATION]", deleteImageDonation); + } + + return NextResponse.json({ + status: 200, + success: true, + message: "Donasi berhasil dihapus", + }); + } catch (error) { + console.log("[ERROR]", error); + return NextResponse.json({ + status: 500, + success: false, + message: "Gagal menghapus donasi", + reason: (error as Error).message, + }); + } +} + +async function PUT(request: Request, { params }: { params: { id: string } }) { + const { id } = params; + const { data } = await request.json(); + const { searchParams } = new URL(request.url); + const category = searchParams.get("category"); + + console.log("[ID]", id); + console.log("[DATA]", data); + console.log("[CATEGORY]", category); + + try { + if (category === "edit-donation") { + if (data && data.newImageId) { + await prisma.donasi.update({ + where: { + id: id, + }, + data: { + imageId: data.newImageId, + }, + }); + } + + const update = await prisma.donasi.update({ + where: { + id: id, + }, + data: { + donasiMaster_KategoriId: data.donasiMaster_KategoriId, + donasiMaster_DurasiId: data.donasiMaster_DurasiId, + title: data.title, + target: data.target, + }, + }); + + if (!update) + return NextResponse.json({ + status: 400, + success: false, + reason: "Gagal mengupdate donasi", + }); + + const deleteImageDonasi = await fetch( + `https://wibu-storage.wibudev.com/api/files/${data.imageId}/delete`, + { + method: "DELETE", + headers: { + Authorization: `Bearer ${process.env.WS_APIKEY}`, + }, + } + ); + + if (!deleteImageDonasi) { + console.log("[DELETE IMAGE DONASI]", deleteImageDonasi); + } + } else if (category === "edit-story") { + } else if (category === "edit-bank-account") { + } + + return NextResponse.json({ + status: 200, + success: true, + message: "Donasi berhasil diupdate", + }); + } catch (error) { + console.log("[ERROR]", error); + return NextResponse.json({ + status: 500, + success: false, + message: "Gagal mengupdate donasi", + reason: (error as Error).message, + }); + } +} diff --git a/src/app/api/mobile/donation/route.ts b/src/app/api/mobile/donation/route.ts index 6707da9d..95d44403 100644 --- a/src/app/api/mobile/donation/route.ts +++ b/src/app/api/mobile/donation/route.ts @@ -1,4 +1,6 @@ +import _ from "lodash"; import { NextResponse } from "next/server"; +import prisma from "@/lib/prisma"; export { POST }; @@ -6,11 +8,9 @@ async function POST(request: Request) { const { data } = await request.json(); const { searchParams } = new URL(request.url); const category = searchParams.get("category"); - - console.log("[DATA]", data); - console.log("[CATEGORY]", category); - let fixData; + + try { // CODE HERE @@ -27,11 +27,11 @@ async function POST(request: Request) { } else if (category === "permanent") { const dataDonasi = await prisma.donasi.create({ data: { - target: data.target, + authorId: data.authorId, title: data.title, + target: data.target, donasiMaster_DurasiId: data.donasiMaster_DurasiId, donasiMaster_KategoriId: data.donasiMaster_KategoriId, - authorId: data.authorId, namaBank: data.namaBank, rekening: data.rekening, imageId: data.imageId, @@ -48,23 +48,33 @@ async function POST(request: Request) { }, }); - if (!dataDonasi) return { status: 400, message: "Gagal disimpan" }; + if (!dataDonasi) + return NextResponse.json({ + status: 400, + success: false, + reason: "Gagal menambah donasi", + }); const del = await prisma.donasi_TemporaryCreate.delete({ where: { - id: data.id, + id: data.temporaryId, }, }); const dataCerita = await prisma.donasi_Cerita.create({ data: { donasiId: dataDonasi.id, - pembukaan: data.CeritaDonasi.pembukaan, - cerita: data.CeritaDonasi.cerita, + pembukaan: data.pembukaan, + cerita: data.cerita, imageId: data.imageCeritaId, }, }); - if (!dataCerita) return { status: 400, message: "Gagal disimpan" }; + if (!dataCerita) + return NextResponse.json({ + status: 400, + success: false, + reason: "Gagal menambah cerita donasi", + }); } return NextResponse.json({ @@ -78,7 +88,7 @@ async function POST(request: Request) { return NextResponse.json({ status: 500, success: false, - error: "Gagal menambah donasi", + message: "Error menambah donasi", reason: (error as Error).message, }); } diff --git a/src/app/api/mobile/master/donation/route.ts b/src/app/api/mobile/master/donation/route.ts index 9204a0aa..0fc4e67a 100644 --- a/src/app/api/mobile/master/donation/route.ts +++ b/src/app/api/mobile/master/donation/route.ts @@ -1,11 +1,11 @@ import { NextResponse } from "next/server"; +import prisma from "@/lib/prisma"; export { GET }; async function GET(request: Request) { const { searchParams } = new URL(request.url); const category = searchParams.get("category"); - console.log("[CATEGORY]", category); let fixData; try {