Spaces:
Sleeping
Sleeping
| -- Initial schema and indexes for production (Postgres compatible) | |
| CREATE TABLE IF NOT EXISTS users ( | |
| id SERIAL PRIMARY KEY, | |
| email VARCHAR(255), | |
| password VARCHAR(255), | |
| created_at TIMESTAMP WITHOUT TIME ZONE, | |
| name TEXT | |
| ); | |
| CREATE TABLE IF NOT EXISTS analyses ( | |
| id SERIAL PRIMARY KEY, | |
| user_id INTEGER NULL, | |
| primary_condition VARCHAR(255), | |
| clinical_scoring JSON, | |
| created_at TIMESTAMP WITHOUT TIME ZONE, | |
| text_input TEXT, | |
| text_input_hash TEXT, | |
| text_scores JSONB, | |
| survey_scores JSONB, | |
| fused_scores JSONB, | |
| severity TEXT, | |
| cause TEXT, | |
| suicidal_flag BOOLEAN DEFAULT FALSE, | |
| model_version TEXT, | |
| app_version TEXT, | |
| locale TEXT | |
| ); | |
| CREATE TABLE IF NOT EXISTS checkins ( | |
| id SERIAL PRIMARY KEY, | |
| user_id INTEGER NOT NULL, | |
| mood INTEGER NOT NULL, | |
| sleep INTEGER NOT NULL, | |
| energy DOUBLE PRECISION NOT NULL, | |
| created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW() | |
| ); | |
| CREATE TABLE IF NOT EXISTS journal_entries ( | |
| id SERIAL PRIMARY KEY, | |
| user_id INTEGER, | |
| content TEXT NOT NULL, | |
| created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(), | |
| updated_at TIMESTAMP WITHOUT TIME ZONE | |
| ); | |
| CREATE TABLE IF NOT EXISTS user_preferences ( | |
| user_id INTEGER PRIMARY KEY, | |
| theme TEXT DEFAULT 'dark', | |
| language TEXT DEFAULT 'en', | |
| notifications_enabled BOOLEAN DEFAULT TRUE, | |
| crisis_locale TEXT | |
| ); | |
| CREATE TABLE IF NOT EXISTS consents ( | |
| id SERIAL PRIMARY KEY, | |
| user_id INTEGER, | |
| consent_type TEXT NOT NULL, | |
| granted BOOLEAN NOT NULL DEFAULT FALSE, | |
| created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT NOW() | |
| ); | |
| CREATE INDEX IF NOT EXISTS ix_analyses_user_id_created_at ON analyses (user_id, created_at); | |
| CREATE INDEX IF NOT EXISTS ix_checkins_user_id_created_at ON checkins (user_id, created_at); | |
| DO $$ | |
| BEGIN | |
| IF NOT EXISTS ( | |
| SELECT 1 FROM information_schema.table_constraints | |
| WHERE constraint_name = 'fk_analyses_user' | |
| ) THEN | |
| ALTER TABLE analyses | |
| ADD CONSTRAINT fk_analyses_user | |
| FOREIGN KEY (user_id) REFERENCES users(id); | |
| END IF; | |
| IF NOT EXISTS ( | |
| SELECT 1 FROM information_schema.table_constraints | |
| WHERE constraint_name = 'fk_checkins_user' | |
| ) THEN | |
| ALTER TABLE checkins | |
| ADD CONSTRAINT fk_checkins_user | |
| FOREIGN KEY (user_id) REFERENCES users(id); | |
| END IF; | |
| IF NOT EXISTS ( | |
| SELECT 1 FROM information_schema.table_constraints | |
| WHERE constraint_name = 'fk_journal_entries_user' | |
| ) THEN | |
| ALTER TABLE journal_entries | |
| ADD CONSTRAINT fk_journal_entries_user | |
| FOREIGN KEY (user_id) REFERENCES users(id); | |
| END IF; | |
| IF NOT EXISTS ( | |
| SELECT 1 FROM information_schema.table_constraints | |
| WHERE constraint_name = 'fk_consents_user' | |
| ) THEN | |
| ALTER TABLE consents | |
| ADD CONSTRAINT fk_consents_user | |
| FOREIGN KEY (user_id) REFERENCES users(id); | |
| END IF; | |
| IF NOT EXISTS ( | |
| SELECT 1 FROM information_schema.table_constraints | |
| WHERE constraint_name = 'fk_user_preferences_user' | |
| ) THEN | |
| ALTER TABLE user_preferences | |
| ADD CONSTRAINT fk_user_preferences_user | |
| FOREIGN KEY (user_id) REFERENCES users(id); | |
| END IF; | |
| END $$; | |