| |
| |
| |
| |
| |
| |
| |
| |
|
|
| CREATE TABLE IF NOT EXISTS users ( |
| id TEXT PRIMARY KEY, |
| email TEXT UNIQUE NOT NULL COLLATE NOCASE, |
| password TEXT NOT NULL, |
| display_name TEXT, |
| email_verified INTEGER DEFAULT 0, |
| is_admin INTEGER DEFAULT 0, |
| verification_code TEXT, |
| verification_expires TEXT, |
| reset_token TEXT, |
| reset_expires TEXT, |
| created_at TEXT DEFAULT (datetime('now')), |
| updated_at TEXT DEFAULT (datetime('now')) |
| ); |
|
|
| CREATE TABLE IF NOT EXISTS sessions ( |
| token TEXT PRIMARY KEY, |
| user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, |
| expires_at TEXT NOT NULL, |
| created_at TEXT DEFAULT (datetime('now')) |
| ); |
|
|
| CREATE TABLE IF NOT EXISTS health_data ( |
| id TEXT PRIMARY KEY, |
| user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, |
| type TEXT NOT NULL, |
| data TEXT NOT NULL, |
| created_at TEXT DEFAULT (datetime('now')), |
| updated_at TEXT DEFAULT (datetime('now')) |
| ); |
|
|
| CREATE TABLE IF NOT EXISTS chat_history ( |
| id TEXT PRIMARY KEY, |
| user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, |
| preview TEXT, |
| messages TEXT NOT NULL, |
| topic TEXT, |
| created_at TEXT DEFAULT (datetime('now')) |
| ); |
|
|
| CREATE INDEX IF NOT EXISTS idx_health_user_type ON health_data(user_id, type); |
| CREATE INDEX IF NOT EXISTS idx_chat_user ON chat_history(user_id, created_at DESC); |
| CREATE INDEX IF NOT EXISTS idx_sessions_expires ON sessions(expires_at); |
| CREATE INDEX IF NOT EXISTS idx_users_email ON users(email); |
|
|