70 lines
2.2 KiB
SQL
70 lines
2.2 KiB
SQL
INSERT INTO storage.buckets (id, name, public)
|
|
VALUES ('files_bucket', 'files_bucket', true);
|
|
|
|
CREATE POLICY "Whack"
|
|
ON storage.objects
|
|
FOR ALL
|
|
USING (bucket_id = 'files_bucket');
|
|
|
|
CREATE TABLE study_spaces (
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
description text,
|
|
-- Location within building, e.g., "Room 101"
|
|
location text,
|
|
-- Not bothered to write a proper data migration
|
|
building_location_old text,
|
|
building_location jsonb,
|
|
tags text[] NOT NULL DEFAULT array[]::text[],
|
|
volume text NOT NULL,
|
|
wifi text NOT NULL,
|
|
power text NOT NULL,
|
|
|
|
created_at timestamp with time zone DEFAULT now(),
|
|
updated_at timestamp with time zone DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE study_space_images (
|
|
study_space_id uuid REFERENCES study_spaces(id) ON DELETE CASCADE,
|
|
image_path text NOT NULL,
|
|
created_at timestamp with time zone DEFAULT now(),
|
|
updated_at timestamp with time zone DEFAULT now(),
|
|
PRIMARY KEY (study_space_id, image_path)
|
|
);
|
|
|
|
CREATE TABLE reports (
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
study_space_id uuid REFERENCES study_spaces(id) ON DELETE CASCADE,
|
|
created_at timestamp with time zone DEFAULT now(),
|
|
updated_at timestamp with time zone DEFAULT now(),
|
|
type text NOT NULL,
|
|
content text
|
|
);
|
|
|
|
CREATE TABLE study_space_hours (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
study_space_id UUID REFERENCES study_spaces(id) ON DELETE CASCADE,
|
|
day_of_week INT CHECK (day_of_week BETWEEN 0 AND 6) NOT NULL, -- 0 = Sunday, 6 = Saturday
|
|
opens_at TIME NOT NULL,
|
|
closes_at TIME NOT NULL,
|
|
open_today_status BOOLEAN,
|
|
created_at timestamp with time zone DEFAULT now(),
|
|
updated_at timestamp with time zone DEFAULT now()
|
|
);
|
|
|
|
-- Triggers
|
|
CREATE TRIGGER study_spaces_updated_at
|
|
AFTER UPDATE ON study_spaces
|
|
FOR EACH ROW EXECUTE FUNCTION handle_updated_at();
|
|
|
|
CREATE TRIGGER study_space_images_updated_at
|
|
AFTER UPDATE ON study_space_images
|
|
FOR EACH ROW EXECUTE FUNCTION handle_updated_at();
|
|
|
|
CREATE TRIGGER reports_updated_at
|
|
AFTER UPDATE ON reports
|
|
FOR EACH ROW EXECUTE FUNCTION handle_updated_at();
|
|
|
|
CREATE TRIGGER study_space_hours_updated_at
|
|
AFTER UPDATE ON study_space_hours
|
|
FOR EACH ROW EXECUTE FUNCTION handle_updated_at();
|