three60/src/routes/(app)/survey/new/+page.server.ts
Markus Brueckner d6ad0d2ccd Survey editing
Closes #16
2025-01-07 22:09:11 +01:00

49 lines
No EOL
1.5 KiB
TypeScript

import type { Actions, PageServerLoad } from './$types';
import { error, redirect } from '@sveltejs/kit';
import { surveysTable } from '../../../../db/schema';
import { db } from '../../../../db';
import { fromFormData } from '$lib/survey';
import { addParticipant, addSkill, loadSurvey } from '../../../../db/survey';
export const load: PageServerLoad = async ({ url, locals }) => {
const baseSurveyId = url.searchParams.get('from');
if (baseSurveyId) {
const baseSurvey = await loadSurvey(parseInt(baseSurveyId), locals.userId ?? 0);
return baseSurvey;
}
return null;
}
export const actions = {
default: async (event) => {
const owner = event.locals.userId;
if (!owner) {
error(400, 'User is not logged in');
}
const formData = await event.request.formData();
const { participants, title, description, skills } = fromFormData(formData);
if (!title) {
error(400, 'Title is required');
}
if (skills.length === 0) {
error(400, 'At least one skill is required');
}
const ids = await db.insert(surveysTable).values({ title, description, owner }).$returningId();
const surveyId = ids[0].id;
for (const participant of participants) {
await addParticipant(surveyId, participant);
}
for (const skill of skills) {
await addSkill(surveyId, skill.title, skill.description);
}
redirect(303, `/survey/${surveyId}`);
}
} satisfies Actions;