eletrotupi / tcc/ api/migrations/002_mood_enhancements.sql90a378e3e8b3436b9a12b049e6ae1d9ff93a828b
2.1 KB | 54 lines Raw
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;