Spaces:
Sleeping
Sleeping
File size: 3,262 Bytes
6c678a9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | -- This table stores user login info and their experience points (XP).
-- MODIFIED to include an admin flag AND streak-tracking columns.
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
xp INT DEFAULT 0,
is_admin BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
-- NEW: Columns for tracking daily streaks
last_login_date DATE,
streak_count INT DEFAULT 0
);
-- This table stores questions for the lessons.
-- (No changes here)
CREATE TABLE questions (
id SERIAL PRIMARY KEY,
lesson_id INT NOT NULL,
content TEXT NOT NULL,
difficulty_level INT NOT NULL CHECK (difficulty_level BETWEEN 1 AND 5),
correct_answer_text VARCHAR(255) NOT NULL
);
-- This table tracks every answer a user gives.
-- (No changes here)
CREATE TABLE user_progress (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id) ON DELETE CASCADE,
question_id INT REFERENCES questions(id) ON DELETE CASCADE,
is_correct BOOLEAN NOT NULL,
answered_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- This table stores the state of our Reinforcement Learning model.
-- (No changes here)
CREATE TABLE bandit_state (
user_id INT REFERENCES users(id) ON DELETE CASCADE,
lesson_id INT NOT NULL,
difficulty_level INT NOT NULL,
times_selected INT DEFAULT 1,
successful_outcomes INT DEFAULT 0,
PRIMARY KEY (user_id, lesson_id, difficulty_level)
);
-- NEW TABLE: Stores the definitions for all possible quests.
CREATE TABLE quests (
id SERIAL PRIMARY KEY,
title VARCHAR(255) NOT NULL,
description TEXT,
quest_type VARCHAR(50) NOT NULL, -- e.g., 'CORRECT_ANSWERS', 'TOTAL_ANSWERS'
completion_target INT NOT NULL, -- e.g., 5 for "Answer 5 questions correctly"
xp_reward INT NOT NULL
);
-- NEW TABLE: Tracks the active quest for each user for the current day.
CREATE TABLE user_quests (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id) ON DELETE CASCADE,
quest_id INT REFERENCES quests(id) ON DELETE CASCADE,
assigned_date DATE NOT NULL DEFAULT CURRENT_DATE,
current_progress INT DEFAULT 0,
is_completed BOOLEAN DEFAULT FALSE,
UNIQUE(user_id, assigned_date) -- Ensures a user only gets one quest per day
);
-- (Keep all the existing tables: users, questions, user_progress, etc.)
-- NEW TABLE: Stores the definitions for all possible achievements.
CREATE TABLE achievements (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT NOT NULL,
icon_class VARCHAR(50) NOT NULL, -- e.g., 'fas fa-brain', 'fas fa-fire'
criteria_type VARCHAR(50) NOT NULL, -- e.g., 'CORRECT_ANSWERS_TOTAL', 'STREAK'
criteria_value INT NOT NULL,
xp_reward INT NOT NULL
);
-- NEW TABLE: Links users to the achievements they have unlocked.
CREATE TABLE user_achievements (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id) ON DELETE CASCADE,
achievement_id INT REFERENCES achievements(id) ON DELETE CASCADE,
unlocked_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
UNIQUE(user_id, achievement_id) -- A user can only earn each achievement once
); |