diff --git a/src/app/api/monitoring/[[...slug]]/route.ts b/src/app/api/monitoring/[[...slug]]/route.ts index 8845e15..ee629c8 100644 --- a/src/app/api/monitoring/[[...slug]]/route.ts +++ b/src/app/api/monitoring/[[...slug]]/route.ts @@ -1,7 +1,8 @@ +import formatDateTime from "@/lib/formatDateTime"; import { prisma } from "@/module/_global"; import cors from "@elysiajs/cors"; import { swagger } from "@elysiajs/swagger"; -import Elysia from "elysia"; +import Elysia, { t } from "elysia"; import _ from "lodash"; import moment from "moment"; import "moment/locale/id"; @@ -225,6 +226,71 @@ const MonitoringServer = new Elysia({ prefix: "/api/monitoring" }) }, } ) + .get( + "/get-villages", + async ({ query, set }) => { + const { search, page } = query; + const pageNum = Number(page ?? 1); + try { + const data = await prisma.village.findMany({ + where: { + isDummy: false, + ...(search && { name: { contains: search, mode: 'insensitive' } }) + }, + select: { + id: true, + name: true, + isActive: true, + createdAt: true, + User: { + where: { + idUserRole: "supadmin" + }, + select: { + name: true, + }, + take: 1, + }, + }, + skip: (pageNum - 1) * 10, + take: 10, + }) + + const result = data.map((village) => ({ + id: village.id, + name: village.name, + isActive: village.isActive, + createdAt: formatDateTime(village.createdAt), + perbekel: village.User[0]?.name || null, + })); + + return { + success: true, + message: "Berhasil mendapatkan data", + data: result, + }; + } catch (error) { + console.error("[villages] get-villages error:", error); + set.status = 500; + return { + success: false, + message: "Terjadi kesalahan pada server", + data: null, + }; + } + }, + { + query: t.Object({ + search: t.Optional(t.String({ description: "Kata kunci pencarian nama desa" })), + page: t.Optional(t.String({ description: "Halaman data (default: 1)" })), + }), + detail: { + summary: "Get Villages", + description: "Menu Villages - Mendapatkan semua data desa.", + tags: ["villages"], + }, + } + ) ; diff --git a/src/lib/formatDateTime.ts b/src/lib/formatDateTime.ts new file mode 100644 index 0000000..39d6aef --- /dev/null +++ b/src/lib/formatDateTime.ts @@ -0,0 +1,11 @@ +function formatDateTime(date: Date) { + return new Intl.DateTimeFormat('id-ID', { + hour: '2-digit', + minute: '2-digit', + day: '2-digit', + month: 'short', + year: 'numeric', + }).format(date); +} + +export default formatDateTime \ No newline at end of file