From c2c52ed5fd0492e6aacfbd7716b4f47e0a56ab33 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Fri, 3 Oct 2025 16:53:31 +0800 Subject: [PATCH 01/16] upd: home api mobile --- src/app/api/mobile/home/route.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/app/api/mobile/home/route.ts b/src/app/api/mobile/home/route.ts index 068d399..d7778eb 100644 --- a/src/app/api/mobile/home/route.ts +++ b/src/app/api/mobile/home/route.ts @@ -425,19 +425,19 @@ export async function GET(request: Request) { isActive: true, status: 1, idVillage: idVillage - }, + } - kondisi = { + kondisi = { + isActive: true, + status: 1, + Division: { isActive: true, - status: 1, - Division: { + idVillage: idVillage, + Group: { isActive: true, - idVillage: idVillage, - Group: { - isActive: true, - } } } + } } else { kondisiUmum = { isActive: true, From b648735b06e951f5e25e2faa3c02ac29498c3e56 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Mon, 6 Oct 2025 17:08:07 +0800 Subject: [PATCH 02/16] fix:api mobile Deskripsi: - filter notif duplikat pada fitur pengumuman, diskusi umum, diskusi divisi, divisi, kegiatan dan tugas divisi NO Issues --- src/app/api/mobile/announcement/route.ts | 7 ++++++- src/app/api/mobile/discussion-general/route.ts | 6 +++++- src/app/api/mobile/discussion/route.ts | 6 +++++- src/app/api/mobile/division/route.ts | 6 +++++- src/app/api/mobile/project/route.ts | 6 +++++- src/app/api/mobile/task/route.ts | 6 +++++- 6 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/app/api/mobile/announcement/route.ts b/src/app/api/mobile/announcement/route.ts index c5b0764..822227d 100644 --- a/src/app/api/mobile/announcement/route.ts +++ b/src/app/api/mobile/announcement/route.ts @@ -255,15 +255,20 @@ export async function POST(request: Request) { const dataNotifFilter = dataNotif.filter((v: any) => v.idUserTo != undefined && v.idUserTo != null && v.idUserTo != "" && v.idUserTo != userId) + const dataNotifFilterUnique = dataNotifFilter + .filter((v: any, index: number, self: any[]) => + index === self.findIndex((t: any) => t.idUserTo == v.idUserTo) + ) const pushNotif = dataPush.filter((item) => item.subscription != undefined) const sendWebPush = await funSendWebPush({ sub: pushNotif, message: { title: 'Pengumuman Baru', body: title } }) const insertNotif = await prisma.notifications.createMany({ - data: dataNotifFilter + data: dataNotifFilterUnique }) const tokenUnique = [...new Set(tokenDup.flat())].filter((v: any) => v != undefined && v != null && v != ""); + await sendFCMNotificationMany({ token: tokenUnique, title: "Pengumuman Baru", diff --git a/src/app/api/mobile/discussion-general/route.ts b/src/app/api/mobile/discussion-general/route.ts index 556a2c4..bb46a00 100644 --- a/src/app/api/mobile/discussion-general/route.ts +++ b/src/app/api/mobile/discussion-general/route.ts @@ -210,9 +210,13 @@ export async function POST(request: Request) { } dataNotif.filter((v: any) => v.idUserTo != undefined && v.idUserTo != null && v.idUserTo != "" && v.idUserTo != userId) + const dataNotifUnique = dataNotif + .filter((v: any, index: number, self: any[]) => + index === self.findIndex((t: any) => t.idUserTo == v.idUserTo) + ) const insertNotif = await prisma.notifications.createMany({ - data: dataNotif + data: dataNotifUnique }) const tokenUnique = [...new Set(tokenDup.flat())].filter((v: any) => v != undefined && v != null && v != ""); diff --git a/src/app/api/mobile/discussion/route.ts b/src/app/api/mobile/discussion/route.ts index 38c2176..9dbdb43 100644 --- a/src/app/api/mobile/discussion/route.ts +++ b/src/app/api/mobile/discussion/route.ts @@ -263,12 +263,16 @@ export async function POST(request: Request) { } const dataNotifFilter = dataNotif.filter((v: any) => v.idUserTo != undefined && v.idUserTo != null && v.idUserTo != "" && v.idUserTo != userId) + const dataNotifFilterUnique = dataNotifFilter + .filter((v: any, index: number, self: any[]) => + index === self.findIndex((t: any) => t.idUserTo == v.idUserTo) + ) const pushNotif = dataPush.filter((item) => item.subscription != undefined) const sendWebPush = await funSendWebPush({ sub: pushNotif, message: { body: deskripsiNotif, title: 'Diskusi Baru' } }) const insertNotif = await prisma.notifications.createMany({ - data: dataNotifFilter + data: dataNotifFilterUnique }) const tokenUnique = [...new Set(tokenDup.flat())].filter((v: any) => v != undefined && v != null && v != ""); diff --git a/src/app/api/mobile/division/route.ts b/src/app/api/mobile/division/route.ts index 4a8638d..48dfef7 100644 --- a/src/app/api/mobile/division/route.ts +++ b/src/app/api/mobile/division/route.ts @@ -314,12 +314,16 @@ export async function POST(request: Request) { } const dataNotifFilter = dataNotif.filter((v: any) => v.idUserTo != undefined && v.idUserTo != null && v.idUserTo != "" && v.idUserTo != userId) + const dataNotifFilterUnique = dataNotifFilter + .filter((v: any, index: number, self: any[]) => + index === self.findIndex((t: any) => t.idUserTo == v.idUserTo) + ) const pushNotif = dataPush.filter((item) => item.subscription != undefined) const sendWebPush = await funSendWebPush({ sub: pushNotif, message: { title: 'Divisi Baru', body: `Divisi ${sent.data.name} telah dibuat. Silakan periksa detailnya.` } }) const insertNotif = await prisma.notifications.createMany({ - data: dataNotifFilter + data: dataNotifFilterUnique }) const tokenUnique = [...new Set(tokenDup.flat())].filter((v: any) => v != undefined && v != null && v != ""); diff --git a/src/app/api/mobile/project/route.ts b/src/app/api/mobile/project/route.ts index d0ed52f..bffa5f0 100644 --- a/src/app/api/mobile/project/route.ts +++ b/src/app/api/mobile/project/route.ts @@ -385,11 +385,15 @@ export async function POST(request: Request) { } const dataNotifFilter = dataNotif.filter((item) => item.idUserTo != undefined && item.idUserTo != null && item.idUserTo != "" && item.idUserTo != userId) + const dataNotifFilterUnique = dataNotifFilter + .filter((v: any, index: number, self: any[]) => + index === self.findIndex((t: any) => t.idUserTo == v.idUserTo) + ) const pushNotif = dataPush.filter((item) => item.subscription != undefined) const sendWebPush = await funSendWebPush({ sub: pushNotif, message: { title: 'Kegiatan Baru', body: title } }) const insertNotif = await prisma.notifications.createMany({ - data: dataNotifFilter + data: dataNotifFilterUnique }) const tokenUnique = [...new Set(tokenDup.flat())].filter((v: any) => v != undefined && v != null && v != ""); diff --git a/src/app/api/mobile/task/route.ts b/src/app/api/mobile/task/route.ts index 5d36a81..a83083b 100644 --- a/src/app/api/mobile/task/route.ts +++ b/src/app/api/mobile/task/route.ts @@ -356,11 +356,15 @@ export async function POST(request: Request) { } const dataNotifFilter = dataNotif.filter((v: any) => v.idUserTo != undefined && v.idUserTo != null && v.idUserTo != "" && v.idUserTo != userId) + const dataNotifFilterUnique = dataNotifFilter + .filter((v: any, index: number, self: any[]) => + index === self.findIndex((t: any) => t.idUserTo == v.idUserTo) + ) const pushNotif = dataPush.filter((item) => item.subscription != undefined) const sendWebPush = await funSendWebPush({ sub: pushNotif, message: { body: title, title: 'Tugas Divisi Baru' } }) const insertNotif = await prisma.notifications.createMany({ - data: dataNotifFilter + data: dataNotifFilterUnique }) const tokenUnique = [...new Set(tokenDup.flat())].filter((v: any) => v != undefined && v != null && v != ""); From d1a591a63a5a21f0bc4f608def82aa20ddc1a928 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Tue, 7 Oct 2025 12:01:19 +0800 Subject: [PATCH 03/16] upd: api mobile Deskripsi: - check nama divisi No Issues --- src/app/api/mobile/division/route.ts | 41 ++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/app/api/mobile/division/route.ts b/src/app/api/mobile/division/route.ts index 48dfef7..9b6b538 100644 --- a/src/app/api/mobile/division/route.ts +++ b/src/app/api/mobile/division/route.ts @@ -342,4 +342,45 @@ export async function POST(request: Request) { console.error(error); return NextResponse.json({ success: false, message: "Gagal menambahkan divisi, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); } +}; + + +// CEK DATA DIVISI (NAME DI DESA DAN GROUP YG SAMA) +export async function PUT(request: Request) { + try { + + const sent = (await request.json()) + const user = sent.user + const userMobile = await funGetUserById({ id: String(user) }) + if (userMobile.id == "null" || userMobile.id == undefined || userMobile.id == "") { + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); + } + + let fixGroup + if (sent.data.idGroup == "null" || sent.data.idGroup == undefined || sent.data.idGroup == "") { + fixGroup = userMobile.idGroup + } else { + fixGroup = sent.data.idGroup + } + + const checkData = await prisma.division.count({ + where: { + name: { + equals: sent.data.name, + mode: "insensitive" + }, + idGroup: fixGroup, + idVillage: String(userMobile.idVillage) + } + }) + + if (checkData > 0) { + return NextResponse.json({ success: true, message: "Divisi dengan nama ini sudah ada", available: false }, { status: 200 }); + } + + return NextResponse.json({ success: true, message: "Berhasil cek data divisi", available: true }, { status: 200 }); + } catch (error) { + console.error(error); + return NextResponse.json({ success: false, message: "Gagal menambahkan divisi, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); + } }; \ No newline at end of file From 150151e823265bc2d6a5225884b2bbc91105ed1e Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Tue, 7 Oct 2025 15:09:20 +0800 Subject: [PATCH 04/16] upd: order tugas Deskripsi: - order tugas pada tugas divisi dan kegiatan NO Issues' --- src/app/api/mobile/project/[id]/route.ts | 2 +- src/app/api/mobile/task/[id]/route.ts | 2 +- src/app/api/project/[id]/route.ts | 6 +++--- src/app/api/task/[id]/route.ts | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/app/api/mobile/project/[id]/route.ts b/src/app/api/mobile/project/[id]/route.ts index 7c09849..9f0152a 100644 --- a/src/app/api/mobile/project/[id]/route.ts +++ b/src/app/api/mobile/project/[id]/route.ts @@ -71,7 +71,7 @@ export async function GET(request: Request, context: { params: { id: string } }) createdAt: true }, orderBy: { - createdAt: 'asc' + dateStart: 'asc' } }) diff --git a/src/app/api/mobile/task/[id]/route.ts b/src/app/api/mobile/task/[id]/route.ts index a7260f0..7f285c6 100644 --- a/src/app/api/mobile/task/[id]/route.ts +++ b/src/app/api/mobile/task/[id]/route.ts @@ -76,7 +76,7 @@ export async function GET(request: Request, context: { params: { id: string } }) dateEnd: true, }, orderBy: { - createdAt: 'asc' + dateStart: 'asc' } }) diff --git a/src/app/api/project/[id]/route.ts b/src/app/api/project/[id]/route.ts index df7e87f..f8cecad 100644 --- a/src/app/api/project/[id]/route.ts +++ b/src/app/api/project/[id]/route.ts @@ -68,7 +68,7 @@ export async function GET(request: Request, context: { params: { id: string } }) createdAt: true }, orderBy: { - createdAt: 'asc' + dateStart: 'asc' } }) @@ -78,8 +78,8 @@ export async function GET(request: Request, context: { params: { id: string } }) dateEnd: moment(v.dateEnd).format("DD-MM-YYYY"), createdAt: moment(v.createdAt).format("DD-MM-YYYY HH:mm"), })) - const dataFix = _.orderBy(formatData, 'createdAt', 'asc') - allData = dataFix + // const dataFix = _.orderBy(formatData, 'createdAt', 'asc') + allData = formatData } else if (kategori == "file") { const dataFile = await prisma.projectFile.findMany({ diff --git a/src/app/api/task/[id]/route.ts b/src/app/api/task/[id]/route.ts index 7ef6090..8f1652b 100644 --- a/src/app/api/task/[id]/route.ts +++ b/src/app/api/task/[id]/route.ts @@ -75,7 +75,7 @@ export async function GET(request: Request, context: { params: { id: string } }) dateEnd: true, }, orderBy: { - createdAt: 'asc' + dateStart: 'asc' } }) From bae91db60a7727ba318dd150e0a38cbcb3eecd15 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Tue, 7 Oct 2025 16:36:34 +0800 Subject: [PATCH 05/16] upd: penerima notifikasi Deskripsi: - pembuat data mendapat notifikasi saat user memberi komentar walaupun pembuat data bukan merupakan anggota dari diskusi umum maupun anggota divisi - diskusi umum dan diskusi divis No Issues --- .../discussion-general/[id]/comment/route.ts | 28 ++++++++++++++++++- .../mobile/discussion/[id]/comment/route.ts | 20 ++++++++++++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/app/api/mobile/discussion-general/[id]/comment/route.ts b/src/app/api/mobile/discussion-general/[id]/comment/route.ts index 34f78a2..c748522 100644 --- a/src/app/api/mobile/discussion-general/[id]/comment/route.ts +++ b/src/app/api/mobile/discussion-general/[id]/comment/route.ts @@ -37,6 +37,29 @@ export async function POST(request: Request, context: { params: { id: string } } } }) + const dataDiscussion = await prisma.discussion.findUnique({ + where: { + id + }, + select: { + createdBy: true, + User: { + select: { + Subscribe: { + select: { + subscription: true + } + }, + TokenDeviceUser: { + select: { + token: true + } + } + } + } + } + }) + const member = await prisma.discussionMember.findMany({ where: { idDiscussion: id, @@ -70,7 +93,10 @@ export async function POST(request: Request, context: { params: { id: string } } } }) - const memberFilter = member.filter((v: any) => v.idUser != userMobile.id) + const memberFilter = [...member, { idUser: dataDiscussion?.createdBy, User: dataDiscussion?.User }].filter((v: any) => v.idUser != userMobile.id) + .filter((v: any, index: number, self: any[]) => + index === self.findIndex((t) => t.idUser === v.idUser) + ); const dataFCM = memberFilter.map((v: any) => ({ ..._.omit(v, ["idUser", "User", "Subscribe", "TokenDeviceUser"]), diff --git a/src/app/api/mobile/discussion/[id]/comment/route.ts b/src/app/api/mobile/discussion/[id]/comment/route.ts index b205fcb..34d86ec 100644 --- a/src/app/api/mobile/discussion/[id]/comment/route.ts +++ b/src/app/api/mobile/discussion/[id]/comment/route.ts @@ -50,6 +50,21 @@ export async function POST(request: Request, context: { params: { id: string } } }, select: { idDivision: true, + createdBy: true, + User: { + select: { + Subscribe: { + select: { + subscription: true + } + }, + TokenDeviceUser: { + select: { + token: true + } + } + } + } } }) @@ -86,7 +101,10 @@ export async function POST(request: Request, context: { params: { id: string } } } }) - const memberFilter = member.filter((v: any) => v.idUser != userMobile.id) + const memberFilter = [...member, { idUser: dataDivision?.createdBy, User: dataDivision?.User }].filter((v: any) => v.idUser != userMobile.id) + .filter((v: any, index: number, self: any[]) => + index === self.findIndex((t) => t.idUser === v.idUser) + ); const dataFCM = memberFilter.map((v: any) => ({ ..._.omit(v, ["idUser", "User", "Subscribe", "TokenDeviceUser"]), From b625150eb523185c5364b094e829bcbfca9a8b70 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Tue, 7 Oct 2025 17:09:36 +0800 Subject: [PATCH 06/16] upd: api home website Deskripsi: - update home api website jadi sama kyk mobile NO Issues --- src/app/api/home/route.ts | 194 +++++++++++++++++++++++--------------- 1 file changed, 120 insertions(+), 74 deletions(-) diff --git a/src/app/api/home/route.ts b/src/app/api/home/route.ts index 45f6514..7d7c85f 100644 --- a/src/app/api/home/route.ts +++ b/src/app/api/home/route.ts @@ -1,4 +1,3 @@ -import { DivisionProject } from './../../../../node_modules/.prisma/client/index.d'; import { prisma } from "@/module/_global"; import { funGetUserByCookies } from "@/module/auth"; import _, { ceil } from "lodash"; @@ -36,22 +35,28 @@ export async function GET(request: Request) { isActive: true, } } - } else if (roleUser == "admin" || roleUser == "cosupadmin") { + } else { kondisi = { isActive: true, idGroup: idGroup } - } else { - kondisi = { - isActive: true, - idGroup: idGroup, - ProjectMember: { - some: { - idUser: user.id - } - } - } } + // else if (roleUser == "admin" || roleUser == "cosupadmin") { + // kondisi = { + // isActive: true, + // idGroup: idGroup + // } + // } else { + // kondisi = { + // isActive: true, + // idGroup: idGroup, + // ProjectMember: { + // some: { + // idUser: user.id + // } + // } + // } + // } const data = await prisma.project.findMany({ skip: 0, @@ -96,22 +101,28 @@ export async function GET(request: Request) { isActive: true, } } - } else if (roleUser == "admin" || roleUser == "cosupadmin") { + } else { kondisi = { isActive: true, idGroup: idGroup } - } else { - kondisi = { - isActive: true, - idGroup: idGroup, - DivisionMember: { - some: { - idUser: user.id - } - } - } } + // else if (roleUser == "admin" || roleUser == "cosupadmin") { + // kondisi = { + // isActive: true, + // idGroup: idGroup + // } + // } else { + // kondisi = { + // isActive: true, + // idGroup: idGroup, + // DivisionMember: { + // some: { + // idUser: user.id + // } + // } + // } + // } const data = await prisma.division.findMany({ where: kondisi, @@ -134,7 +145,9 @@ export async function GET(request: Request) { jumlah: v.DivisionProject.length, })) - allData = _.orderBy(format, 'jumlah', 'desc').slice(0, 5) + const filter = format.filter((v: any) => v.jumlah > 0) + + allData = _.orderBy(filter, 'jumlah', 'desc').slice(0, 5) } else if (kategori == "progress") { let kondisi @@ -143,37 +156,50 @@ export async function GET(request: Request) { if (roleUser == "supadmin" || roleUser == "developer") { kondisi = { isActive: true, - Division: { + idVillage: idVillage, + Group: { isActive: true, - idVillage: idVillage, - Group: { - isActive: true, - } - } - } - } else if (roleUser == "admin" || roleUser == "cosupadmin") { - kondisi = { - isActive: true, - Division: { - isActive: true, - idGroup: idGroup } } + // kondisi = { + // isActive: true, + // Division: { + // isActive: true, + // idVillage: idVillage, + // Group: { + // isActive: true, + // } + // } + // } } else { kondisi = { isActive: true, - Division: { - isActive: true, - DivisionMember: { - some: { - idUser: user.id - } - } - } + idGroup: idGroup } } + // else if (roleUser == "admin" || roleUser == "cosupadmin") { + // kondisi = { + // isActive: true, + // Division: { + // isActive: true, + // idGroup: idGroup + // } + // } + // } else { + // kondisi = { + // isActive: true, + // Division: { + // isActive: true, + // DivisionMember: { + // some: { + // idUser: user.id + // } + // } + // } + // } + // } - const data = await prisma.divisionProject.groupBy({ + const data = await prisma.project.groupBy({ where: kondisi, by: ["status"], _count: true @@ -218,7 +244,7 @@ export async function GET(request: Request) { } } } - } else if (roleUser == "admin" || roleUser == "cosupadmin") { + } else { kondisi = { isActive: true, category: 'FILE', @@ -227,20 +253,30 @@ export async function GET(request: Request) { idGroup: idGroup } } - } else { - kondisi = { - isActive: true, - category: 'FILE', - Division: { - isActive: true, - DivisionMember: { - some: { - idUser: user.id - } - } - } - } } + // else if (roleUser == "admin" || roleUser == "cosupadmin") { + // kondisi = { + // isActive: true, + // category: 'FILE', + // Division: { + // isActive: true, + // idGroup: idGroup + // } + // } + // } else { + // kondisi = { + // isActive: true, + // category: 'FILE', + // Division: { + // isActive: true, + // DivisionMember: { + // some: { + // idUser: user.id + // } + // } + // } + // } + // } const data = await prisma.divisionDocumentFolderFile.findMany({ where: kondisi, @@ -377,7 +413,7 @@ export async function GET(request: Request) { } } } - } else if (roleUser == "admin" || roleUser == "cosupadmin") { + } else { kondisi = { isActive: true, status: 1, @@ -386,20 +422,30 @@ export async function GET(request: Request) { isActive: true } } - } else { - kondisi = { - isActive: true, - status: 1, - Division: { - isActive: true, - DivisionMember: { - some: { - idUser: user.id - } - } - } - } } + // else if (roleUser == "admin" || roleUser == "cosupadmin") { + // kondisi = { + // isActive: true, + // status: 1, + // Division: { + // idGroup: idGroup, + // isActive: true + // } + // } + // } else { + // kondisi = { + // isActive: true, + // status: 1, + // Division: { + // isActive: true, + // DivisionMember: { + // some: { + // idUser: user.id + // } + // } + // } + // } + // } const data = await prisma.divisionDisscussion.findMany({ skip: 0, From 22518189084a49c24ba7ee1817b01102d42e5c01 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Tue, 7 Oct 2025 17:11:18 +0800 Subject: [PATCH 07/16] upd: api version --- src/app/api/version-app/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/api/version-app/route.ts b/src/app/api/version-app/route.ts index eca496f..4f67b29 100644 --- a/src/app/api/version-app/route.ts +++ b/src/app/api/version-app/route.ts @@ -2,7 +2,7 @@ import { NextResponse } from "next/server"; export async function GET(request: Request) { try { - return NextResponse.json({ success: true, version: "2.0.4", tahap: "beta", update: "-api mobile; -login tanpa otp (mobile app); -tambah laporan pada project dan tugas divisi; -tambah upload link pada project dan tugas divisi; -tambah detail tanggal dan jam pada project dan tugas divisi; -api jenna ai; -privacy policy" }, { status: 200 }); + return NextResponse.json({ success: true, version: "2.0.6", tahap: "beta", update: "-api mobile; -login tanpa otp (mobile app); -tambah laporan pada project dan tugas divisi; -tambah upload link pada project dan tugas divisi; -tambah detail tanggal dan jam pada project dan tugas divisi; -api jenna ai; -privacy policy" }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, version: "Gagal mendapatkan version, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); From 66ba6dfa914d44ded5a5ea08102bf440dafaf8f2 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Wed, 8 Oct 2025 16:14:30 +0800 Subject: [PATCH 08/16] fix : api home Deskripsi: - update api home > kegiatan terupdate order by updatedate - api version app No Issues --- src/app/api/home/route.ts | 2 +- src/app/api/mobile/home/route.ts | 2 +- src/app/api/version-app/route.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/api/home/route.ts b/src/app/api/home/route.ts index 7d7c85f..83f7322 100644 --- a/src/app/api/home/route.ts +++ b/src/app/api/home/route.ts @@ -79,7 +79,7 @@ export async function GET(request: Request) { } }, orderBy: { - createdAt: "desc" + updatedAt: "desc" } }) diff --git a/src/app/api/mobile/home/route.ts b/src/app/api/mobile/home/route.ts index d7778eb..8ebe73f 100644 --- a/src/app/api/mobile/home/route.ts +++ b/src/app/api/mobile/home/route.ts @@ -81,7 +81,7 @@ export async function GET(request: Request) { } }, orderBy: { - createdAt: "desc" + updatedAt: "desc" } }) diff --git a/src/app/api/version-app/route.ts b/src/app/api/version-app/route.ts index 4f67b29..d7d65b4 100644 --- a/src/app/api/version-app/route.ts +++ b/src/app/api/version-app/route.ts @@ -2,7 +2,7 @@ import { NextResponse } from "next/server"; export async function GET(request: Request) { try { - return NextResponse.json({ success: true, version: "2.0.6", tahap: "beta", update: "-api mobile; -login tanpa otp (mobile app); -tambah laporan pada project dan tugas divisi; -tambah upload link pada project dan tugas divisi; -tambah detail tanggal dan jam pada project dan tugas divisi; -api jenna ai; -privacy policy" }, { status: 200 }); + return NextResponse.json({ success: true, version: "2.0.7", tahap: "beta", update: "-api mobile; -login tanpa otp (mobile app); -tambah laporan pada project dan tugas divisi; -tambah upload link pada project dan tugas divisi; -tambah detail tanggal dan jam pada project dan tugas divisi; -api jenna ai; -privacy policy" }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, version: "Gagal mendapatkan version, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); From 3d5149cbbacbf85e983ad3a6db17ce45a155b392 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Mon, 13 Oct 2025 17:19:20 +0800 Subject: [PATCH 09/16] upd: komentar diskusi - Deskripsi: - upd database - tampilan api mobile komentar diskusi umum dan diskusi divisi No Issues --- prisma/schema.prisma | 2 ++ src/app/api/mobile/discussion-general/[id]/route.ts | 5 ++++- src/app/api/mobile/discussion/[id]/route.ts | 7 ++++++- src/module/_global/fun/count_time.ts | 2 +- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index dacd4ca..b187a9d 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -420,6 +420,7 @@ model DivisionDisscussionComment { isActive Boolean @default(true) User User @relation(fields: [createdBy], references: [id]) createdBy String + isEdited Boolean @default(false) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } @@ -615,6 +616,7 @@ model DiscussionComment { idUser String comment String @db.Text isActive Boolean @default(true) + isEdited Boolean @default(false) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } diff --git a/src/app/api/mobile/discussion-general/[id]/route.ts b/src/app/api/mobile/discussion-general/[id]/route.ts index 6b3a5dd..d538689 100644 --- a/src/app/api/mobile/discussion-general/[id]/route.ts +++ b/src/app/api/mobile/discussion-general/[id]/route.ts @@ -68,6 +68,8 @@ export async function GET(request: Request, context: { params: { id: string } }) id: true, comment: true, createdAt: true, + updatedAt: true, + isEdited: true, idUser: true, User: { select: { @@ -79,8 +81,9 @@ export async function GET(request: Request, context: { params: { id: string } }) }) dataFix = data.map((v: any) => ({ - ..._.omit(v, ["createdAt", "User",]), + ..._.omit(v, ["createdAt", "User", "updatedAt"]), createdAt: countTime(v.createdAt), + updatedAt: moment(v.updatedAt).format("ll"), username: v.User.name, img: v.User.img })) diff --git a/src/app/api/mobile/discussion/[id]/route.ts b/src/app/api/mobile/discussion/[id]/route.ts index 5b423cc..65930b1 100644 --- a/src/app/api/mobile/discussion/[id]/route.ts +++ b/src/app/api/mobile/discussion/[id]/route.ts @@ -44,6 +44,9 @@ export async function GET(request: Request, context: { params: { id: string } }) id: true, comment: true, createdAt: true, + updatedAt: true, + isEdited: true, + createdBy: true, User: { select: { name: true, @@ -54,10 +57,12 @@ export async function GET(request: Request, context: { params: { id: string } }) }) const omitMember = data.map((v: any) => ({ - ..._.omit(v, ["User", "createdAt"]), + ..._.omit(v, ["User", "createdBy", "createdAt", "updatedAt"]), + idUser: v.createdBy, username: v.User.name, img: v.User.img, createdAt: countTime(v.createdAt), + updatedAt: moment(v.updatedAt).format("ll") })) return NextResponse.json({ success: true, message: "Berhasil mendapatkan komentar", data: omitMember }, { status: 200 }); diff --git a/src/module/_global/fun/count_time.ts b/src/module/_global/fun/count_time.ts index 5a26efa..744950d 100644 --- a/src/module/_global/fun/count_time.ts +++ b/src/module/_global/fun/count_time.ts @@ -18,7 +18,7 @@ export function countTime(date: Date) { const seconds = totalSeconds; if (days > 0) { - return moment(date).format("ll") + return String(dateNow.getFullYear()) == moment(date).format("YYYY") ? moment(date).format("DD MMM") : moment(date).format("ll") } else if (hours > 0) { return `${hours} jam` } else if (minutes > 0) { From 878b3aa278af9a676ded9969b1881fc57019a41d Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Tue, 14 Oct 2025 15:00:39 +0800 Subject: [PATCH 10/16] upd: komentar diskusi - api mobile hapus komentar diskusi umum dan diskusi divisi - api mobile edit komentar diskusi dumum dan diskusi divisi No Issues --- .../discussion-general/[id]/comment/route.ts | 86 +++++++++++++++ .../api/mobile/discussion-general/route.ts | 3 + .../mobile/discussion/[id]/comment/route.ts | 101 +++++++++++++++++- src/app/api/mobile/discussion/[id]/route.ts | 3 +- src/app/api/mobile/discussion/route.ts | 3 + 5 files changed, 194 insertions(+), 2 deletions(-) diff --git a/src/app/api/mobile/discussion-general/[id]/comment/route.ts b/src/app/api/mobile/discussion-general/[id]/comment/route.ts index c748522..71b8dd2 100644 --- a/src/app/api/mobile/discussion-general/[id]/comment/route.ts +++ b/src/app/api/mobile/discussion-general/[id]/comment/route.ts @@ -147,4 +147,90 @@ export async function POST(request: Request, context: { params: { id: string } } console.error(error) return NextResponse.json({ success: false, message: "Gagal menambahkan komentar, coba lagi nanti (error: 500)" }) } +} + +// EDIT KOMENTAR +export async function PUT(request: Request, context: { params: { id: string } }) { + try { + const { id } = context.params + const { desc, user } = (await request.json()); + const userMobile = await funGetUserById({ id: String(user) }) + + if (userMobile.id == "null" || userMobile.id == undefined || userMobile.id == "") { + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); + } + + const cek = await prisma.discussionComment.count({ + where: { + id, + isActive: true + } + }) + + if (cek == 0) { + return NextResponse.json({ success: false, message: "Gagal mengedit komentar, data tidak ditemukan" }, { status: 200 }); + } + + + const data = await prisma.discussionComment.update({ + where: { + id + }, + data: { + comment: desc, + isEdited: true + } + }) + + // create log user + const log = await createLogUserMobile({ act: 'UPDATE', desc: 'User mengedit komentar pada diskusi umum', table: 'discussionComment', data: id, user: userMobile.id }) + return NextResponse.json({ success: true, message: "Berhasil mengedit komentar" }, { status: 200 }); + + } catch (error) { + console.error(error) + return NextResponse.json({ success: false, message: "Gagal mengedit komentar, coba lagi nanti (error: 500)" }) + } +} + + +// HAPUS KOMENTAR +export async function DELETE(request: Request, context: { params: { id: string } }) { + try { + const { id } = context.params + const { user } = (await request.json()); + const userMobile = await funGetUserById({ id: String(user) }) + + if (userMobile.id == "null" || userMobile.id == undefined || userMobile.id == "") { + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); + } + + const cek = await prisma.discussionComment.count({ + where: { + id, + isActive: true + } + }) + + if (cek == 0) { + return NextResponse.json({ success: false, message: "Gagal mengedit komentar, data tidak ditemukan" }, { status: 200 }); + } + + + const data = await prisma.discussionComment.update({ + where: { + id + }, + data: { + isActive: false + } + }) + + // create log user + const log = await createLogUserMobile({ act: 'DELETE', desc: 'User menghapus komentar pada diskusi umum', table: 'discussionComment', data: id, user: userMobile.id }) + return NextResponse.json({ success: true, message: "Berhasil mengedit komentar" }, { status: 200 }); + + } catch (error) { + console.error(error) + return NextResponse.json({ success: false, message: "Gagal mengedit komentar, coba lagi nanti (error: 500)" }) + } } \ No newline at end of file diff --git a/src/app/api/mobile/discussion-general/route.ts b/src/app/api/mobile/discussion-general/route.ts index bb46a00..b890761 100644 --- a/src/app/api/mobile/discussion-general/route.ts +++ b/src/app/api/mobile/discussion-general/route.ts @@ -75,6 +75,9 @@ export async function GET(request: Request) { DiscussionComment: { select: { id: true, + }, + where: { + isActive: true } } } diff --git a/src/app/api/mobile/discussion/[id]/comment/route.ts b/src/app/api/mobile/discussion/[id]/comment/route.ts index 34d86ec..57f7b2e 100644 --- a/src/app/api/mobile/discussion/[id]/comment/route.ts +++ b/src/app/api/mobile/discussion/[id]/comment/route.ts @@ -5,7 +5,7 @@ import _ from "lodash"; import { NextResponse } from "next/server"; import { sendFCMNotificationMany } from "../../../../../../../xsendMany"; -// CREATE COMENT BY ID KOMENTAR +// CREATE COMENT export async function POST(request: Request, context: { params: { id: string } }) { try { const { id } = context.params @@ -156,4 +156,103 @@ export async function POST(request: Request, context: { params: { id: string } } console.error(error); return NextResponse.json({ success: false, message: "Gagal menambah komentar, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); } +} + +// EDIT KOMENTAR +export async function PUT(request: Request, context: { params: { id: string } }) { + try { + const { id } = context.params + const { comment, user } = (await request.json()); + + const userMobile = await funGetUserById({ id: String(user) }) + + if (userMobile.id == "null" || userMobile.id == undefined || userMobile.id == "") { + return NextResponse.json({ success: false, message: "User tidak ditemukan" }, { status: 200 }); + } + + const cek = await prisma.divisionDisscussionComment.count({ + where: { + id, + isActive: true + } + }) + + if (cek == 0) { + return NextResponse.json( + { + success: false, + message: "Edit komentar gagal, data tidak ditemukan", + }, + { status: 200 } + ); + } + + const data = await prisma.divisionDisscussionComment.update({ + where: { + id: id + }, + data: { + comment: comment, + isEdited: true + } + }) + + // create log user + const log = await createLogUserMobile({ act: 'UPDATE', desc: 'User mengedit komentar pada diskusi divisi', table: 'divisionDisscussionComment', data: id, user: userMobile.id }) + + return NextResponse.json({ success: true, message: "Berhasil mengedit komentar" }, { status: 200 }); + + } catch (error) { + console.error(error); + return NextResponse.json({ success: false, message: "Gagal menambah komentar, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); + } +} + +// HAPUS KOMENTAR +export async function DELETE(request: Request, context: { params: { id: string } }) { + try { + const { id } = context.params + const { user } = (await request.json()); + + const userMobile = await funGetUserById({ id: String(user) }) + + if (userMobile.id == "null" || userMobile.id == undefined || userMobile.id == "") { + return NextResponse.json({ success: false, message: "User tidak ditemukan" }, { status: 200 }); + } + + const cek = await prisma.divisionDisscussionComment.count({ + where: { + id, + isActive: true + } + }) + + if (cek == 0) { + return NextResponse.json( + { + success: false, + message: "Hapus komentar gagal, data tidak ditemukan", + }, + { status: 200 } + ); + } + + const data = await prisma.divisionDisscussionComment.update({ + where: { + id: id + }, + data: { + isActive: false + } + }) + + // create log user + const log = await createLogUserMobile({ act: 'DELETE', desc: 'User menghapus komentar pada diskusi divisi', table: 'divisionDisscussionComment', data: id, user: userMobile.id }) + + return NextResponse.json({ success: true, message: "Berhasil menghapus komentar" }, { status: 200 }); + + } catch (error) { + console.error(error); + return NextResponse.json({ success: false, message: "Gagal menghapus komentar, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); + } } \ No newline at end of file diff --git a/src/app/api/mobile/discussion/[id]/route.ts b/src/app/api/mobile/discussion/[id]/route.ts index 65930b1..14d676d 100644 --- a/src/app/api/mobile/discussion/[id]/route.ts +++ b/src/app/api/mobile/discussion/[id]/route.ts @@ -38,7 +38,8 @@ export async function GET(request: Request, context: { params: { id: string } }) if (cat == "comment") { const data = await prisma.divisionDisscussionComment.findMany({ where: { - idDisscussion: id + idDisscussion: id, + isActive: true }, select: { id: true, diff --git a/src/app/api/mobile/discussion/route.ts b/src/app/api/mobile/discussion/route.ts index 9dbdb43..3003002 100644 --- a/src/app/api/mobile/discussion/route.ts +++ b/src/app/api/mobile/discussion/route.ts @@ -67,6 +67,9 @@ export async function GET(request: Request) { DivisionDisscussionComment: { select: { id: true, + }, + where: { + isActive: true } } } From bd1758ce3255ec85e516b12821a595875059e5d8 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Tue, 14 Oct 2025 15:13:51 +0800 Subject: [PATCH 11/16] upd: api diskusi komentar deskripsi: - api komentar pada website diskusi umum dan diskusi divisi NO Issues --- src/app/api/discussion-general/route.ts | 3 +++ src/app/api/discussion/[id]/route.ts | 3 +++ src/app/api/discussion/route.ts | 3 +++ 3 files changed, 9 insertions(+) diff --git a/src/app/api/discussion-general/route.ts b/src/app/api/discussion-general/route.ts index c3489e0..f2858e3 100644 --- a/src/app/api/discussion-general/route.ts +++ b/src/app/api/discussion-general/route.ts @@ -74,6 +74,9 @@ export async function GET(request: Request) { DiscussionComment: { select: { id: true, + }, + where:{ + isActive:true } } } diff --git a/src/app/api/discussion/[id]/route.ts b/src/app/api/discussion/[id]/route.ts index cf7fd56..1f140bc 100644 --- a/src/app/api/discussion/[id]/route.ts +++ b/src/app/api/discussion/[id]/route.ts @@ -60,6 +60,9 @@ export async function GET(request: Request, context: { params: { id: string } }) img: true } } + }, + where: { + isActive:true } }, } diff --git a/src/app/api/discussion/route.ts b/src/app/api/discussion/route.ts index cc59f3d..dd174f3 100644 --- a/src/app/api/discussion/route.ts +++ b/src/app/api/discussion/route.ts @@ -64,6 +64,9 @@ export async function GET(request: Request) { DivisionDisscussionComment: { select: { id: true, + }, + where:{ + isActive:true } } } From 18023807cd1b4d27a03de1dd5060d8120bf2e8bc Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Tue, 14 Oct 2025 15:14:08 +0800 Subject: [PATCH 12/16] upd: api version app --- src/app/api/version-app/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/api/version-app/route.ts b/src/app/api/version-app/route.ts index d7d65b4..ed8f69f 100644 --- a/src/app/api/version-app/route.ts +++ b/src/app/api/version-app/route.ts @@ -2,7 +2,7 @@ import { NextResponse } from "next/server"; export async function GET(request: Request) { try { - return NextResponse.json({ success: true, version: "2.0.7", tahap: "beta", update: "-api mobile; -login tanpa otp (mobile app); -tambah laporan pada project dan tugas divisi; -tambah upload link pada project dan tugas divisi; -tambah detail tanggal dan jam pada project dan tugas divisi; -api jenna ai; -privacy policy" }, { status: 200 }); + return NextResponse.json({ success: true, version: "2.0.8", tahap: "beta", update: "-api mobile; -login tanpa otp (mobile app); -tambah laporan pada project dan tugas divisi; -tambah upload link pada project dan tugas divisi; -tambah detail tanggal dan jam pada project dan tugas divisi; -api jenna ai; -privacy policy" }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, version: "Gagal mendapatkan version, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); From 4a4be31921f3da8a42f469bcf64f170f62587018 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Wed, 15 Oct 2025 14:51:58 +0800 Subject: [PATCH 13/16] upd: api website dan mobile Deskripsi: - update order komentar pada mobile dan website pada fitur diskusi umum dan diskusi divisi No Issues --- src/app/api/discussion-general/[id]/route.ts | 5 ++++- src/app/api/discussion/[id]/route.ts | 3 +++ src/app/api/mobile/discussion-general/[id]/route.ts | 3 +++ src/app/api/mobile/discussion/[id]/route.ts | 3 +++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/app/api/discussion-general/[id]/route.ts b/src/app/api/discussion-general/[id]/route.ts index 7e27184..a600a87 100644 --- a/src/app/api/discussion-general/[id]/route.ts +++ b/src/app/api/discussion-general/[id]/route.ts @@ -3,8 +3,8 @@ import { funGetUserByCookies } from "@/module/auth"; import { createLogUser } from "@/module/user"; import _ from "lodash"; import moment from "moment"; -import { NextResponse } from "next/server"; import "moment/locale/id"; +import { NextResponse } from "next/server"; // GET ONE DETAIL DISKUSI UMUM @@ -75,6 +75,9 @@ export async function GET(request: Request, context: { params: { id: string } }) img: true } } + }, + orderBy: { + createdAt: "asc" } }) diff --git a/src/app/api/discussion/[id]/route.ts b/src/app/api/discussion/[id]/route.ts index 1f140bc..47cfbaf 100644 --- a/src/app/api/discussion/[id]/route.ts +++ b/src/app/api/discussion/[id]/route.ts @@ -63,6 +63,9 @@ export async function GET(request: Request, context: { params: { id: string } }) }, where: { isActive:true + }, + orderBy: { + createdAt: "asc" } }, } diff --git a/src/app/api/mobile/discussion-general/[id]/route.ts b/src/app/api/mobile/discussion-general/[id]/route.ts index d538689..fb2ea1b 100644 --- a/src/app/api/mobile/discussion-general/[id]/route.ts +++ b/src/app/api/mobile/discussion-general/[id]/route.ts @@ -77,6 +77,9 @@ export async function GET(request: Request, context: { params: { id: string } }) img: true } } + }, + orderBy: { + createdAt: "asc" } }) diff --git a/src/app/api/mobile/discussion/[id]/route.ts b/src/app/api/mobile/discussion/[id]/route.ts index 14d676d..b131309 100644 --- a/src/app/api/mobile/discussion/[id]/route.ts +++ b/src/app/api/mobile/discussion/[id]/route.ts @@ -54,6 +54,9 @@ export async function GET(request: Request, context: { params: { id: string } }) img: true } } + }, + orderBy: { + createdAt: "asc" } }) From 10b9037fda5b34d2b94c33efe23b3378dd841e69 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Wed, 15 Oct 2025 14:52:17 +0800 Subject: [PATCH 14/16] upd: api version --- src/app/api/version-app/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/api/version-app/route.ts b/src/app/api/version-app/route.ts index ed8f69f..ba17ddf 100644 --- a/src/app/api/version-app/route.ts +++ b/src/app/api/version-app/route.ts @@ -2,7 +2,7 @@ import { NextResponse } from "next/server"; export async function GET(request: Request) { try { - return NextResponse.json({ success: true, version: "2.0.8", tahap: "beta", update: "-api mobile; -login tanpa otp (mobile app); -tambah laporan pada project dan tugas divisi; -tambah upload link pada project dan tugas divisi; -tambah detail tanggal dan jam pada project dan tugas divisi; -api jenna ai; -privacy policy" }, { status: 200 }); + return NextResponse.json({ success: true, version: "2.0.9", tahap: "beta", update: "-api mobile; -login tanpa otp (mobile app); -tambah laporan pada project dan tugas divisi; -tambah upload link pada project dan tugas divisi; -tambah detail tanggal dan jam pada project dan tugas divisi; -api jenna ai; -privacy policy" }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, version: "Gagal mendapatkan version, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); From ed2c9495c3ea481622e8e5bf2502de20c2575a42 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Thu, 16 Oct 2025 14:53:23 +0800 Subject: [PATCH 15/16] upd: api mobile status saat error --- src/app/api/mobile/announcement/[id]/route.ts | 5 +++-- src/app/api/mobile/banner/route.ts | 2 +- src/app/api/mobile/discussion-general/[id]/route.ts | 4 ++-- src/app/api/mobile/discussion-general/route.ts | 2 +- src/app/api/mobile/discussion/[id]/route.ts | 4 ++-- src/app/api/mobile/discussion/route.ts | 4 ++-- src/app/api/mobile/group/[id]/route.ts | 12 ++++++------ src/app/api/mobile/group/route.ts | 4 ++-- src/app/api/mobile/home/search/route.ts | 2 +- src/app/api/mobile/position/[id]/route.ts | 8 ++++---- src/app/api/mobile/position/route.ts | 8 ++++---- src/app/api/mobile/user/[id]/route.ts | 8 ++++---- src/app/api/mobile/user/profile/route.ts | 2 +- src/app/api/version-app/route.ts | 2 +- 14 files changed, 34 insertions(+), 33 deletions(-) diff --git a/src/app/api/mobile/announcement/[id]/route.ts b/src/app/api/mobile/announcement/[id]/route.ts index 9c7710b..0ca038a 100644 --- a/src/app/api/mobile/announcement/[id]/route.ts +++ b/src/app/api/mobile/announcement/[id]/route.ts @@ -20,6 +20,7 @@ export async function GET(request: Request, context: { params: { id: string } }) const data = await prisma.announcement.count({ where: { id: id, + isActive: true, }, }); @@ -29,7 +30,7 @@ export async function GET(request: Request, context: { params: { id: string } }) success: false, message: "Gagal mendapatkan pengumuman, data tidak ditemukan", }, - { status: 404 } + { status: 200 } ); } @@ -173,7 +174,7 @@ export async function PUT(request: Request, context: { params: { id: string } }) success: false, message: "Edit pengumuman gagal, data tidak ditemukan", }, - { status: 404 } + { status: 200 } ); } diff --git a/src/app/api/mobile/banner/route.ts b/src/app/api/mobile/banner/route.ts index 160d4b6..5350995 100644 --- a/src/app/api/mobile/banner/route.ts +++ b/src/app/api/mobile/banner/route.ts @@ -11,7 +11,7 @@ export async function GET(request: Request) { const userMobile = searchParams.get("user") if (userMobile == "null" || userMobile == undefined || userMobile == "") { - return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } const user = await funGetUserById({ id: userMobile }) diff --git a/src/app/api/mobile/discussion-general/[id]/route.ts b/src/app/api/mobile/discussion-general/[id]/route.ts index fb2ea1b..19b4656 100644 --- a/src/app/api/mobile/discussion-general/[id]/route.ts +++ b/src/app/api/mobile/discussion-general/[id]/route.ts @@ -19,7 +19,7 @@ export async function GET(request: Request, context: { params: { id: string } }) const user = await funGetUserById({ id: String(userMobile) }) if (user.id == "null" || user.id == undefined || user.id == "") { - return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } const cek = await prisma.discussion.count({ @@ -29,7 +29,7 @@ export async function GET(request: Request, context: { params: { id: string } }) }) if (cek == 0) { - return NextResponse.json({ success: false, message: "Gagal mendapatkan diskusi, data tidak ditemukan" }, { status: 404 }); + return NextResponse.json({ success: false, message: "Gagal mendapatkan diskusi, data tidak ditemukan" }, { status: 200 }); } if (kategori == "detail") { diff --git a/src/app/api/mobile/discussion-general/route.ts b/src/app/api/mobile/discussion-general/route.ts index b890761..875d76d 100644 --- a/src/app/api/mobile/discussion-general/route.ts +++ b/src/app/api/mobile/discussion-general/route.ts @@ -15,7 +15,7 @@ export async function GET(request: Request) { const { searchParams } = new URL(request.url); const user = searchParams.get("user") if (user == "null" || user == undefined || user == "") { - return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } const userMobile = await funGetUserById({ id: user }) diff --git a/src/app/api/mobile/discussion/[id]/route.ts b/src/app/api/mobile/discussion/[id]/route.ts index b131309..33de9f9 100644 --- a/src/app/api/mobile/discussion/[id]/route.ts +++ b/src/app/api/mobile/discussion/[id]/route.ts @@ -31,7 +31,7 @@ export async function GET(request: Request, context: { params: { id: string } }) success: false, message: "Gagal mendapatkan diskusi, data tidak ditemukan", }, - { status: 404 } + { status: 200 } ); } @@ -137,7 +137,7 @@ export async function DELETE(request: Request, context: { params: { id: string } }); if (data == 0) { - return NextResponse.json({ success: false, message: "Gagal mendapatkan diskusi, data tidak ditemukan" }, { status: 404 }); + return NextResponse.json({ success: false, message: "Gagal mendapatkan diskusi, data tidak ditemukan" }, { status: 200 }); } const result = await prisma.divisionDisscussion.update({ diff --git a/src/app/api/mobile/discussion/route.ts b/src/app/api/mobile/discussion/route.ts index 3003002..663b00b 100644 --- a/src/app/api/mobile/discussion/route.ts +++ b/src/app/api/mobile/discussion/route.ts @@ -35,7 +35,7 @@ export async function GET(request: Request) { }) if (cekDivision == 0) { - return NextResponse.json({ success: false, message: "Gagal mendapatkan divisi, data tidak ditemukan" }, { status: 404 }); + return NextResponse.json({ success: false, message: "Gagal mendapatkan divisi, data tidak ditemukan" }, { status: 200 }); } const data = await prisma.divisionDisscussion.findMany({ @@ -121,7 +121,7 @@ export async function POST(request: Request) { }) if (cekDivision == 0) { - return NextResponse.json({ success: false, message: "Gagal mendapatkan divisi, data tidak ditemukan" }, { status: 404 }); + return NextResponse.json({ success: false, message: "Gagal mendapatkan divisi, data tidak ditemukan" }, { status: 200 }); } const data = await prisma.divisionDisscussion.create({ diff --git a/src/app/api/mobile/group/[id]/route.ts b/src/app/api/mobile/group/[id]/route.ts index 106a238..4a418bc 100644 --- a/src/app/api/mobile/group/[id]/route.ts +++ b/src/app/api/mobile/group/[id]/route.ts @@ -12,7 +12,7 @@ export async function GET(request: Request, context: { params: { id: string } }) const userMobile = searchParams.get("user") if (userMobile == "null" || userMobile == undefined || userMobile == "") { - return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } const { id } = context.params; @@ -28,7 +28,7 @@ export async function GET(request: Request, context: { params: { id: string } }) success: false, message: "Gagal mendapatkan grup, data tidak ditemukan", }, - { status: 404 } + { status: 200 } ); } @@ -52,7 +52,7 @@ export async function DELETE(request: Request, context: { params: { id: string } const { isActive, user } = (await request.json()); if (user == "null" || user == undefined || user == "") { - return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } const userLogin = await funGetUserById({ id: user }) @@ -68,7 +68,7 @@ export async function DELETE(request: Request, context: { params: { id: string } success: false, message: "Edit grup gagal, data tidak ditemukan", }, - { status: 404 } + { status: 200 } ); } @@ -98,7 +98,7 @@ export async function PUT(request: Request, context: { params: { id: string } }) const { name, user } = (await request.json()); if (user == "null" || user == undefined || user == "") { - return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } const data = await prisma.group.count({ @@ -113,7 +113,7 @@ export async function PUT(request: Request, context: { params: { id: string } }) success: false, message: "Edit grup gagal, data tidak ditemukan", }, - { status: 404 } + { status: 200 } ); } diff --git a/src/app/api/mobile/group/route.ts b/src/app/api/mobile/group/route.ts index 95944b2..b0266f1 100644 --- a/src/app/api/mobile/group/route.ts +++ b/src/app/api/mobile/group/route.ts @@ -11,7 +11,7 @@ export async function GET(request: Request) { const userMobile = searchParams.get("user") if (userMobile == "null" || userMobile == undefined || userMobile == "") { - return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } const user = await funGetUserById({ id: userMobile }) @@ -51,7 +51,7 @@ export async function POST(request: Request) { const { name, user } = (await request.json()); if (user == "null" || user == undefined || user == "") { - return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } const userMobile = await funGetUserById({ id: user }) diff --git a/src/app/api/mobile/home/search/route.ts b/src/app/api/mobile/home/search/route.ts index 5caacb6..83c5ef7 100644 --- a/src/app/api/mobile/home/search/route.ts +++ b/src/app/api/mobile/home/search/route.ts @@ -11,7 +11,7 @@ export async function GET(request: Request) { const userMobile = searchParams.get("user") if (userMobile == "null" || userMobile == undefined || userMobile == "") { - return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } const userId = await funGetUserById({ id: userMobile }) diff --git a/src/app/api/mobile/position/[id]/route.ts b/src/app/api/mobile/position/[id]/route.ts index 7655611..a51cdc2 100644 --- a/src/app/api/mobile/position/[id]/route.ts +++ b/src/app/api/mobile/position/[id]/route.ts @@ -11,7 +11,7 @@ export async function GET(request: Request, context: { params: { id: string } }) const { id } = context.params; if (userMobile == "null" || userMobile == undefined || userMobile == "") { - return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } const data = await prisma.position.findUnique({ @@ -30,7 +30,7 @@ export async function GET(request: Request, context: { params: { id: string } }) success: false, message: "Gagal mendapatkan jabatan, data tidak ditemukan", }, - { status: 404 } + { status: 200 } ); } @@ -55,7 +55,7 @@ export async function DELETE(request: Request, context: { params: { id: string } const { isActive, user } = (await request.json()); if (user == "null" || user == undefined || user == "") { - return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } const data = await prisma.position.count({ @@ -104,7 +104,7 @@ export async function PUT(request: Request, context: { params: { id: string } }) const { name, idGroup, user } = await request.json(); if (user == "null" || user == undefined || user == "") { - return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } const cek = await prisma.position.count({ diff --git a/src/app/api/mobile/position/route.ts b/src/app/api/mobile/position/route.ts index eeec356..3d52fdd 100644 --- a/src/app/api/mobile/position/route.ts +++ b/src/app/api/mobile/position/route.ts @@ -16,7 +16,7 @@ export async function GET(request: Request) { const userMobile = searchParams.get("user") if (userMobile == "null" || userMobile == undefined || userMobile == "") { - return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } const user = await funGetUserById({ id: userMobile }) @@ -35,7 +35,7 @@ export async function GET(request: Request) { }) if (cek == 0) { - return NextResponse.json({ success: false, message: "Gagal mendapatkan jabatan, data tidak ditemukan", }, { status: 404 }); + return NextResponse.json({ success: false, message: "Gagal mendapatkan jabatan, data tidak ditemukan", }, { status: 200 }); } const filter = await prisma.group.findUnique({ @@ -93,7 +93,7 @@ export async function POST(request: Request) { const { name, idGroup, user } = await request.json(); if (user == "null" || user == undefined || user == "") { - return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } const userMobile = await funGetUserById({ id: user }) @@ -131,7 +131,7 @@ export async function POST(request: Request) { } else { return NextResponse.json( { success: false, message: "Jabatan sudah ada" }, - { status: 400 } + { status: 200 } ); } diff --git a/src/app/api/mobile/user/[id]/route.ts b/src/app/api/mobile/user/[id]/route.ts index 0fffb77..bcaf08a 100644 --- a/src/app/api/mobile/user/[id]/route.ts +++ b/src/app/api/mobile/user/[id]/route.ts @@ -87,7 +87,7 @@ export async function DELETE(request: Request, context: { params: { id: string } const { isActive, user } = (await request.json()); if (user == "null" || user == undefined || user == "") { - return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } const data = await prisma.user.count({ @@ -102,7 +102,7 @@ export async function DELETE(request: Request, context: { params: { id: string } success: false, message: "Gagal mendapatkan anggota, data tidak ditemukan", }, - { status: 404 } + { status: 200 } ); } @@ -158,7 +158,7 @@ export async function PUT(request: Request, context: { params: { id: string } }) } = JSON.parse(data as string) if (user == "null" || user == undefined || user == "") { - return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } const cekNIK = await prisma.user.count({ @@ -247,7 +247,7 @@ export async function PUT(request: Request, context: { params: { id: string } }) { status: 200 } ); } else { - return Response.json({ success: false, message: "Anggota sudah ada" }, { status: 400 }); + return Response.json({ success: false, message: "Anggota sudah ada" }, { status: 200 }); } } catch (error) { console.error(error); diff --git a/src/app/api/mobile/user/profile/route.ts b/src/app/api/mobile/user/profile/route.ts index 8db6104..5996e02 100644 --- a/src/app/api/mobile/user/profile/route.ts +++ b/src/app/api/mobile/user/profile/route.ts @@ -11,7 +11,7 @@ export async function GET(request: Request) { try { const user = await funGetUserByCookies() if (user.id == undefined) { - return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } const data = await prisma.user.findUnique({ where: { diff --git a/src/app/api/version-app/route.ts b/src/app/api/version-app/route.ts index ba17ddf..4fccbfa 100644 --- a/src/app/api/version-app/route.ts +++ b/src/app/api/version-app/route.ts @@ -2,7 +2,7 @@ import { NextResponse } from "next/server"; export async function GET(request: Request) { try { - return NextResponse.json({ success: true, version: "2.0.9", tahap: "beta", update: "-api mobile; -login tanpa otp (mobile app); -tambah laporan pada project dan tugas divisi; -tambah upload link pada project dan tugas divisi; -tambah detail tanggal dan jam pada project dan tugas divisi; -api jenna ai; -privacy policy" }, { status: 200 }); + return NextResponse.json({ success: true, version: "2.1.0", tahap: "beta", update: "-api mobile; -login tanpa otp (mobile app); -tambah laporan pada project dan tugas divisi; -tambah upload link pada project dan tugas divisi; -tambah detail tanggal dan jam pada project dan tugas divisi; -api jenna ai; -privacy policy" }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, version: "Gagal mendapatkan version, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); From 3ab2566a8973629ab63c710252bb0be7dd73520c Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Mon, 27 Oct 2025 10:32:54 +0800 Subject: [PATCH 16/16] update --- src/app/api/mobile/discussion-general/[id]/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/api/mobile/discussion-general/[id]/route.ts b/src/app/api/mobile/discussion-general/[id]/route.ts index 19b4656..a1b536f 100644 --- a/src/app/api/mobile/discussion-general/[id]/route.ts +++ b/src/app/api/mobile/discussion-general/[id]/route.ts @@ -8,7 +8,7 @@ import { NextResponse } from "next/server"; // GET ONE DETAIL DISKUSI UMUM -export async function GET(request: Request, context: { params: { id: string } }) { +export async function GET(request : Request, context: { params: { id: string } }) { try { let dataFix const { id } = context.params