From 3c0a5639b661e3391f9b96fc4a026107668f95bb Mon Sep 17 00:00:00 2001 From: amal Date: Thu, 9 Apr 2026 17:33:21 +0800 Subject: [PATCH] upd : api monitoring --- src/app/api/monitoring/[[...slug]]/route.ts | 31 ++++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/app/api/monitoring/[[...slug]]/route.ts b/src/app/api/monitoring/[[...slug]]/route.ts index 9526706..7ca0168 100644 --- a/src/app/api/monitoring/[[...slug]]/route.ts +++ b/src/app/api/monitoring/[[...slug]]/route.ts @@ -13,6 +13,7 @@ const MonitoringServer = new Elysia({ prefix: "/api/monitoring" }) .use(cors({ origin: "*", methods: ["GET", "POST", "OPTIONS"], + allowedHeaders: ["Content-Type", "Authorization"] })) .use(swagger({ path: "/docs", // Karena prefix instance adalah /api/monitoring, maka ini akan diakses di /api/monitoring/docs @@ -179,6 +180,11 @@ const MonitoringServer = new Elysia({ prefix: "/api/monitoring" }) ) .get("/comparison-activity", async ({ query, set }) => { try { + const villages = await prisma.village.findMany({ + where: { isDummy: false }, + select: { name: true }, + }); + const data = await prisma.$queryRaw` SELECT v."name", @@ -192,9 +198,15 @@ const MonitoringServer = new Elysia({ prefix: "/api/monitoring" }) ORDER BY total_logs DESC; ` as any[]; - const result = data.map(item => ({ - village: item.name, - activity: Number(item.total_logs) + const logMap: Record = {}; + + data.forEach((item) => { + logMap[item.name] = Number(item.total_logs); + }); + + const result = villages.map((v) => ({ + village: v.name, + activity: logMap[v.name] || 0, })); @@ -309,6 +321,13 @@ const MonitoringServer = new Elysia({ prefix: "/api/monitoring" }) take: 10, }) + const count = await prisma.village.count({ + where: { + isDummy: false, + ...(search && { name: { contains: search, mode: 'insensitive' } }) + }, + }) + const result = data.map((village) => ({ id: village.id, name: village.name, @@ -321,6 +340,9 @@ const MonitoringServer = new Elysia({ prefix: "/api/monitoring" }) success: true, message: "Berhasil mendapatkan data", data: result, + totalPage: Math.ceil(count / 10), + currentPage: pageNum, + totalData: count, }; } catch (error) { console.error("[villages] get-villages error:", error); @@ -1009,7 +1031,7 @@ const MonitoringServer = new Elysia({ prefix: "/api/monitoring" }) .get("/user", async ({ query, set }) => { const { page = 1, search } = query; const pageNum = Number(page) || 1; - const take = 25; + const take = 15; const skip = (pageNum - 1) * take; try { @@ -1349,3 +1371,4 @@ const MonitoringServer = new Elysia({ prefix: "/api/monitoring" }) export const GET = MonitoringServer.handle; export const POST = MonitoringServer.handle; +export const OPTIONS = MonitoringServer.handle;