Data/Season: Split Teams/Drivers/Races/Substitutions into individual routes
This commit is contained in:
64
src/routes/data/season/races/+page.server.ts
Normal file
64
src/routes/data/season/races/+page.server.ts
Normal file
@ -0,0 +1,64 @@
|
||||
import { RACE_PICTOGRAM_HEIGHT, RACE_PICTOGRAM_WIDTH } from "$lib/config";
|
||||
import {
|
||||
form_data_clean,
|
||||
form_data_ensure_keys,
|
||||
form_data_fix_dates,
|
||||
form_data_get_and_remove_id,
|
||||
} from "$lib/form";
|
||||
import { image_to_avif } from "$lib/server/image";
|
||||
import type { Actions } from "@sveltejs/kit";
|
||||
|
||||
export const actions = {
|
||||
create_race: async ({ request, locals }) => {
|
||||
if (!locals.admin) return { unauthorized: true };
|
||||
|
||||
const data: FormData = form_data_clean(await request.formData());
|
||||
form_data_ensure_keys(data, ["name", "step", "pictogram", "pxx", "qualidate", "racedate"]);
|
||||
form_data_fix_dates(data, ["sprintqualidate", "sprintdate", "qualidate", "racedate"]);
|
||||
|
||||
// Compress pictogram
|
||||
const pictogram_avif: Blob = await image_to_avif(
|
||||
await (data.get("pictogram") as File).arrayBuffer(),
|
||||
RACE_PICTOGRAM_WIDTH,
|
||||
RACE_PICTOGRAM_HEIGHT,
|
||||
);
|
||||
|
||||
data.set("pictogram", pictogram_avif);
|
||||
|
||||
await locals.pb.collection("races").create(data);
|
||||
},
|
||||
|
||||
update_race: async ({ request, locals }) => {
|
||||
if (!locals.admin) return { unauthorized: true };
|
||||
|
||||
// Do not remove empty sprint dates so they can be cleared by updating the record
|
||||
const data: FormData = form_data_clean(await request.formData(), [
|
||||
"sprintqualidate",
|
||||
"sprintdate",
|
||||
]);
|
||||
form_data_fix_dates(data, ["sprintqualidate", "sprintdate", "qualidate", "racedate"]);
|
||||
const id: string = form_data_get_and_remove_id(data);
|
||||
|
||||
if (data.has("pictogram")) {
|
||||
// Compress pictogram
|
||||
const pictogram_avif: Blob = await image_to_avif(
|
||||
await (data.get("pictogram") as File).arrayBuffer(),
|
||||
RACE_PICTOGRAM_WIDTH,
|
||||
RACE_PICTOGRAM_HEIGHT,
|
||||
);
|
||||
|
||||
data.set("pictogram", pictogram_avif);
|
||||
}
|
||||
|
||||
await locals.pb.collection("races").update(id, data);
|
||||
},
|
||||
|
||||
delete_race: async ({ request, locals }) => {
|
||||
if (!locals.admin) return { unauthorized: true };
|
||||
|
||||
const data: FormData = form_data_clean(await request.formData());
|
||||
const id: string = form_data_get_and_remove_id(data);
|
||||
|
||||
await locals.pb.collection("races").delete(id);
|
||||
},
|
||||
} satisfies Actions;
|
||||
Reference in New Issue
Block a user