search, filter & paginate sites table

This commit is contained in:
Fred KISSIE
2026-01-31 03:02:39 +01:00
parent 066305b095
commit cda6b67bef
6 changed files with 223 additions and 37 deletions

View File

@@ -103,7 +103,12 @@ const listSitesSchema = z.object({
.enum(["megabytesIn", "megabytesOut"])
.optional()
.catch(undefined),
order: z.enum(["asc", "desc"]).optional().default("asc").catch("asc")
order: z.enum(["asc", "desc"]).optional().default("asc").catch("asc"),
online: z
.enum(["true", "false"])
.transform((v) => v === "true")
.optional()
.catch(undefined)
});
function querySitesBase() {
@@ -172,7 +177,6 @@ export async function listSites(
)
);
}
const { pageSize, page, query, sort_by, order } = parsedQuery.data;
const parsedParams = listSitesParamsSchema.safeParse(req.params);
if (!parsedParams.success) {
@@ -215,6 +219,9 @@ export async function listSites(
.where(eq(sites.orgId, orgId));
}
const { pageSize, page, query, sort_by, order, online } =
parsedQuery.data;
const accessibleSiteIds = accessibleSites.map((site) => site.siteId);
const baseQuery = querySitesBase();
@@ -231,6 +238,9 @@ export async function listSites(
)
);
}
if (typeof online !== "undefined") {
conditions = and(conditions, eq(sites.online, online));
}
const countQuery = db
.select({ count: count() })