apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-db-migration namespace: {{ .Values.global.namespace }} data: migrate.sql: | -- Create users table if it doesn't exist CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, username TEXT UNIQUE NOT NULL, email TEXT UNIQUE NOT NULL, password_hash TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Create recipes table if it doesn't exist (matching backend schema) CREATE TABLE IF NOT EXISTS recipes ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, meal_type TEXT NOT NULL, time_minutes INTEGER NOT NULL, tags TEXT[] NOT NULL DEFAULT '{}', ingredients TEXT[] NOT NULL DEFAULT '{}', steps TEXT[] NOT NULL DEFAULT '{}', image TEXT, made_by TEXT, user_id INTEGER REFERENCES users(id) ON DELETE SET NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Add user_id column if it doesn't exist (for existing recipes tables) DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM information_schema.columns WHERE table_name = 'recipes' AND column_name = 'user_id' ) THEN ALTER TABLE recipes ADD COLUMN user_id INTEGER REFERENCES users(id) ON DELETE SET NULL; END IF; END $$; -- Add created_at column to recipes if it doesn't exist DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM information_schema.columns WHERE table_name = 'recipes' AND column_name = 'created_at' ) THEN ALTER TABLE recipes ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP; END IF; END $$; -- Create indexes CREATE INDEX IF NOT EXISTS idx_recipes_meal_type ON recipes (meal_type); CREATE INDEX IF NOT EXISTS idx_recipes_time_minutes ON recipes (time_minutes); CREATE INDEX IF NOT EXISTS idx_recipes_made_by ON recipes (made_by); CREATE INDEX IF NOT EXISTS idx_recipes_user_id ON recipes (user_id); CREATE INDEX IF NOT EXISTS idx_users_username ON users (username); CREATE INDEX IF NOT EXISTS idx_users_email ON users (email); -- Verify schema SELECT 'Users table:' as info; SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'users' ORDER BY ordinal_position; SELECT 'Recipes table:' as info; SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'recipes' ORDER BY ordinal_position;