fix: bound leadership dashboard filtering

This commit is contained in:
inman committed 2026-09-02 14:59:18 +08:00
1 parent d034f649c4
commit 3062ed5f04
8 files changed
+389 -175

No files matched your search

+27 -13
View File
@@ -186,7 +186,7 @@ const operationsDashboardQuerySchema = z.object({
business_route_id: z.string().trim().max(120).optional(),
status: z.enum(['all', 'active', 'completed', 'attention', 'failed', 'cancelled', 'archived']).default('all'),
search: z.string().trim().max(200).optional(),
limit: z.coerce.number().int().min(1).max(100).default(50),
limit: z.coerce.number().int().min(1).max(100).default(20),
offset: z.coerce.number().int().min(0).max(1_000_000).default(0)
});
@@ -1357,19 +1357,33 @@ export async function buildServer({
setAuthNoStore(reply);
const session = await requireLeadershipSession(request);
const query = operationsDashboardQuerySchema.parse(request.query || {});
return {
ok: true,
...(await tasks.listOperationsDashboard(contextFor(session, request), {
from: query.from,
to: query.to,
actorUserId: query.actor_user_id,
businessRouteId: query.business_route_id,
status: query.status,
search: query.search,
limit: query.limit,
offset: query.offset
}))
const controller = new AbortController();
const abortRequest = () => controller.abort();
const abortClosedReply = () => {
if (!reply.raw.writableEnded) abortRequest();
};
request.raw.once('aborted', abortRequest);
reply.raw.once('close', abortClosedReply);
if (request.raw.aborted) abortRequest();
try {
return {
ok: true,
...(await tasks.listOperationsDashboard(contextFor(session, request), {
from: query.from,
to: query.to,
actorUserId: query.actor_user_id,
businessRouteId: query.business_route_id,
status: query.status,
search: query.search,
limit: query.limit,
offset: query.offset,
signal: controller.signal
}))
};
} finally {
request.raw.off('aborted', abortRequest);
reply.raw.off('close', abortClosedReply);
}
});
app.get('/api/operations-dashboard/tasks/:taskId', async (request, reply) => {