feat: add village and date range filter on /log-all-villages endpoint
This commit is contained in:
@@ -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"],
|
||||
},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user