import { fail, redirect } from '@sveltejs/kit'; import { randomUUID } from 'node:crypto'; import type { Actions, PageServerLoad } from './$types'; import { requireUser } from '#lib/server/auth.js'; import { listPieces, setPieceArchived, setPieceDeleted } from '#lib/server/content.js'; import { duplicateCompletedShow, listShows } from '#lib/server/shows.js'; export const load: PageServerLoad = ({ locals }) => { requireUser(locals.user); return { completedShows: listShows(['completed']), duplicateCommandId: randomUUID(), pieces: listPieces({ statuses: ['archived'] }), deletedPieces: listPieces({ statuses: ['inbox', 'preparing', 'ready', 'archived'], deleted: true }) }; }; export const actions = { restore: async ({ locals, request }) => { requireUser(locals.user); const data = await request.formData(); try { setPieceArchived(String(data.get('pieceId') || ''), Number(data.get('revision')), false); return { success: 'Piece wurde in seinen vorherigen Bereich zurückgelegt.' }; } catch { return fail(409, { error: 'Das Piece wurde inzwischen geändert. Bitte Seite neu laden.' }); } }, restoreDeleted: async ({ locals, request }) => { requireUser(locals.user); const data = await request.formData(); try { setPieceDeleted(String(data.get('pieceId') || ''), Number(data.get('revision')), false); return { success: 'Gelöschtes Piece wurde wiederhergestellt.' }; } catch { return fail(409, { error: 'Das Piece wurde inzwischen geändert. Bitte Seite neu laden.' }); } }, duplicateShow: async ({ locals, request }) => { requireUser(locals.user); const data = await request.formData(); try { const duplicate = duplicateCompletedShow( String(data.get('showId') || ''), String(data.get('commandId') || '') ); redirect(303, `/sendungen/${duplicate.id}`); } catch (cause) { if (cause && typeof cause === 'object' && 'status' in cause) throw cause; return fail(400, { error: 'Die Sendung konnte nicht dupliziert werden.' }); } } } satisfies Actions;