| 1 | -- Drop and recreate mood table with enhanced fields
|
| 2 | DROP TABLE IF EXISTS mood;
|
| 3 |
|
| 4 | CREATE TABLE IF NOT EXISTS mood (
|
| 5 | id INTEGER PRIMARY KEY AUTOINCREMENT,
|
| 6 | user_id INTEGER NOT NULL,
|
| 7 | rating INTEGER CHECK (rating BETWEEN 1 AND 10),
|
| 8 | stress_level INTEGER NOT NULL CHECK (stress_level BETWEEN 1 AND 10),
|
| 9 | anxiety_level INTEGER NOT NULL CHECK (anxiety_level BETWEEN 1 AND 10),
|
| 10 | energy_level INTEGER NOT NULL CHECK (energy_level BETWEEN 1 AND 10),
|
| 11 | title TEXT,
|
| 12 | description TEXT,
|
| 13 | recorded_at DATETIME NOT NULL,
|
| 14 | created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
| 15 | updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
| 16 | FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
| 17 | );
|
| 18 |
|
| 19 | -- Mood components table for emotional breakdown
|
| 20 | CREATE TABLE IF NOT EXISTS mood_components (
|
| 21 | id INTEGER PRIMARY KEY AUTOINCREMENT,
|
| 22 | mood_id INTEGER NOT NULL,
|
| 23 | emotion TEXT NOT NULL CHECK (emotion IN ('joy', 'trust', 'fear', 'surprise', 'sad', 'disgust', 'angry', 'anxiety')),
|
| 24 | intensity INTEGER NOT NULL CHECK (intensity BETWEEN 1 AND 10),
|
| 25 | created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
| 26 | FOREIGN KEY (mood_id) REFERENCES mood(id) ON DELETE CASCADE,
|
| 27 | UNIQUE(mood_id, emotion)
|
| 28 | );
|
| 29 |
|
| 30 | -- Indexes for performance
|
| 31 | CREATE INDEX IF NOT EXISTS idx_mood_user_id ON mood(user_id);
|
| 32 | CREATE INDEX IF NOT EXISTS idx_mood_recorded_at ON mood(recorded_at);
|
| 33 | CREATE INDEX IF NOT EXISTS idx_mood_user_date ON mood(user_id, recorded_at);
|
| 34 | CREATE INDEX IF NOT EXISTS idx_mood_components_mood_id ON mood_components(mood_id);
|
| 35 |
|
| 36 | -- Recreate users table with new fields (SQLite doesn't support ALTER TABLE ADD COLUMN well)
|
| 37 | CREATE TABLE IF NOT EXISTS users_new (
|
| 38 | id INTEGER PRIMARY KEY AUTOINCREMENT,
|
| 39 | email TEXT UNIQUE NOT NULL,
|
| 40 | password TEXT NOT NULL,
|
| 41 | first_name TEXT NOT NULL,
|
| 42 | last_name TEXT NOT NULL,
|
| 43 | timezone TEXT DEFAULT 'UTC',
|
| 44 | created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
| 45 | updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
| 46 | );
|
| 47 |
|
| 48 | -- Copy existing data
|
| 49 | INSERT OR IGNORE INTO users_new (id, email, password, first_name, last_name, created_at)
|
| 50 | SELECT id, email, password, first_name, last_name, created_at FROM users;
|
| 51 |
|
| 52 | -- Drop old table and rename new one
|
| 53 | DROP TABLE IF EXISTS users;
|
| 54 | ALTER TABLE users_new RENAME TO users;
|