Complete provisioning job detail pages and lifecycle evidence
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
import { json, error } from '@sveltejs/kit';
|
||||
import { db } from '$lib/server/db/index.js';
|
||||
import { deploymentActivity } from '$lib/server/provisioning/index.js';
|
||||
|
||||
function integer(params: URLSearchParams, key: string): number | undefined {
|
||||
const raw = params.get(key);
|
||||
if (raw === null) return undefined;
|
||||
if (!/^\d+$/.test(raw)) error(400, `${key} must be a nonnegative integer.`);
|
||||
const value = Number(raw);
|
||||
if (!Number.isSafeInteger(value)) error(400, `${key} must be a nonnegative integer.`);
|
||||
return value;
|
||||
}
|
||||
|
||||
export function GET({ params, url }: { params: { id: string }; url: URL }) {
|
||||
if (!db().prepare('SELECT 1 FROM server_deployments WHERE id = ?').get(params.id)) error(404, 'Provisioning operation not found.');
|
||||
const order = url.searchParams.get('order') ?? 'newest';
|
||||
if (order !== 'newest' && order !== 'oldest') error(400, 'Choose newest or oldest activity order.');
|
||||
const query = url.searchParams.get('query') ?? '';
|
||||
if (query.length > 500) error(400, 'Activity search must be 500 characters or fewer.');
|
||||
const limit = integer(url.searchParams, 'limit');
|
||||
if (limit === 0) error(400, 'Activity limit must be at least 1.');
|
||||
return json(deploymentActivity(params.id, { order, query, limit,
|
||||
cursor: integer(url.searchParams, 'cursor'), watermark: integer(url.searchParams, 'watermark') }));
|
||||
}
|
||||
Reference in New Issue
Block a user