Phase 1: database schema, migrations, repository, user seeding
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INTEGER PRIMARY KEY,
|
||||
name TEXT UNIQUE NOT NULL,
|
||||
password_hash TEXT NOT NULL,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS questions (
|
||||
id TEXT PRIMARY KEY,
|
||||
text TEXT NOT NULL,
|
||||
source TEXT,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS answers (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
question_id TEXT NOT NULL REFERENCES questions(id) ON DELETE CASCADE,
|
||||
text TEXT NOT NULL,
|
||||
is_correct BOOLEAN NOT NULL,
|
||||
position INTEGER NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS tests (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER NOT NULL REFERENCES users(id),
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
completed_at DATETIME,
|
||||
n_questions INTEGER NOT NULL,
|
||||
question_ids TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS test_answers (
|
||||
test_id INTEGER NOT NULL REFERENCES tests(id) ON DELETE CASCADE,
|
||||
question_id TEXT NOT NULL REFERENCES questions(id),
|
||||
selected_answer_id INTEGER REFERENCES answers(id),
|
||||
is_correct BOOLEAN,
|
||||
answered_at DATETIME,
|
||||
PRIMARY KEY (test_id, question_id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_question_stats (
|
||||
user_id INTEGER NOT NULL REFERENCES users(id),
|
||||
question_id TEXT NOT NULL REFERENCES questions(id) ON DELETE CASCADE,
|
||||
times_seen INTEGER NOT NULL DEFAULT 0,
|
||||
times_correct INTEGER NOT NULL DEFAULT 0,
|
||||
last_seen_at DATETIME,
|
||||
PRIMARY KEY (user_id, question_id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_test_answers_test ON test_answers(test_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_answers_question ON answers(question_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_stats_user ON user_question_stats(user_id);
|
||||
Reference in New Issue
Block a user