import { type Actions, error, fail, redirect } from '@sveltejs/kit'; import type { PageServerLoad } from './$types'; import { editApplication, getEditApplicationPageData } from '$lib/db/index.server'; import { getUserPerms } from '$lib/index.server'; import { PERMISSIONS } from '$lib/consts'; import type { Application } from '$lib/types'; export const load: PageServerLoad = async ({ url, cookies }) => { if (!url.searchParams.has('id')) { error(400, 'Missing required parameter: id'); } // Permission check (apply perm) const id = parseInt(url.searchParams.get('id')!); const perms = getUserPerms(cookies); if (perms >= 0 && (perms & PERMISSIONS.APPLY_FOR_JOBS) > 0) { return await getEditApplicationPageData(id); } error(403, 'Unauthorized'); }; export const actions: Actions = { // Application submission submit: async ({ request, cookies, url }) => { // Permission check (apply perm) if (!((getUserPerms(cookies) & PERMISSIONS.APPLY_FOR_JOBS) > 0)) { return fail(403, { errorMessage: 'Unauthorized' }); } const data = await request.formData(); const candidateStatement = data.get('candidateStatement')?.toString().trim(); // Statement data validation if (!candidateStatement || candidateStatement === '') { return fail(400, { errorMessage: 'Candidate statement is required' }); } // Push to DB and redirect if (!url.searchParams.has('id')) { error(400, 'Missing required parameter: id'); } const id: number = parseInt(url.searchParams.get('id')!); await editApplication({ id, candidateStatement }); redirect(301, `/postings`); } };