import type { SQLiteError } from "bun:sqlite" import { fail, redirect } from '@sveltejs/kit'; import { toInt, parseDate, isTimeValidHHMM } from "$lib/util" import { get_user, User } from "$lib/server/database"; export async function load({ locals }) { return { records: locals.user.get_entries() }; } export const actions = { new_entry: async ({locals, request}) => { const ok = "ok"; const missing = "missing"; const invalid = "invalid"; const data = await request.formData(); let date = data.get("date"); let start = data.get("start"); let end = data.get("end"); let comment = data.get("comment"); let return_obj = { date : { status: ok, value: date }, start : { status: ok, value: start }, end : { status: ok, value: end }, comment : { status: ok, value: comment }, } if (date == null) { return_obj.date.status = missing; } else if (parseDate(date) == null) { return_obj.date.status = invalid; } if (start == null) { return_obj.start.status = missing; } else if (!isTimeValidHHMM(start)) { return_obj.start.status = invalid; } if (end == null) { return_obj.end.status = missing; } else if (!isTimeValidHHMM(end)) { return_obj.end.status = invalid; } console.log(return_obj); if (Object.keys(return_obj).some((v) => { return return_obj[v].status != ok; })) { return fail(400, { new_entry: return_obj }); } let res = locals.user.insert_entry(date, start, end, comment); if (!res) { return fail(500, { }) } return { new_entry: { success: true } }; }, edit_entry: async ({locals, request}) => { const ok = "ok"; const missing = "missing"; const invalid = "invalid"; const data = await request.formData(); let id = data.get("id"); let date = data.get("date"); let start = data.get("start"); let end = data.get("end"); let comment = data.get("comment"); let return_obj = { id: { status: ok, value: id, }, date : { status: ok, value: date }, start : { status: ok, value: start }, end : { status: ok, value: end }, comment : { status: ok, value: comment }, } if (id == null) { return_obj.id.status = missing; } else if (isNaN(toInt(id))) { return_obj.id.status = invalid; } if (date == null) { return_obj.date.status = missing; } else if (parseDate(date) == null) { return_obj.date.status = invalid; } if (start == null) { return_obj.start.status = missing; } else if (!isTimeValidHHMM(start)) { return_obj.start.status = invalid; } if (end == null) { return_obj.end.status = missing; } else if (!isTimeValidHHMM(end)) { return_obj.end.status = invalid; } if (Object.keys(return_obj).some((v) => { return return_obj[v].status != ok; })) { return fail(400, { edit_entry: return_obj }); } let current = locals.user.get_entry(id); if (!current) { return fail(404, { new_entry: return_obj }); } if (current.id == id && current.date == date && current.start == start && current.end == end && current.comment == comment) { return { success: false, edit_entry: { return_obj } } } let res = false; try { res = locals.user.update_entry(id, date, start, end, comment); } catch (e) { if (!(e instanceof SQLiteError)) { throw e; } } if (!res) { return fail(500, { }) } redirect(303, '/'); return { success: true }; }, }