diff --git a/src/app/api/mobile/admin/event/[id]/route.ts b/src/app/api/mobile/admin/event/[id]/route.ts new file mode 100644 index 00000000..1215c1ea --- /dev/null +++ b/src/app/api/mobile/admin/event/[id]/route.ts @@ -0,0 +1,129 @@ +import { NextResponse } from "next/server"; +import prisma from "@/lib/prisma"; +import _ from "lodash"; + +export { GET, PUT }; + +async function GET(request: Request, { params }: { params: { id: string } }) { + const { id } = params; + + try { + const data = await prisma.event.findUnique({ + where: { + id: id, + }, + include: { + Author: { + select: { + username: true, + nomor: true, + Profile: { + select: { + name: true, + alamat: true, + }, + }, + }, + }, + EventMaster_TipeAcara: { + select: { + name: true, + }, + }, + EventMaster_Status: true, + }, + }); + + return NextResponse.json( + { + success: true, + message: "Success get data event", + data: data, + }, + { status: 200 } + ); + } catch (error) { + return NextResponse.json( + { + success: false, + message: "Failed to get data", + reason: (error as Error).message, + }, + { status: 500 } + ); + } +} + +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); + + console.log("ID", id); + console.log("DATA", data); + console.log("FIX STATUS", fixStatus); + + let fixData; + try { + const checkStatus = await prisma.eventMaster_Status.findFirst({ + where: { + name: fixStatus, + }, + }); + + if (!checkStatus) + return NextResponse.json( + { + success: false, + message: "Error update data event", + reason: "Status not found", + }, + { status: 500 } + ); + + if (fixStatus === "Reject") { + const updateData = await prisma.event.update({ + where: { + id: id, + }, + data: { + catatan: data, + eventMaster_StatusId: checkStatus.id, + }, + }); + + fixData = updateData; + } else if (fixStatus === "Publish") { + const updateData = await prisma.event.update({ + where: { + id: id, + }, + data: { + eventMaster_StatusId: checkStatus.id, + }, + }); + + fixData = updateData; + } + + return NextResponse.json( + { + success: true, + message: "Success update data event", + data: fixData, + }, + { status: 200 } + ); + } catch (error) { + return NextResponse.json( + { + success: false, + message: "Failed to update data", + reason: (error as Error).message, + }, + { status: 500 } + ); + } +} diff --git a/src/app/api/mobile/admin/event/route.ts b/src/app/api/mobile/admin/event/route.ts new file mode 100644 index 00000000..c2f072f9 --- /dev/null +++ b/src/app/api/mobile/admin/event/route.ts @@ -0,0 +1,192 @@ +import _ from "lodash"; +import { prisma } from "@/lib"; +import { NextResponse } from "next/server"; +import moment from "moment"; + +export { GET }; + +async function GET(request: Request) { + const { searchParams } = new URL(request.url); + const category = searchParams.get("category"); + const fixStatus = _.startCase(category || ""); + + const search = searchParams.get("search"); + const page = searchParams.get("page"); + const takeData = 10; + const skipData = Number(page) * takeData - takeData; + let fixData; + + console.log("[CATEGORY]", category); + // console.log("[FIX STATUS]", fixStatus); + + try { + if (category === "dashboard") { + const publish = await prisma.event.count({ + where: { + EventMaster_Status: { + name: "Publish", + }, + isArsip: false, + }, + }); + + const review = await prisma.event.count({ + where: { + EventMaster_Status: { + name: "Review", + }, + isArsip: false, + }, + }); + + const reject = await prisma.event.count({ + where: { + EventMaster_Status: { + name: "Reject", + }, + isArsip: false, + }, + }); + + const history = await prisma.event.count({ + where: { + EventMaster_Status: { + name: "Publish", + }, + isArsip: true, + }, + }); + + const typeOfEvent = await prisma.eventMaster_TipeAcara.count({ + where: { + active: true, + }, + }); + + fixData = { + publish, + review, + reject, + history, + typeOfEvent, + }; + } else if (category === "history") { + console.log("[HISTORY HERE]"); + + const data = await prisma.event.findMany({ + take: page ? takeData : undefined, + skip: page ? skipData : undefined, + orderBy: { + createdAt: "desc", + }, + where: { + isArsip: true, + EventMaster_Status: { + name: "Publish", + }, + title: { + contains: search || "", + mode: "insensitive", + }, + }, + select: { + id: true, + title: true, + Author: { + select: { + id: true, + username: true, + Profile: { + select: { + name: true, + }, + }, + }, + }, + }, + }); + + fixData = data; + } else { + if (fixStatus === "Publish") { + const getAllData = await prisma.event.findMany({ + where: { + active: true, + EventMaster_Status: { + name: fixStatus, + }, + isArsip: false, + }, + }); + + for (let i of getAllData) { + if (moment(i.tanggalSelesai).diff(moment(), "minutes") < 0) { + await prisma.event.update({ + where: { + id: i.id, + }, + data: { + isArsip: true, + }, + }); + } + } + } + + const data = await prisma.event.findMany({ + take: page ? takeData : undefined, + skip: page ? skipData : undefined, + orderBy: { + tanggal: "asc", + }, + where: { + active: true, + isArsip: false, + EventMaster_Status: { + name: fixStatus, + }, + title: { + contains: search || "", + mode: "insensitive", + }, + }, + select: { + id: true, + title: true, + Author: { + select: { + id: true, + username: true, + Profile: { + select: { + name: true, + }, + }, + }, + }, + }, + }); + + fixData = data; + } + + return NextResponse.json( + { + success: true, + message: `Success get data event ${category}`, + data: fixData, + }, + { status: 200 } + ); + } catch (error) { + console.log(`[ERROR GET DATA EVENT: ${category}]`, error); + return NextResponse.json( + { + success: false, + message: `Error get data event ${category}`, + 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 3ca76522..3b3f90ce 100644 --- a/src/app/api/mobile/admin/voting/route.ts +++ b/src/app/api/mobile/admin/voting/route.ts @@ -1,6 +1,7 @@ import _ from "lodash"; import moment from "moment"; import { NextResponse } from "next/server"; +import { prisma } from "@/lib"; export { GET }; diff --git a/src/app/api/mobile/event/[id]/check-participants/route.ts b/src/app/api/mobile/event/[id]/check-participants/route.ts index 3121be58..3cfed6d0 100644 --- a/src/app/api/mobile/event/[id]/check-participants/route.ts +++ b/src/app/api/mobile/event/[id]/check-participants/route.ts @@ -9,6 +9,9 @@ async function GET(request: Request, { params }: { params: { id: string } }) { const { searchParams } = new URL(request.url); const userId = searchParams.get("userId"); + console.log("id", id); + console.log("userId", userId); + let fixData const checkParticipant = await prisma.event_Peserta.findFirst({ diff --git a/src/app/api/mobile/event/[id]/confirmation/route.ts b/src/app/api/mobile/event/[id]/confirmation/route.ts new file mode 100644 index 00000000..8818cbfb --- /dev/null +++ b/src/app/api/mobile/event/[id]/confirmation/route.ts @@ -0,0 +1,201 @@ +import { prisma } from "@/lib"; +import { NextResponse } from "next/server"; + +export async function GET( + request: Request, + { params }: { params: { id: string } } +) { + try { + const { id } = params; + let fixData; + const { searchParams } = new URL(request.url); + const userId = searchParams.get("userId"); + + console.log("userId", userId); + + const checkDataEvent = await prisma.event.findUnique({ + where: { + id: id, + }, + select: { + id: true, + title: true, + tanggal: true, + tanggalSelesai: true, + lokasi: true, + Author: { + select: { + id: true, + username: true, + Profile: { + select: { + id: true, + name: true, + }, + }, + }, + }, + }, + }); + + if (!checkDataEvent) { + return NextResponse.json( + { message: "Event Not Found", response: null }, + { status: 400 } + ); + } + + let peserta; + const checkPeserta = await prisma.event_Peserta.findFirst({ + where: { + userId: userId, + eventId: id, + }, + }); + + console.log("checkPeserta", checkPeserta); + + if (checkPeserta) { + peserta = true; + } else { + peserta = false; + } + + let kehadiran; + const checkKehadiran = await prisma.event_Peserta.findFirst({ + where: { + userId: userId, + eventId: id, + }, + select: { + isPresent: true, + }, + }); + + if (checkKehadiran?.isPresent) { + kehadiran = true; + } else { + kehadiran = false; + } + + fixData = { + dataEvent: checkDataEvent, + peserta: peserta, + kehadiran: kehadiran, + }; + + return NextResponse.json( + { success: true, message: "Event Found", data: fixData }, + { status: 200 } + ); + } catch (error) { + console.error("Error get confirmation event", error); + return NextResponse.json( + { + success: false, + message: "Error get confirmation event", + reason: (error as Error).message || error, + }, + { status: 500 } + ); + } +} + +export async function POST( + 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"); + + let fixData; + try { + console.log("category", category); + console.log("id", id); + console.log("data", data); + + // const checkEvent = await prisma.event.findUnique({ + // where: { + // id: id, + // }, + // }); + + // if (!checkEvent) { + // return NextResponse.json( + // { message: "Event Not Found", response: null }, + // { status: 400 } + // ); + // } + + // const checkPeserta = await prisma.event_Peserta.findFirst({ + // where: { + // userId: userId, + // eventId: id, + // }, + // }); + + // if (!checkPeserta) { + // return NextResponse.json( + // { message: "Peserta Not Found", response: null }, + // { status: 400 } + // ); + // } + + if (category === "join_and_confirm") { + const join = await prisma.event_Peserta.create({ + data: { + eventId: id, + userId: data.userId, + isPresent: true, + }, + }); + + console.log("join", join); + fixData = join; + } else if (category === "confirmation") { + const checkPeserta = await prisma.event_Peserta.findFirst({ + where: { + userId: data.userId, + eventId: id, + isPresent: true, + }, + }); + + if (!checkPeserta) { + return NextResponse.json( + { message: "Peserta Not Found", response: null }, + { status: 400 } + ); + } + + const confirm = await prisma.event_Peserta.update({ + where: { + id: checkPeserta.id, + }, + data: { + isPresent: true, + }, + }); + + console.log("confirm", confirm); + fixData = confirm; + } + + return NextResponse.json( + { success: true, message: `Success ${category}`, data: fixData }, + { status: 200 } + ); + } catch (error) { + console.error("Error upsert confirmation event", error); + return NextResponse.json( + { + success: false, + message: "Error upsert confirmation event", + reason: (error as Error).message || error, + }, + { status: 500 } + ); + } +}