From bef4dd1969c3c64cdde43f9f8ad1c0a5df5bf64e Mon Sep 17 00:00:00 2001 From: amal Date: Tue, 16 Sep 2025 17:31:46 +0800 Subject: [PATCH] upd: api ai Deskripsi: - api ai get list discussion general - api ai detail discussion general nb : belm selesai No Issues --- .../api/ai/discussion-general/[id]/route.ts | 111 ++++++++++++++++++ src/app/api/ai/discussion-general/route.ts | 92 +++++++++++++++ 2 files changed, 203 insertions(+) create mode 100644 src/app/api/ai/discussion-general/[id]/route.ts create mode 100644 src/app/api/ai/discussion-general/route.ts diff --git a/src/app/api/ai/discussion-general/[id]/route.ts b/src/app/api/ai/discussion-general/[id]/route.ts new file mode 100644 index 0000000..3df7047 --- /dev/null +++ b/src/app/api/ai/discussion-general/[id]/route.ts @@ -0,0 +1,111 @@ +import { prisma } from "@/module/_global"; +import _ from "lodash"; +import moment from "moment"; +import "moment/locale/id"; +import { NextResponse } from "next/server"; + + +// GET ONE DETAIL DISKUSI UMUM +export async function GET(request: Request, context: { params: { id: string } }) { + try { + let dataFix + const { id } = context.params + const { searchParams } = new URL(request.url); + const kategori = searchParams.get("cat"); + + const cek = await prisma.discussion.count({ + where: { + id, + } + }) + + if (cek == 0) { + return NextResponse.json({ success: false, message: "Gagal mendapatkan diskusi, data tidak ditemukan" }, { status: 404 }); + } + + if (kategori == "detail") { + const data = await prisma.discussion.findUnique({ + where: { + id, + }, + select: { + isActive: true, + id: true, + title: true, + idGroup: true, + desc: true, + status: true, + createdAt: true, + } + }) + + dataFix = { + id: data?.id, + isActive: data?.isActive, + idGroup: data?.idGroup, + title: data?.title, + desc: data?.desc, + status: data?.status, + createdAt: moment(data?.createdAt).format("ll"), + } + + } else if (kategori == "komentar") { + const data = await prisma.discussionComment.findMany({ + where: { + idDiscussion: id, + isActive: true + }, + select: { + id: true, + comment: true, + createdAt: true, + idUser: true, + User: { + select: { + name: true, + img: true + } + } + } + }) + + dataFix = data.map((v: any) => ({ + ..._.omit(v, ["createdAt", "User",]), + createdAt: moment(v.createdAt).format("lll").replace('pukul', ''), + username: v.User.name, + img: v.User.img + })) + + } else if (kategori == "anggota") { + const data = await prisma.discussionMember.findMany({ + where: { + idDiscussion: id, + isActive: true + }, + select: { + idUser: true, + User: { + select: { + name: true, + img: true + } + } + } + }) + + dataFix = data.map((v: any) => ({ + ..._.omit(v, ["User",]), + name: v.User.name, + img: v.User.img + })) + } + + + return NextResponse.json({ success: true, message: "Berhasil mendapatkan diskusi", data: dataFix }, { status: 200 }); + + + } catch (error) { + console.error(error); + return NextResponse.json({ success: false, message: "Gagal mendapatkan diskusi, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); + } +} diff --git a/src/app/api/ai/discussion-general/route.ts b/src/app/api/ai/discussion-general/route.ts new file mode 100644 index 0000000..1e26ea7 --- /dev/null +++ b/src/app/api/ai/discussion-general/route.ts @@ -0,0 +1,92 @@ +import { prisma } from "@/module/_global"; +import _ from "lodash"; +import "moment/locale/id"; +import { NextResponse } from "next/server"; + + +// GET ALL DISCUSSION GENERAL +export async function GET(request: Request) { + try { + const { searchParams } = new URL(request.url); + const idGroup = searchParams.get("group"); + const idVillage = searchParams.get("desa"); + const search = searchParams.get('search'); + const page = searchParams.get('page'); + const status = searchParams.get('status'); + const active = searchParams.get('active'); + const get = searchParams.get('get') + + + let getFix = 10; + if (get == null || get == undefined || get == "" || _.isNaN(Number(get))) { + getFix = 10; + } else { + getFix = Number(get); + } + + const dataSkip = page == null || page == undefined ? 0 : Number(page) * getFix - getFix; + + let kondisi: any = { + isActive: active == "false" ? false : true, + status: status == "close" ? 2 : 1, + idVillage: String(idVillage), + title: { + contains: (search == undefined || search == "null") ? "" : search, + mode: "insensitive" + }, + } + + if (idGroup != "null" && idGroup != undefined && idGroup != "") { + kondisi = { + ...kondisi, + idGroup: String(idGroup) + } + } + + + const data = await prisma.discussion.findMany({ + skip: dataSkip, + take: getFix, + where: kondisi, + orderBy: [ + { + status: 'desc' + }, + { + createdAt: 'desc' + } + ], + + select: { + id: true, + title: true, + desc: true, + status: true, + createdAt: true, + DiscussionComment: { + select: { + id: true, + } + }, + Group: { + select: { + name: true, + } + } + } + }); + + const fixData = data.map((v: any) => ({ + ..._.omit(v, ["DiscussionComment", "status", "Group"]), + totalKomentar: v.DiscussionComment.length, + status: v.status == 1 ? "Open" : "Close", + group: v.Group.name, + })) + + return NextResponse.json({ success: true, message: "Berhasil mendapatkan diskusi", data: fixData }, { status: 200 }); + + } catch (error) { + console.error(error); + return NextResponse.json({ success: false, message: "Gagal mendapatkan diskusi, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); + } +}