diff --git a/src/app/api/monitoring/[[...slug]]/route.ts b/src/app/api/monitoring/[[...slug]]/route.ts index b65f1af..80333a0 100644 --- a/src/app/api/monitoring/[[...slug]]/route.ts +++ b/src/app/api/monitoring/[[...slug]]/route.ts @@ -1061,37 +1061,31 @@ const MonitoringServer = new Elysia({ prefix: "/api/monitoring" }) } ) .get("/log-all-villages", async ({ query, set }) => { - const { page = 1, search } = query; + const { page = 1, search, action, idVillage, dateFrom, dateTo } = query; const pageNum = Number(page) || 1; const take = 15; const skip = (pageNum - 1) * take; + const whereClause = { + ...(action && { action: action.toUpperCase() }), + ...(idVillage && { User: { idVillage } }), + ...(dateFrom || dateTo) && { + createdAt: { + ...(dateFrom && { gte: new Date(dateFrom) }), + ...(dateTo && { lte: new Date(new Date(dateTo).setHours(23, 59, 59, 999)) }), + }, + }, + ...(search && { + OR: [ + { User: { name: { contains: search, mode: "insensitive" as const } } }, + { User: { Village: { name: { contains: search, mode: "insensitive" as const } } } }, + ], + }), + }; + try { const dataLog = await prisma.userLog.findMany({ - where: { - ...(search && { - OR: [ - { - User: { - name: { - contains: search, - mode: "insensitive", - }, - }, - }, - { - User: { - Village: { - name: { - contains: search, - mode: "insensitive", - }, - }, - }, - }, - ], - }), - }, + where: whereClause, select: { id: true, createdAt: true, @@ -1115,32 +1109,7 @@ const MonitoringServer = new Elysia({ prefix: "/api/monitoring" }) take, }); - const total = await prisma.userLog.count({ - where: { - ...(search && { - OR: [ - { - User: { - name: { - contains: search, - mode: "insensitive", - }, - }, - }, - { - User: { - Village: { - name: { - contains: search, - mode: "insensitive", - }, - }, - }, - }, - ], - }), - }, - }); + const total = await prisma.userLog.count({ where: whereClause }); const result = dataLog.map((item) => ({ id: item.id, @@ -1175,12 +1144,15 @@ const MonitoringServer = new Elysia({ prefix: "/api/monitoring" }) { query: t.Object({ page: t.Optional(t.String({ description: "Halaman" })), - search: t.Optional(t.String({ description: "Pencarian" })), + search: t.Optional(t.String({ description: "Pencarian nama user atau desa" })), + action: t.Optional(t.String({ description: "Filter jenis aksi: LOGIN | LOGOUT | CREATE | UPDATE | DELETE" })), + idVillage: t.Optional(t.String({ description: "Filter berdasarkan ID desa" })), + dateFrom: t.Optional(t.String({ description: "Tanggal mulai (ISO 8601, e.g. 2026-05-01)" })), + dateTo: t.Optional(t.String({ description: "Tanggal akhir (ISO 8601, e.g. 2026-05-31)" })), }), detail: { summary: "Log Villages", - description: - "Mendapatkan data log aktivitas desa berdasarkan halaman dan pencarian", + description: "Mendapatkan data log aktivitas desa dengan filter aksi, desa, rentang tanggal, pencarian, dan paginasi", tags: ["log-activity"], }, }