47 lines
2.0 KiB
TypeScript
47 lines
2.0 KiB
TypeScript
import { blobSize } from '$lib/server/db/file-blobs.js';
|
|
import { json, error } from '@sveltejs/kit';
|
|
import { db } from '$lib/server/db/index.js';
|
|
import { getDeployment } from '$lib/server/provisioning/index.js';
|
|
|
|
export async function GET({ params, url }: { params: { id: string }; url?: URL }) {
|
|
const lifecycle = getDeployment(params.id, { events: url?.searchParams.get('events') === 'recent' ? 'recent' : 'all' });
|
|
if (lifecycle) return json(lifecycle);
|
|
const dep = db()
|
|
.prepare('SELECT * FROM deployments WHERE id = ?')
|
|
.get(params.id) as Record<string, unknown> | undefined;
|
|
if (!dep) throw error(404, 'deployment not found');
|
|
|
|
const servers = db()
|
|
.prepare('SELECT * FROM deployment_servers WHERE deployment_id = ? ORDER BY server')
|
|
.all(params.id);
|
|
|
|
// Don't ship blobs in the summary — the client asks for a single file when
|
|
// it opens the diff viewer.
|
|
const files = db()
|
|
.prepare(
|
|
`SELECT id, server, verb, rel_path, sha256_before, sha256_after,
|
|
${blobSize('content_before_hash')} AS size_before,
|
|
${blobSize('content_after_hash')} AS size_after
|
|
FROM deployment_files
|
|
WHERE deployment_id = ?
|
|
ORDER BY server, rel_path`
|
|
)
|
|
.all(params.id);
|
|
|
|
const scripts = db()
|
|
.prepare(
|
|
`SELECT ds.script_id, s.name AS script_name, s.target_rel_path,
|
|
ds.script_version_id, sv.version AS script_version,
|
|
ds.prior_version_id, pv.version AS prior_version
|
|
FROM deployment_scripts ds
|
|
LEFT JOIN scripts s ON s.id = ds.script_id
|
|
LEFT JOIN script_versions sv ON sv.id = ds.script_version_id
|
|
LEFT JOIN script_versions pv ON pv.id = ds.prior_version_id
|
|
WHERE ds.deployment_id = ?
|
|
ORDER BY ds.script_id`
|
|
)
|
|
.all(params.id);
|
|
|
|
return json({ deployment: dep, servers, files, scripts });
|
|
}
|