Implement the approved UX review across Fleet, Betas, Library, deployments, and Settings. Add reviewed promotion and reconciliation plans, atomic queued-removal cancellation, recoverable beta drafts and launch inputs, accessible controls, and mobile improvements. Validated with 473 tests, a clean typecheck, production build, and isolated desktop/mobile browser walkthroughs. Include the review and implementation coverage notes.
40 lines
2.1 KiB
TypeScript
40 lines
2.1 KiB
TypeScript
import { json } from '@sveltejs/kit';
|
|
import { db } from '$lib/server/db/index.js';
|
|
import { getBeta, listBetaServers, listBetaScripts } from '$lib/server/fleet/beta.js';
|
|
import { getScript, getVersion } from '$lib/server/fleet/scripts.js';
|
|
import { testView } from '$lib/server/fleet/beta-tests.js';
|
|
|
|
function parseId(raw: string): number | null {
|
|
const n = Number.parseInt(raw, 10);
|
|
return Number.isFinite(n) ? n : null;
|
|
}
|
|
|
|
export async function GET({ params }: { params: { id: string } }) {
|
|
const id = parseId(params.id);
|
|
if (id === null) return json({ ok: false, error: 'bad id' }, { status: 400 });
|
|
const beta = getBeta(id);
|
|
if (!beta) return json({ ok: false, error: 'not found' }, { status: 404 });
|
|
|
|
const scripts = listBetaScripts(id).map((bs) => {
|
|
const script = getScript(bs.script_id);
|
|
const version = getVersion(bs.script_version_id);
|
|
return {
|
|
id: bs.script_id,
|
|
name: script?.name ?? '(deleted)',
|
|
target_rel_path: script?.target_rel_path ?? '',
|
|
kind: script?.kind ?? bs.kind ?? 'script',
|
|
version: version
|
|
? { id: version.id, version: version.version, release_version: version.release_version, sha256: version.sha256 }
|
|
: null
|
|
};
|
|
});
|
|
const servers = listBetaServers(id);
|
|
|
|
const events = db().prepare('SELECT id, created_at, message FROM beta_events WHERE beta_id = ? ORDER BY id').all(id);
|
|
const rollout = db().prepare("SELECT id FROM deployments WHERE beta_id = ? AND action = 'promote' ORDER BY started_at DESC LIMIT 1").get(id) as { id: string } | undefined;
|
|
const promotion = rollout ? { ...rollout,
|
|
pending: (db().prepare("SELECT COUNT(*) n FROM deployment_servers WHERE deployment_id = ? AND restart_state NOT IN ('done','failed','cancelled')").get(rollout.id) as { n: number }).n,
|
|
failed: (db().prepare("SELECT COUNT(*) n FROM deployment_servers WHERE deployment_id = ? AND restart_state = 'failed'").get(rollout.id) as { n: number }).n } : null;
|
|
return json({ beta, scripts, servers, events, test: testView(id), promotion });
|
|
}
|