Some checks failed
CI / build-and-test (push) Failing after -31m53s
* Implement maintenance page with task and log display * Add backfill and metadata retry functionality * Integrate grid component for project display in thoughts page * Update types for maintenance tasks and logs * Enhance sidebar and shell for new maintenance navigation
55 lines
2.1 KiB
SQL
55 lines
2.1 KiB
SQL
-- Extension 4: Meal Planning
|
|
-- Recipes, weekly meal plans, and shopping lists (single-user, no RLS)
|
|
|
|
CREATE TABLE IF NOT EXISTS recipes (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
name TEXT NOT NULL,
|
|
cuisine TEXT,
|
|
prep_time_minutes INTEGER,
|
|
cook_time_minutes INTEGER,
|
|
servings INTEGER,
|
|
ingredients JSONB NOT NULL DEFAULT '[]',
|
|
instructions JSONB NOT NULL DEFAULT '[]',
|
|
tags TEXT[] NOT NULL DEFAULT '{}',
|
|
rating INTEGER CHECK (rating >= 1 AND rating <= 5),
|
|
notes TEXT,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS meal_plans (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
week_start DATE NOT NULL,
|
|
day_of_week TEXT NOT NULL,
|
|
meal_type TEXT NOT NULL CHECK (meal_type IN ('breakfast', 'lunch', 'dinner', 'snack')),
|
|
recipe_id UUID REFERENCES recipes(id) ON DELETE SET NULL,
|
|
custom_meal TEXT,
|
|
servings INTEGER,
|
|
notes TEXT,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS shopping_lists (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
week_start DATE NOT NULL UNIQUE,
|
|
items JSONB NOT NULL DEFAULT '[]',
|
|
notes TEXT,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_recipes_cuisine ON recipes(cuisine);
|
|
CREATE INDEX IF NOT EXISTS idx_recipes_tags ON recipes USING GIN (tags);
|
|
CREATE INDEX IF NOT EXISTS idx_meal_plans_week ON meal_plans(week_start);
|
|
CREATE INDEX IF NOT EXISTS idx_shopping_lists_week ON shopping_lists(week_start);
|
|
|
|
DROP TRIGGER IF EXISTS update_recipes_updated_at ON recipes;
|
|
CREATE TRIGGER update_recipes_updated_at
|
|
BEFORE UPDATE ON recipes
|
|
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
|
|
|
DROP TRIGGER IF EXISTS update_shopping_lists_updated_at ON shopping_lists;
|
|
CREATE TRIGGER update_shopping_lists_updated_at
|
|
BEFORE UPDATE ON shopping_lists
|
|
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|