diff --git a/src/app/api/ai/announcement/[id]/route.ts b/src/app/api/ai/announcement/[id]/route.ts new file mode 100644 index 0000000..e301cc9 --- /dev/null +++ b/src/app/api/ai/announcement/[id]/route.ts @@ -0,0 +1,95 @@ +import { prisma } from "@/module/_global"; +import _ from "lodash"; +import { NextResponse } from "next/server"; + + +// GET ONE PENGUMUMAN, UNTUK TAMPIL DETAIL PENGUMUMAN +export async function GET(request: Request, context: { params: { id: string } }) { + try { + const { id } = context.params; + + const data = await prisma.announcement.count({ + where: { + id: id, + }, + }); + + if (data == 0) { + return NextResponse.json( + { + success: false, + message: "Gagal mendapatkan pengumuman, data tidak ditemukan", + }, + { status: 404 } + ); + } + + const announcement = await prisma.announcement.findUnique({ + where: { + id: id, + }, + select: { + id: true, + title: true, + desc: true, + }, + }); + + if (!announcement) { + return NextResponse.json( + { + success: false, + message: "Gagal mendapatkan pengumuman, data tidak ditemukan", + }, + { status: 404 } + ); + } + + let dataFix = { ...announcement, member: {} }; + + const announcementMember = await prisma.announcementMember.findMany({ + where: { + idAnnouncement: id, + }, + select: { + idGroup: true, + idDivision: true, + Group: { + select: { + name: true, + }, + }, + Division: { + select: { + name: true, + }, + }, + }, + }); + + const formatMember = announcementMember.map((v: any) => ({ + ..._.omit(v, ["Group", "Division"]), + idGroup: v.idGroup, + idDivision: v.idDivision, + group: v.Group.name, + division: v.Division.name + })) + + dataFix.member = formatMember + + return NextResponse.json( + { + success: true, + message: "Berhasil mendapatkan pengumuman", + data: dataFix, + }, + { status: 200 } + ); + + + + } catch (error) { + console.error(error); + return NextResponse.json({ success: false, message: "Gagal mendapatkan pengumuman, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); + } +} \ No newline at end of file diff --git a/src/app/api/ai/announcement/route.ts b/src/app/api/ai/announcement/route.ts new file mode 100644 index 0000000..15b27db --- /dev/null +++ b/src/app/api/ai/announcement/route.ts @@ -0,0 +1,54 @@ +import { prisma } from "@/module/_global"; +import _ from "lodash"; +import moment from "moment"; +import "moment/locale/id"; +import { NextResponse } from "next/server"; +export const dynamic = 'force-dynamic' + + + +// GET ALL PENGUMUMAN +export async function GET(request: Request) { + try { + const { searchParams } = new URL(request.url); + const judul = searchParams.get('q'); + const page = searchParams.get('p'); + const get = searchParams.get('get'); + const villageId = searchParams.get('desa'); + const dataSkip = page == null || page == undefined ? 0 : Number(page) * 10 - 10; + + let kondisi: any = { + idVillage: String(villageId), + isActive: true, + title: { + contains: (judul == undefined || judul == null) ? "" : judul, + mode: "insensitive" + } + } + + const announcements = await prisma.announcement.findMany({ + skip: dataSkip, + take: (get == null || get == undefined || get == "" || _.isNaN(Number(get))) ? 10 : Number(get), + where: kondisi, + select: { + id: true, + title: true, + desc: true, + createdAt: true, + }, + orderBy: { + createdAt: 'desc' + } + }); + + const allData = announcements.map((v: any) => ({ + ..._.omit(v, ["createdAt"]), + createdAt: moment(v.createdAt).format("ll") + })) + + return NextResponse.json({ success: true, message: "Berhasil mendapatkan pengumuman", data: allData, }, { status: 200 }); + } catch (error) { + console.error(error); + return NextResponse.json({ success: false, message: "Gagal mendapatkan pengumuman, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); + } +} \ No newline at end of file diff --git a/src/app/api/ai/banner/route.ts b/src/app/api/ai/banner/route.ts new file mode 100644 index 0000000..ccbefea --- /dev/null +++ b/src/app/api/ai/banner/route.ts @@ -0,0 +1,39 @@ +import { prisma } from "@/module/_global"; +import { NextResponse } from "next/server"; + + +// GET ALL BANNER +export async function GET(request: Request) { + try { + const { searchParams } = new URL(request.url); + const judul = searchParams.get('q'); + const page = searchParams.get('p'); + const get = searchParams.get('get'); + const villageId = searchParams.get('desa'); + const dataSkip = page == null || page == undefined ? 0 : Number(page) * 10 - 10; + + let kondisi: any = { + idVillage: String(villageId), + isActive: true, + title: { + contains: (judul == undefined || judul == null) ? "" : judul, + mode: "insensitive" + } + } + + const data = await prisma.bannerImage.findMany({ + where: { + isActive: true, + idVillage: String(villageId) + }, + orderBy: { + createdAt: 'desc' + } + }); + + return NextResponse.json({ success: true, message: "Berhasil mendapatkan banner", data }, { status: 200 }); + } catch (error) { + console.error(error); + return NextResponse.json({ success: false, message: "Gagal mendapatkan data banner, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); + } +} \ No newline at end of file diff --git a/src/app/api/version-app/route.ts b/src/app/api/version-app/route.ts index 92ada2d..19f756a 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: "1.8.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" }, { status: 200 }); + return NextResponse.json({ success: true, version: "1.9.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" }, { 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 });