Enable containerization for simplified deployment and scaling of the app

Adds Dockerfile, docker-compose files, and deployment scripts for containerizing the React/Express app.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 3a22ac80-cd1d-4441-9e36-f24fc2f4c3de
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/3478f7c3-db8c-4fca-9165-3adbdf1b5829/e8da43e7-d99c-4328-9fdc-485bdeecffc1.jpg
This commit is contained in:
spliceboti
2025-07-10 00:35:23 +00:00
parent ed0391011d
commit ec2ab0e9f4
10 changed files with 807 additions and 0 deletions
+143
View File
@@ -0,0 +1,143 @@
-- Database initialization script for Docker container
-- This script sets up the initial database schema
-- Create sessions table for auth
CREATE TABLE IF NOT EXISTS sessions (
sid VARCHAR PRIMARY KEY,
sess JSONB NOT NULL,
expire TIMESTAMP NOT NULL
);
-- Create index for sessions
CREATE INDEX IF NOT EXISTS IDX_session_expire ON sessions(expire);
-- Create enum for user roles
CREATE TYPE user_role AS ENUM ('dj', 'admin');
-- Create users table
CREATE TABLE IF NOT EXISTS users (
id VARCHAR PRIMARY KEY,
email VARCHAR UNIQUE,
first_name VARCHAR,
last_name VARCHAR,
profile_image_url VARCHAR,
display_name VARCHAR,
bio TEXT,
phone VARCHAR,
location VARCHAR,
website VARCHAR,
role user_role DEFAULT 'dj',
is_active BOOLEAN DEFAULT true,
max_monthly_events INTEGER DEFAULT 4,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Create event types table
CREATE TABLE IF NOT EXISTS event_types (
id SERIAL PRIMARY KEY,
name VARCHAR NOT NULL,
description TEXT,
color VARCHAR DEFAULT '#3B82F6',
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Create schedule templates table
CREATE TABLE IF NOT EXISTS schedule_templates (
id SERIAL PRIMARY KEY,
name VARCHAR NOT NULL,
description TEXT,
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Create schedule template slots table
CREATE TABLE IF NOT EXISTS schedule_template_slots (
id SERIAL PRIMARY KEY,
template_id INTEGER REFERENCES schedule_templates(id) ON DELETE CASCADE,
day_of_week INTEGER NOT NULL CHECK (day_of_week >= 0 AND day_of_week <= 6),
start_time TIME NOT NULL,
end_time TIME NOT NULL,
event_type_id INTEGER REFERENCES event_types(id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Create events table
CREATE TABLE IF NOT EXISTS events (
id SERIAL PRIMARY KEY,
title VARCHAR NOT NULL,
description TEXT,
date DATE NOT NULL,
start_time TIME NOT NULL,
end_time TIME NOT NULL,
location VARCHAR,
event_type_id INTEGER REFERENCES event_types(id),
dj_id VARCHAR REFERENCES users(id),
is_admin_assigned BOOLEAN DEFAULT false,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Create social links table
CREATE TABLE IF NOT EXISTS social_links (
id SERIAL PRIMARY KEY,
dj_id VARCHAR REFERENCES users(id) ON DELETE CASCADE,
platform VARCHAR NOT NULL,
url VARCHAR NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Create availability table
CREATE TABLE IF NOT EXISTS availability (
id SERIAL PRIMARY KEY,
dj_id VARCHAR REFERENCES users(id) ON DELETE CASCADE,
date DATE NOT NULL,
is_available BOOLEAN DEFAULT true,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(dj_id, date)
);
-- Create slot eligibility table
CREATE TABLE IF NOT EXISTS slot_eligibility (
id SERIAL PRIMARY KEY,
dj_id VARCHAR REFERENCES users(id) ON DELETE CASCADE,
event_type_id INTEGER REFERENCES event_types(id),
is_eligible BOOLEAN DEFAULT true,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Create removal requests table
CREATE TABLE IF NOT EXISTS removal_requests (
id SERIAL PRIMARY KEY,
event_id INTEGER REFERENCES events(id) ON DELETE CASCADE,
dj_id VARCHAR REFERENCES users(id),
reason TEXT NOT NULL,
status VARCHAR DEFAULT 'pending' CHECK (status IN ('pending', 'approved', 'denied')),
reviewed_by VARCHAR REFERENCES users(id),
reviewed_at TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Create invitations table
CREATE TABLE IF NOT EXISTS invitations (
id SERIAL PRIMARY KEY,
email VARCHAR NOT NULL,
token VARCHAR UNIQUE NOT NULL,
expires_at TIMESTAMP NOT NULL,
is_used BOOLEAN DEFAULT false,
created_by VARCHAR REFERENCES users(id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Insert some default event types
INSERT INTO event_types (name, description, color) VALUES
('Radio Show', 'Regular radio broadcasting', '#3B82F6'),
('Club Night', 'Club and nightclub events', '#10B981'),
('Wedding', 'Wedding and celebration events', '#F59E0B'),
('Corporate Event', 'Business and corporate functions', '#6366F1'),
('Festival', 'Music festivals and outdoor events', '#EF4444'),
('Special Event', 'Special occasions and one-time events', '#8B5CF6')
ON CONFLICT DO NOTHING;