From fd09783c193da409be6d5ecdc76e5377d19b57df Mon Sep 17 00:00:00 2001 From: nabillah Date: Tue, 21 Oct 2025 16:48:08 +0800 Subject: [PATCH] Mobile API: Voting admin Fix: - src/app/api/mobile/admin/voting/[id]/route.ts - src/app/api/mobile/admin/voting/route.ts ### No Issue --- src/app/api/mobile/admin/voting/[id]/route.ts | 73 ++++++++++++++++++- src/app/api/mobile/admin/voting/route.ts | 41 ++++++++++- 2 files changed, 109 insertions(+), 5 deletions(-) diff --git a/src/app/api/mobile/admin/voting/[id]/route.ts b/src/app/api/mobile/admin/voting/[id]/route.ts index bef45987..e88bdccb 100644 --- a/src/app/api/mobile/admin/voting/[id]/route.ts +++ b/src/app/api/mobile/admin/voting/[id]/route.ts @@ -1,7 +1,8 @@ import { NextResponse } from "next/server"; import { prisma } from "@/lib"; +import _ from "lodash"; -export { GET }; +export { GET , PUT}; async function GET(request: Request, { params }: { params: { id: string } }) { const { id } = params; @@ -36,3 +37,73 @@ async function GET(request: Request, { params }: { params: { id: string } }) { ); } } + +async function PUT(request: Request, { params }: { params: { id: string } }) { + const { id } = params; + const { data } = await request.json(); + const { searchParams } = new URL(request.url); + const status = searchParams.get("status"); + const fixStatus = _.startCase(status as string); + let fixData; + + + try { + const checkStatus = await prisma.voting_Status.findFirst({ + where: { + name: fixStatus, + }, + }); + + if (!checkStatus) + return NextResponse.json( + { + success: false, + message: "Error update data voting", + reason: "Status not found", + }, + { status: 500 } + ); + + if (fixStatus === "Reject") { + const updateStatus = await prisma.voting.update({ + where: { + id: id, + }, + data: { + voting_StatusId: checkStatus.id, + catatan: data, + }, + }); + fixData = updateStatus; + } else if (fixStatus === "Publish") { + const updateStatus = await prisma.voting.update({ + where: { + id: id, + }, + data: { + voting_StatusId: checkStatus.id, + }, + }); + fixData = updateStatus; + } + + return NextResponse.json( + { + success: true, + message: "Success update data voting", + data: fixData, + }, + { status: 200 } + ); + } catch (error) { + console.log("[ERROR UPDATE DATA VOTING]", error); + return NextResponse.json( + { + success: false, + message: "Error update data voting", + reason: (error as Error).message, + }, + { status: 500 } + ); + } +} diff --git a/src/app/api/mobile/admin/voting/route.ts b/src/app/api/mobile/admin/voting/route.ts index 02142ba0..3ca76522 100644 --- a/src/app/api/mobile/admin/voting/route.ts +++ b/src/app/api/mobile/admin/voting/route.ts @@ -15,9 +15,6 @@ async function GET(request: Request) { const skipData = Number(page) * takeData - takeData; let fixData; - console.log("CATEGORY", category); - console.log("FIX TO STATUS", fixToStatus); - try { if (category === "dashboard") { const publish = await prisma.voting.count({ @@ -79,8 +76,44 @@ async function GET(request: Request) { history, }; } else if (category === "history") { + fixData = await prisma.voting.findMany({ + take: page ? takeData : undefined, + skip: page ? skipData : undefined, + orderBy: { + updatedAt: "desc", + }, + where: { + Voting_Status: { + name: "Publish", + }, + isActive: true, + isArsip: false, + akhirVote: { + lte: new Date(), + }, + title: { + contains: search ? search : "", + mode: "insensitive", + }, + }, + include: { + Author: { + select: { + id: true, + username: true, + Profile: { + select: { + id: true, + name: true, + }, + }, + }, + }, + Voting_Kontributor: true, + Voting_DaftarNamaVote: true, + }, + }); } else { - // ====== Status Publish Start ====== // if (fixToStatus === "Publish") { const getAllData = await prisma.voting.findMany({