Refactor database handling to require PostgreSQL connection, removing fallback to JSON. Implement error handling for database unavailability in key files. Update .env.example to reflect mandatory DATABASE_URL for local development. Remove Firebase configuration and related code from the project.
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
-- FlixCooks relational recipe schema (PostgreSQL)
|
||||
|
||||
CREATE TABLE IF NOT EXISTS recipes (
|
||||
slug VARCHAR(255) PRIMARY KEY,
|
||||
hero TEXT NOT NULL DEFAULT '',
|
||||
prep_time INTEGER NOT NULL DEFAULT 0,
|
||||
cook_time INTEGER NOT NULL DEFAULT 0,
|
||||
total_time INTEGER NOT NULL DEFAULT 0,
|
||||
servings INTEGER NOT NULL DEFAULT 2,
|
||||
featured BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
coming_soon BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
calories INTEGER NOT NULL DEFAULT 0,
|
||||
protein INTEGER NOT NULL DEFAULT 0,
|
||||
carbs INTEGER NOT NULL DEFAULT 0,
|
||||
fat INTEGER NOT NULL DEFAULT 0,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS recipe_translations (
|
||||
recipe_slug VARCHAR(255) NOT NULL REFERENCES recipes(slug) ON DELETE CASCADE,
|
||||
lang CHAR(2) NOT NULL CHECK (lang IN ('en', 'de')),
|
||||
title TEXT NOT NULL DEFAULT '',
|
||||
description TEXT NOT NULL DEFAULT '',
|
||||
category TEXT NOT NULL DEFAULT '',
|
||||
difficulty TEXT NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (recipe_slug, lang)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS recipe_tags (
|
||||
id SERIAL PRIMARY KEY,
|
||||
recipe_slug VARCHAR(255) NOT NULL REFERENCES recipes(slug) ON DELETE CASCADE,
|
||||
lang CHAR(2) NOT NULL CHECK (lang IN ('en', 'de')),
|
||||
tag TEXT NOT NULL,
|
||||
sort_order INTEGER NOT NULL DEFAULT 0
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_recipe_tags_slug_lang ON recipe_tags (recipe_slug, lang);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS recipe_ingredients (
|
||||
id SERIAL PRIMARY KEY,
|
||||
recipe_slug VARCHAR(255) NOT NULL REFERENCES recipes(slug) ON DELETE CASCADE,
|
||||
lang CHAR(2) NOT NULL CHECK (lang IN ('en', 'de')),
|
||||
content TEXT NOT NULL,
|
||||
sort_order INTEGER NOT NULL DEFAULT 0
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_recipe_ingredients_slug_lang ON recipe_ingredients (recipe_slug, lang);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS recipe_utensils (
|
||||
id SERIAL PRIMARY KEY,
|
||||
recipe_slug VARCHAR(255) NOT NULL REFERENCES recipes(slug) ON DELETE CASCADE,
|
||||
lang CHAR(2) NOT NULL CHECK (lang IN ('en', 'de')),
|
||||
content TEXT NOT NULL,
|
||||
sort_order INTEGER NOT NULL DEFAULT 0
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_recipe_utensils_slug_lang ON recipe_utensils (recipe_slug, lang);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS recipe_steps (
|
||||
id SERIAL PRIMARY KEY,
|
||||
recipe_slug VARCHAR(255) NOT NULL REFERENCES recipes(slug) ON DELETE CASCADE,
|
||||
lang CHAR(2) NOT NULL CHECK (lang IN ('en', 'de')),
|
||||
content TEXT NOT NULL DEFAULT '',
|
||||
video_url TEXT NOT NULL DEFAULT '',
|
||||
timer_minutes INTEGER,
|
||||
sort_order INTEGER NOT NULL DEFAULT 0
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_recipe_steps_slug_lang ON recipe_steps (recipe_slug, lang);
|
||||
Reference in New Issue
Block a user