From 52e9052bb74dcb9ffff8e1a6561a6a3a80093a06 Mon Sep 17 00:00:00 2001 From: lukman Date: Mon, 29 Jul 2024 15:28:45 +0800 Subject: [PATCH] api : update announcement --- api.http | 43 ++++++++++++++++- .../api/get/getAllAnnouncement.ts | 44 +++++++++++++++-- .../api/get/getOneAnnouncement.ts | 28 +++++++++++ .../api/post/deleteAnnouncement.ts | 26 ++++++++-- .../api/post/updateAnnouncement.ts | 47 +++++++++++++++++-- 5 files changed, 177 insertions(+), 11 deletions(-) diff --git a/api.http b/api.http index 6bfee15..6f4e656 100644 --- a/api.http +++ b/api.http @@ -163,15 +163,18 @@ Content-Type: application/json { "id": "clz6dq88e0001b3mlyl4vjaf8" } + + // Announcement ### POST http://localhost:3000/api/announcement/post?path=create-announcement HTTP/1.1 Content-Type: application/json { - "title": "cobaannouncement1", - "desc": "coba announcement", + + "title": "cobaannouncement1 dsdsd", + "desc": "coba announcement sdsdsd", "idVillage": "121212", "createBy": "111", "groups": [ @@ -185,3 +188,39 @@ Content-Type: application/json } ] } + +### +GET http://localhost:3000/api/announcement/get?path=get-all-announcement&groupID=1&villageID=121212&createBy=111&divisionID=1 HTTP/1.1 + +### +GET http://localhost:3000/api/announcement/get?path=get-one-announcement&announcementId=clz6kqzvt000eb3mle1nyz6fd HTTP/1.1 + +### +POST http://localhost:3000/api/announcement/post?path=update-announcement HTTP/1.1 +Content-Type: application/json + +{ + "id": "clz6kqzvt000eb3mle1nyz6fd", + "title": "cobaannouncement coba coba", + "desc": "coba announcement coba coba", + "idVillage": "121212", + "createBy": "clz6dq88e0001b3mlyl4vjaf8", + "groups": [ + { + "idGroup": "1", + "idDivision": "1" + }, + { + "idGroup": "1", + "idDivision": "2" + } + ] +} + +### +POST http://localhost:3000/api/announcement/post?path=delete-announcement HTTP/1.1 +Content-Type: application/json + +{ + "id": "clz6naf9s000ib3mlf5aujk92" +} \ No newline at end of file diff --git a/src/module/announcement/api/get/getAllAnnouncement.ts b/src/module/announcement/api/get/getAllAnnouncement.ts index 664fd93..15a759a 100644 --- a/src/module/announcement/api/get/getAllAnnouncement.ts +++ b/src/module/announcement/api/get/getAllAnnouncement.ts @@ -1,9 +1,47 @@ +import { prisma } from "@/module/_global"; import { NextRequest } from "next/server"; export async function getAllAnnouncement(req: NextRequest) { try { - return Response.json({ - success: true, + const searchParams = req.nextUrl.searchParams; + const groupID = searchParams.get("groupID"); + const villageID = searchParams.get("villageID"); + const createBy = searchParams.get("createBy"); + const divisionID = searchParams.get("divisionID"); + const announcements = await prisma.annoucement.findMany({ + where: { + idVillage: String(villageID), + createdBy: String(createBy), + isActive: true, + }, + select: { + id: true, + title: true, + desc: true, + }, }); - } catch (error) {} + + const announcementMember = await prisma.annoucementMember.findMany({ + where: { + idGroup: String(groupID), + idDivision: String(divisionID), + idAnnoucement: { + in: announcements.map((announcement: any) => announcement.id), + }, + }, + select: { + idAnnoucement: true, + idGroup: true, + idDivision: true, + }, + }); + + return Response.json({ announcements, announcementMember }); + } catch (error) { + console.error(error); + return Response.json( + { message: "Internal Server Error", success: false }, + { status: 500 } + ); + } } diff --git a/src/module/announcement/api/get/getOneAnnouncement.ts b/src/module/announcement/api/get/getOneAnnouncement.ts index b3cd5ae..3384c46 100644 --- a/src/module/announcement/api/get/getOneAnnouncement.ts +++ b/src/module/announcement/api/get/getOneAnnouncement.ts @@ -3,7 +3,35 @@ import { NextRequest } from "next/server"; export async function getOneAnnouncement(req: NextRequest) { try { + const searchParams = req.nextUrl.searchParams; + const announcementId = searchParams.get("announcementId"); + const announcement = await prisma.annoucement.findUnique({ + where: { + id: String(announcementId), + }, + select: { + id: true, + title: true, + desc: true, + }, + }); + const announcementMember = await prisma.annoucementMember.findMany({ + where: { + idAnnoucement: String(announcementId), + }, + select: { + idAnnoucement: true, + idGroup: true, + idDivision: true, + }, + }); + return Response.json({ announcement, announcementMember }); } catch (error) { + console.error(error); + return Response.json( + { message: "Internal Server Error", success: false }, + { status: 500 } + ); } } diff --git a/src/module/announcement/api/post/deleteAnnouncement.ts b/src/module/announcement/api/post/deleteAnnouncement.ts index 536453f..efaf239 100644 --- a/src/module/announcement/api/post/deleteAnnouncement.ts +++ b/src/module/announcement/api/post/deleteAnnouncement.ts @@ -1,7 +1,27 @@ +import { prisma } from "@/module/_global"; import { NextRequest } from "next/server"; export async function deleteAnnouncement(req: NextRequest) { - try { - } catch (error) {} + try { + const data = await req.json(); + const update = await prisma.annoucement.update({ + where: { + id: data.id, + }, + data: { + isActive: false, + }, + }); + + return Response.json( + { success: true, message: "Sukses Delete Announcement" }, + { status: 200 } + ); + } catch (error) { + console.error(error); + return Response.json( + { message: "Internal Server Error", success: false }, + { status: 500 } + ); } - \ No newline at end of file +} diff --git a/src/module/announcement/api/post/updateAnnouncement.ts b/src/module/announcement/api/post/updateAnnouncement.ts index 269fcaf..47fd977 100644 --- a/src/module/announcement/api/post/updateAnnouncement.ts +++ b/src/module/announcement/api/post/updateAnnouncement.ts @@ -1,7 +1,48 @@ +import { prisma } from "@/module/_global"; import { NextRequest } from "next/server"; export async function updateAnnouncement(req: NextRequest) { - try { - } catch (error) {} + try { + const data = await req.json(); + const udpate = await prisma.annoucement.update({ + where: { + id: data.id, + }, + data: { + title: data.title, + desc: data.desc, + idVillage: data.idVillage, + createdBy: data.createBy, + isActive: true, + }, + }); + + const deleteAnnouncement = await prisma.annoucementMember.deleteMany({ + where: { + idAnnoucement: data.id, + }, + }); + + const dataMember = data.groups.map((group: any) => ({ + idAnnoucement: data.id, + idGroup: group.idGroup, + idDivision: group.idDivision, + isActive: true, + })); + + const announcementMember = await prisma.annoucementMember.createMany({ + data: dataMember, + }); + + return Response.json({ + success: true, + message: "Sukses Update Announcement", + }); + } catch (error) { + console.error(error); + return Response.json( + { message: "Internal Server Error", success: false }, + { status: 500 } + ); } - \ No newline at end of file +}