48 lines
1.6 KiB
TypeScript
48 lines
1.6 KiB
TypeScript
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(<Application>{ id, candidateStatement });
|
|
redirect(301, `/postings`);
|
|
}
|
|
};
|