import type { PageServerLoad, Actions } from "./$types"; import type { FileProperties } from "$lib/server/docstore" import { fail } from '@sveltejs/kit'; import { MONTHS, toInt, toFloat } from "$lib/util"; import { getEstimateFiles } from "$lib/server/docstore"; export const load: PageServerLoad = async ({ locals }) => { if (!locals.user) { return fail(403, { message: "Unauthorized user" }) } let estimates = locals.user.get_estimates(); let documents = await getEstimateFiles(locals.user); let estimates_grouped: Map> = new Map(); Map.groupBy(estimates, (v) => v.year).forEach((value, key, _) => { let quarters = new Map() Map.groupBy(value, (v) => v.quarter).forEach((_value, _key, _) => { let months = _value.map((v) => [ { month: MONTHS[(v.quarter - 1) * 3 + 2], estimate: v.estimate_2 }, { month: MONTHS[(v.quarter - 1) * 3 + 1], estimate: v.estimate_1 }, { month: MONTHS[(v.quarter - 1) * 3 + 0], estimate: v.estimate_0 }, ] ).flat(); quarters.set(_key, months); }) estimates_grouped.set(key, quarters); }) let documents_grouped: Map> = new Map() Map.groupBy(documents, (v) => toInt(v.identifier.slice(0, 4))).forEach((value, key, _) => { let quarters = Map.groupBy(value, (v) => toInt(v.identifier.slice(5, 7))); documents_grouped.set(key, quarters); }) return { estimates: estimates_grouped, documents: documents_grouped, }; } export const actions = { add_quarter: async ({ locals, request }) => { if (!locals.user) { return fail(403, { message: "Unauthorized user" }) } const data = await request.formData(); const year = data.get("year") as string; const quart = data.get("quarter") as string; const estimate_0 = data.get("estimate_0") as string; const estimate_1 = data.get("estimate_1") as string; const estimate_2 = data.get("estimate_2") as string; if (year == null || quart == null || estimate_0 == null || estimate_1 == null || estimate_2 == null) { return fail(400, { year: year, quarter: quart, estimate_0: estimate_0, estimate_1: estimate_1, estimate_2: estimate_2 }); } const y = toInt(year); const q = toInt(quart); const est_0 = toFloat(estimate_0); const est_1 = toFloat(estimate_1); const est_2 = toFloat(estimate_2); if (isNaN(y) || isNaN(q) || q < 1 || q > 4 || isNaN(est_0) || isNaN(est_1) || isNaN(est_2)) { return fail(400, { year: year, quarter: quart, estimate_0: estimate_0, estimate_1: estimate_1, estimate_2: estimate_2 }); } if (locals.user.get_estimate(y, q)) { return fail(409, { reason: "Estimate already exists" } ); } const res = locals.user.insert_estimate(y, q, est_0, est_1, est_2) if (!res) { return fail(500, {}); } return { success: true }; } } satisfies Actions;