fix: align moments range and failed filter

This commit is contained in:
William Valentin
2026-02-05 09:17:16 -08:00
parent 523460f639
commit d93caedb31
2 changed files with 9 additions and 2 deletions

View File

@@ -9,6 +9,7 @@ const querySchema = z
.object({
start: z.string().datetime().optional(),
end: z.string().datetime().optional(),
includeFailed: z.coerce.number().int().optional(),
limit: z.coerce.number().int().positive().max(2000).default(1000),
})
.strict();
@@ -18,6 +19,7 @@ export async function GET(request: Request): Promise<Response> {
const parsed = querySchema.safeParse({
start: url.searchParams.get("start") ?? undefined,
end: url.searchParams.get("end") ?? undefined,
includeFailed: url.searchParams.get("includeFailed") ?? undefined,
limit: url.searchParams.get("limit") ?? undefined,
});
@@ -31,6 +33,7 @@ export async function GET(request: Request): Promise<Response> {
const query = parsed.data;
const start = query.start ? new Date(query.start) : null;
const end = query.end ? new Date(query.end) : null;
const includeFailed = query.includeFailed === 1;
const db = getDb();
const rows = await db<
@@ -44,7 +47,7 @@ export async function GET(request: Request): Promise<Response> {
where capture_ts_utc is not null
and (${start}::timestamptz is null or capture_ts_utc >= ${start}::timestamptz)
and (${end}::timestamptz is null or capture_ts_utc < ${end}::timestamptz)
and status <> 'failed'
and (${includeFailed}::boolean is true or status <> 'failed')
order by capture_ts_utc asc, id asc
limit ${query.limit}
`;

View File

@@ -204,10 +204,14 @@ export function TimelineTree(props: {
setMomentsError(null);
if (!rows || rows.length === 0) return;
const start = rows[0]?.group_ts ?? null;
const end = rows[rows.length - 1]?.group_ts ?? null;
const last = rows[rows.length - 1]?.group_ts ?? null;
const end = last
? new Date(new Date(last).getTime() + 24 * 60 * 60 * 1000).toISOString()
: null;
const params = new URLSearchParams();
if (start) params.set("start", start);
if (end) params.set("end", end);
params.set("includeFailed", "1");
const res = await fetch(`/api/moments?${params.toString()}`, {
cache: "no-store",
});