51 lines
1.3 KiB
SQL
51 lines
1.3 KiB
SQL
-- Add up migration script here
|
|
|
|
CREATE TABLE canteens_scraped (
|
|
canteen TEXT NOT NULL,
|
|
scraped_for DATE NOT NULL,
|
|
scraped_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
PRIMARY KEY (canteen, scraped_for, scraped_at)
|
|
);
|
|
|
|
ALTER TABLE meals
|
|
ADD COLUMN id UUID NOT NULL DEFAULT gen_random_uuid();
|
|
|
|
-- Remove existing primary key constraints
|
|
DO $$
|
|
DECLARE
|
|
r RECORD;
|
|
BEGIN
|
|
FOR r IN
|
|
SELECT conname
|
|
FROM pg_constraint
|
|
WHERE contype = 'p'
|
|
AND conrelid = 'meals'::regclass
|
|
LOOP
|
|
EXECUTE format('ALTER TABLE meals DROP CONSTRAINT %I', r.conname);
|
|
END LOOP;
|
|
END $$;
|
|
|
|
ALTER TABLE meals
|
|
ADD CONSTRAINT meals_pkey PRIMARY KEY (id);
|
|
|
|
ALTER TABLE meals
|
|
ADD COLUMN is_latest BOOLEAN NOT NULL DEFAULT TRUE;
|
|
|
|
ALTER TABLE meals
|
|
ADD COLUMN refreshed_at TIMESTAMPTZ NOT NULL DEFAULT NOW();
|
|
|
|
CREATE TYPE dish_type_enum AS ENUM ('main', 'side', 'dessert');
|
|
|
|
ALTER TABLE meals
|
|
ALTER COLUMN dish_type
|
|
TYPE dish_type_enum
|
|
USING dish_type::dish_type_enum;
|
|
|
|
CREATE INDEX idx_meals_date_canteen_latest ON meals(date, canteen, is_latest);
|
|
|
|
CREATE INDEX idx_meals_refreshed_at ON meals(refreshed_at);
|
|
|
|
CREATE VIEW meals_view AS
|
|
SELECT id, date, canteen, name, dish_type, image_src, price_students, price_employees, price_guests, vegan, vegetarian
|
|
FROM meals
|
|
WHERE is_latest = TRUE; |