60 lines
1.8 KiB
TypeScript
60 lines
1.8 KiB
TypeScript
import { error } from "@sveltejs/kit";
|
|
import type { PageServerLoad } from "./$types";
|
|
import type { Table } from "$lib";
|
|
|
|
type StudySpaceData = Omit<
|
|
Table<"study_spaces">,
|
|
"id" | "created_at" | "updated_at" | "building_location_old" | "building_location"
|
|
> & {
|
|
id?: string;
|
|
building_location?: google.maps.places.PlaceResult;
|
|
opening_times?: {
|
|
day_of_week: number;
|
|
opens_at: string;
|
|
closes_at: string;
|
|
is_24_7: boolean;
|
|
}[];
|
|
};
|
|
|
|
export const load: PageServerLoad = async ({ params, locals: { supabase } }) => {
|
|
if (params.id === "new") {
|
|
return {
|
|
space: {
|
|
description: "",
|
|
building_location: undefined,
|
|
location: "",
|
|
tags: [],
|
|
volume: "",
|
|
power: "",
|
|
wifi: ""
|
|
} as StudySpaceData
|
|
};
|
|
}
|
|
|
|
const { data: space, error: err } = await supabase
|
|
.from("study_spaces")
|
|
.select("*, study_space_images(*)")
|
|
.eq("id", params.id)
|
|
.single();
|
|
if (err) error(500, "Failed to load study space");
|
|
const studySpaceData = space as StudySpaceData & Partial<typeof space>;
|
|
|
|
const images = studySpaceData.study_space_images || [];
|
|
const { data: hours, error: hoursErr } = await supabase
|
|
.from("study_space_hours")
|
|
.select("day_of_week, opens_at, closes_at, is_24_7")
|
|
.eq("study_space_id", params.id)
|
|
.order("day_of_week", { ascending: true });
|
|
if (hoursErr) error(500, "Failed to load opening times");
|
|
studySpaceData.opening_times = hours;
|
|
|
|
delete studySpaceData.created_at;
|
|
delete studySpaceData.updated_at;
|
|
delete studySpaceData.study_space_images;
|
|
|
|
return {
|
|
space: studySpaceData as StudySpaceData,
|
|
images
|
|
};
|
|
};
|