From 16aff318702e8f200d2770fad298adbdac635a77 Mon Sep 17 00:00:00 2001 From: muken Date: Sun, 28 Jun 2026 07:54:40 -0500 Subject: [PATCH] Add database initialization script --- init-db.sh | 238 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100755 init-db.sh diff --git a/init-db.sh b/init-db.sh new file mode 100755 index 0000000..714269f --- /dev/null +++ b/init-db.sh @@ -0,0 +1,238 @@ +#!/bin/bash + +# Database initialization script for La Huasca +# This script creates the necessary tables and seeds initial data + +set -e # Exit on any error + +echo "Initializing La Huasca database..." + +# Get the postgres pod name +POSTGRES_POD=$(kubectl get pods -n lahuasca | grep postgres | awk '{print $1}') + +if [ -z "$POSTGRES_POD" ]; then + echo "Error: Could not find postgres pod" + exit 1 +fi + +echo "Found postgres pod: $POSTGRES_POD" + +# Create the SQL file with schema definitions +cat > /tmp/schema.sql << 'EOF' +-- Create all tables +CREATE TABLE IF NOT EXISTS users ( + id SERIAL PRIMARY KEY, + username VARCHAR(50) UNIQUE NOT NULL, + password_hash VARCHAR(255) NOT NULL, + role VARCHAR(20) NOT NULL CHECK (role IN ('admin', 'user')), + comments_disabled BOOLEAN DEFAULT FALSE, + first_name VARCHAR(100), + last_name VARCHAR(100), + created_at TIMESTAMP DEFAULT NOW() +); + +CREATE TABLE IF NOT EXISTS images ( + id SERIAL PRIMARY KEY, + filename VARCHAR(255) NOT NULL, + data TEXT NOT NULL, + category VARCHAR(100) DEFAULT 'other', + room_id INTEGER REFERENCES rooms(id) ON DELETE SET NULL, + location_target VARCHAR(100) DEFAULT 'gallery', + uploaded_at TIMESTAMP DEFAULT NOW() +); + +CREATE TABLE IF NOT EXISTS reservations ( + id SERIAL PRIMARY KEY, + user_id INTEGER REFERENCES users(id) ON DELETE CASCADE, + date DATE NOT NULL, + time TIME NOT NULL, + guests INTEGER NOT NULL, + table_name VARCHAR(100) NOT NULL, + created_at TIMESTAMP DEFAULT NOW() +); + +CREATE TABLE IF NOT EXISTS coupons ( + id SERIAL PRIMARY KEY, + user_id INTEGER REFERENCES users(id) ON DELETE CASCADE, + code VARCHAR(50) NOT NULL, + discount VARCHAR(255) NOT NULL, + created_at TIMESTAMP DEFAULT NOW() +); + +CREATE TABLE IF NOT EXISTS offers ( + id SERIAL PRIMARY KEY, + title VARCHAR(255) NOT NULL, + description TEXT NOT NULL, + active BOOLEAN DEFAULT TRUE, + sort_order INTEGER DEFAULT 0, + created_at TIMESTAMP DEFAULT NOW() +); + +CREATE TABLE IF NOT EXISTS benefits ( + id SERIAL PRIMARY KEY, + text VARCHAR(500) NOT NULL, + created_at TIMESTAMP DEFAULT NOW() +); + +CREATE TABLE IF NOT EXISTS config ( + key VARCHAR(100) PRIMARY KEY, + value TEXT NOT NULL +); + +CREATE TABLE IF NOT EXISTS rooms ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) NOT NULL, + description TEXT NOT NULL, + price NUMERIC(10,2) NOT NULL, + photos TEXT[] DEFAULT '{}', + featured_photo VARCHAR(500), + active BOOLEAN DEFAULT TRUE, + sort_order INTEGER DEFAULT 0, + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP DEFAULT NOW() +); + +CREATE TABLE IF NOT EXISTS menu_items ( + id SERIAL PRIMARY KEY, + category VARCHAR(100) NOT NULL, + name VARCHAR(255) NOT NULL, + description TEXT, + price NUMERIC(10,2) NOT NULL, + is_daily_special BOOLEAN DEFAULT FALSE, + active BOOLEAN DEFAULT TRUE, + sort_order INTEGER DEFAULT 0, + created_at TIMESTAMP DEFAULT NOW() +); + +CREATE TABLE IF NOT EXISTS places ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) NOT NULL, + description TEXT NOT NULL, + photos TEXT[] DEFAULT '{}', + featured_photo VARCHAR(500), + distance_km NUMERIC(8,2), + visit_time VARCHAR(100), + suggestion TEXT, + active BOOLEAN DEFAULT TRUE, + sort_order INTEGER DEFAULT 0, + created_at TIMESTAMP DEFAULT NOW() +); + +CREATE TABLE IF NOT EXISTS reviews ( + id SERIAL PRIMARY KEY, + author_name VARCHAR(255) NOT NULL, + rating INTEGER NOT NULL CHECK (rating BETWEEN 1 AND 5), + text TEXT NOT NULL, + approved BOOLEAN DEFAULT FALSE, + created_at TIMESTAMP DEFAULT NOW() +); + +CREATE TABLE IF NOT EXISTS slides ( + id SERIAL PRIMARY KEY, + title VARCHAR(255), + subtitle TEXT, + image_id INTEGER REFERENCES images(id) ON DELETE SET NULL, + image_url VARCHAR(500), + active BOOLEAN DEFAULT TRUE, + sort_order INTEGER DEFAULT 0, + created_at TIMESTAMP DEFAULT NOW() +); + +CREATE TABLE IF NOT EXISTS room_comments ( + id SERIAL PRIMARY KEY, + room_id INTEGER REFERENCES rooms(id) ON DELETE CASCADE, + photo_url VARCHAR(500), + user_id INTEGER REFERENCES users(id) ON DELETE CASCADE, + first_name VARCHAR(100) NOT NULL, + last_initial VARCHAR(10), + text TEXT NOT NULL, + created_at TIMESTAMP DEFAULT NOW(), + deleted_by_admin BOOLEAN DEFAULT FALSE +); + +CREATE TABLE IF NOT EXISTS social_events ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) NOT NULL, + description TEXT, + price VARCHAR(50), + date DATE, + photos TEXT[] DEFAULT '{}', + featured_photo VARCHAR(500), + active BOOLEAN DEFAULT TRUE, + sort_order INTEGER DEFAULT 0, + created_at TIMESTAMP DEFAULT NOW() +); + +CREATE TABLE IF NOT EXISTS social_event_reservations ( + id SERIAL PRIMARY KEY, + user_id INTEGER REFERENCES users(id) ON DELETE CASCADE, + social_event_id INTEGER REFERENCES social_events(id) ON DELETE CASCADE, + guests INTEGER NOT NULL, + notes TEXT, + status VARCHAR(20) DEFAULT 'pending' CHECK (status IN ('pending', 'confirmed', 'cancelled')), + created_at TIMESTAMP DEFAULT NOW(), + UNIQUE(user_id, social_event_id) +); + +CREATE TABLE IF NOT EXISTS calendar_events ( + id SERIAL PRIMARY KEY, + date DATE NOT NULL UNIQUE, + title VARCHAR(255) NOT NULL, + type VARCHAR(100) NOT NULL, + description TEXT, + color VARCHAR(20) NOT NULL +); + +CREATE TABLE IF NOT EXISTS user_sessions ( + id SERIAL PRIMARY KEY, + user_id INTEGER REFERENCES users(id) ON DELETE CASCADE, + token TEXT NOT NULL, + created_at TIMESTAMP DEFAULT NOW() +); + +-- Add missing columns if they don't exist +ALTER TABLE rooms ADD COLUMN IF NOT EXISTS featured_photo VARCHAR(500); +ALTER TABLE users ADD COLUMN IF NOT EXISTS comments_disabled BOOLEAN DEFAULT FALSE; +ALTER TABLE users ADD COLUMN IF NOT EXISTS first_name VARCHAR(100); +ALTER TABLE users ADD COLUMN IF NOT EXISTS last_name VARCHAR(100); + +-- Insert initial data +-- Default admin user (password: admin) +INSERT INTO users (username, password_hash, role) VALUES + ('admin', '$2a$10$8K1p/a0dhrxiowP.dnkgNORTWgdEDHn5L2/xjpEWuC.QQv4rKO9jO', 'admin') + ON CONFLICT (username) DO NOTHING; + +-- Default config values +INSERT INTO config (key, value) VALUES + ('wifi_password', 'LaHuascaGuest2026'), + ('tagline', 'Hotel · Restaurant · Andean Highlands') + ON CONFLICT (key) DO NOTHING; + +-- Sample offers +INSERT INTO offers (title, description, active, sort_order) VALUES + ('Summer Wine Weekend', 'Complimentary wine tasting with every two-night stay.', true, 1), + ('Sunset Dinner', 'Three-course menu on the terrace every Friday.', true, 2) + ON CONFLICT DO NOTHING; + +-- Sample benefits +INSERT INTO benefits (text) VALUES + ('Priority booking for peak weekends'), + ('Late checkout on availability'), + ('Free welcome cocktail'), + ('Member-only events and tastings') + ON CONFLICT DO NOTHING; +EOF + +# Copy the schema file to the postgres pod +echo "Copying schema to postgres pod..." +kubectl cp /tmp/schema.sql lahuasca/$POSTGRES_POD:/tmp/schema.sql + +# Execute the schema +echo "Executing database schema..." +kubectl exec -n lahuasca $POSTGRES_POD -- psql -U lahuasca -d lahuasca -f /tmp/schema.sql + +# Verify that the tables were created +echo "Verifying database tables..." +kubectl exec -n lahuasca deploy/postgres -- psql -U lahuasca -d lahuasca -c "\dt" + +echo "Database initialization completed successfully!" \ No newline at end of file