From 75b75ea5e81a269f453e8b104406bfc1ef52db27 Mon Sep 17 00:00:00 2001 From: amel Date: Tue, 8 Apr 2025 15:04:28 +0800 Subject: [PATCH] upd: notif pengumuman setelah login Deskripsi: - mengupdate set cookies - mengupdate get cookies' No Issues --- src/app/api/notification/route.ts | 54 +++++++++++-------- src/module/auth/api/funGetUserByCookies.ts | 7 +-- src/module/auth/api/funSetCookies.ts | 4 +- .../varification/view/view_verification.tsx | 2 +- .../home/ui/notification_announcement.tsx | 7 +-- 5 files changed, 42 insertions(+), 32 deletions(-) diff --git a/src/app/api/notification/route.ts b/src/app/api/notification/route.ts index d8d9370..46fe8f5 100644 --- a/src/app/api/notification/route.ts +++ b/src/app/api/notification/route.ts @@ -1,5 +1,5 @@ import { prisma } from "@/module/_global"; -import { funGetUserByCookies } from "@/module/auth"; +import { funGetUserByCookies, funSetCookies } from "@/module/auth"; import _ from "lodash"; import moment from "moment"; import "moment/locale/id"; @@ -14,30 +14,42 @@ export async function GET(request: Request) { return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); } + if (user.showNotification == true) { + const announcements = await prisma.notifications.findMany({ + skip: 0, + take: 1, + where: { + isActive: true, + idUserTo: user.id, + isRead: false, + category: 'announcement' + }, + orderBy: [ + { + createdAt: 'desc' + } + ] - const announcements = await prisma.notifications.findMany({ - skip: 0, - take: 1, - where: { - isActive: true, - idUserTo: user.id, - isRead: false, - category: 'announcement' - }, - orderBy: [ - { - createdAt: 'desc' - } - ] + }); + + const allData = announcements.map((v: any) => ({ + ..._.omit(v, ["createdAt"]), + createdAt: moment(v.createdAt).format("ll") + })) + + await funSetCookies({ user: user.id, showNotification: false }) + + if (announcements.length > 0) { + return NextResponse.json({ show: true, message: "Berhasil mendapatkan notifikasi", data: allData }, { status: 200 }); + } else { + return NextResponse.json({ show: false, message: "Tidak ada notifikasi pengumuman" }, { status: 200 }); + } + } else { + return NextResponse.json({ show: false, message: "Notifikasi telah tampil" }, { status: 200 }); + } - }); - const allData = announcements.map((v: any) => ({ - ..._.omit(v, ["createdAt"]), - createdAt: moment(v.createdAt).format("ll") - })) - return NextResponse.json({ success: true, message: "Berhasil mendapatkan notifikasi", data: allData, }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, message: "Gagal mendapatkan notifikasi, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); diff --git a/src/module/auth/api/funGetUserByCookies.ts b/src/module/auth/api/funGetUserByCookies.ts index 9ad7c62..d57add0 100644 --- a/src/module/auth/api/funGetUserByCookies.ts +++ b/src/module/auth/api/funGetUserByCookies.ts @@ -6,13 +6,13 @@ import { cookies } from "next/headers"; export default async function funGetUserByCookies() { const sessionCookie = cookies().get("sessionCookieSDM"); - const userId = await unsealData(sessionCookie!.value, { + const userId : any = await unsealData(sessionCookie!.value, { password: pwd_key_config, }); const user = await prisma.user.findUnique({ where: { - id: String(userId), + id: userId.user ? String(userId.user) : String(userId), }, }); @@ -35,6 +35,7 @@ export default async function funGetUserByCookies() { idVillage: user?.idVillage, idGroup: user?.idGroup, idPosition: user?.idPosition, - theme: warna + theme: warna, + showNotification: userId?.showNotification }; } \ No newline at end of file diff --git a/src/module/auth/api/funSetCookies.ts b/src/module/auth/api/funSetCookies.ts index 5ff7cf9..0d08074 100644 --- a/src/module/auth/api/funSetCookies.ts +++ b/src/module/auth/api/funSetCookies.ts @@ -4,9 +4,9 @@ import { cookies } from "next/headers"; import { prisma, pwd_key_config } from "@/module/_global"; import { createLogUser } from "@/module/user"; -export default async function funSetCookies({ user }: { user: string }) { +export default async function funSetCookies({ user, showNotification }: { user: string, showNotification: boolean }) { try { - const encryptedUserData = await sealData(user, { password: pwd_key_config }); + const encryptedUserData = await sealData({user, showNotification}, { password: pwd_key_config }); // data user const dataUser = await prisma.user.findUnique({ diff --git a/src/module/auth/varification/view/view_verification.tsx b/src/module/auth/varification/view/view_verification.tsx index d345b4c..d476882 100644 --- a/src/module/auth/varification/view/view_verification.tsx +++ b/src/module/auth/varification/view/view_verification.tsx @@ -37,7 +37,7 @@ export default function ViewVerification({ phone, otp, user }: IVerification) { async function getVerification() { setLoading(true) if (isOTP == inputOTP) { - const setCookies: any = await funSetCookies({ user: user }) + const setCookies: any = await funSetCookies({ user: user, showNotification: true }) if (setCookies.success) { toast.success(setCookies.message) diff --git a/src/module/home/ui/notification_announcement.tsx b/src/module/home/ui/notification_announcement.tsx index 82bae50..c3edaf0 100644 --- a/src/module/home/ui/notification_announcement.tsx +++ b/src/module/home/ui/notification_announcement.tsx @@ -15,15 +15,12 @@ export default function NotificationAnnouncement() { async function fetchData() { try { const res = await funGetOneNotificationAnnouncement(); - if (res.success) { + if (res.show) { setTampilNotif(true) - setData(res.data); - } else { - toast.error(res.message); + setData(res.data) } } catch (error) { console.error(error); - toast.error("Gagal memuat data, coba lagi nanti"); } finally { setTimeout(() => { setTampilNotif(false);