Files
dockhand/routes/api/schedules/executions/+server.ts
Jarek Krochmalski 62e3c6439e Initial commit
2025-12-28 21:16:03 +01:00

63 lines
2.3 KiB
TypeScript

/**
* Schedule Executions API - List execution history
*
* GET /api/schedules/executions - Returns paginated execution history
*
* Query params:
* - scheduleType: 'container_update' | 'git_stack_sync'
* - scheduleId: number
* - environmentId: number
* - status: 'queued' | 'running' | 'success' | 'failed' | 'skipped'
* - triggeredBy: 'cron' | 'webhook' | 'manual'
* - fromDate: ISO date string
* - toDate: ISO date string
* - limit: number (default 50)
* - offset: number (default 0)
*/
import { json } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
import {
getScheduleExecutions,
type ScheduleType,
type ScheduleTrigger,
type ScheduleStatus
} from '$lib/server/db';
export const GET: RequestHandler = async ({ url }) => {
try {
const scheduleType = url.searchParams.get('scheduleType') as ScheduleType | null;
const scheduleIdParam = url.searchParams.get('scheduleId');
const environmentIdParam = url.searchParams.get('environmentId');
const status = url.searchParams.get('status') as ScheduleStatus | null;
const statusesParam = url.searchParams.get('statuses');
const triggeredBy = url.searchParams.get('triggeredBy') as ScheduleTrigger | null;
const fromDate = url.searchParams.get('fromDate');
const toDate = url.searchParams.get('toDate');
const limitParam = url.searchParams.get('limit');
const offsetParam = url.searchParams.get('offset');
const filters: any = {};
if (scheduleType) filters.scheduleType = scheduleType;
if (scheduleIdParam) filters.scheduleId = parseInt(scheduleIdParam, 10);
if (environmentIdParam) {
filters.environmentId = environmentIdParam === 'null' ? null : parseInt(environmentIdParam, 10);
}
if (status) filters.status = status;
if (statusesParam) filters.statuses = statusesParam.split(',') as ScheduleStatus[];
if (triggeredBy) filters.triggeredBy = triggeredBy;
if (fromDate) filters.fromDate = fromDate;
if (toDate) filters.toDate = toDate;
if (limitParam) filters.limit = parseInt(limitParam, 10);
if (offsetParam) filters.offset = parseInt(offsetParam, 10);
const result = await getScheduleExecutions(filters);
return json(result);
} catch (error: any) {
console.error('Failed to get schedule executions:', error);
return json({ error: error.message }, { status: 500 });
}
};