feat: add village and date range filter on /log-all-villages endpoint

This commit is contained in:
2026-05-22 11:37:42 +08:00
parent d369a71eb6
commit 32dac32532

View File

@@ -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"],
},
}