-- Database schema for Neon Postgres -- Users table CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, email VARCHAR(255) UNIQUE NOT NULL, password_hash VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, software_background VARCHAR(100), hardware_background VARCHAR(100), experience_level VARCHAR(50) ); -- User profiles table CREATE TABLE IF NOT EXISTS user_profiles ( id SERIAL PRIMARY KEY, user_id INTEGER REFERENCES users(id) ON DELETE CASCADE, personalization_settings JSONB DEFAULT '{}', learning_progress JSONB DEFAULT '{}', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Chat sessions table CREATE TABLE IF NOT EXISTS chat_sessions ( id SERIAL PRIMARY KEY, user_id INTEGER REFERENCES users(id) ON DELETE CASCADE, selected_text TEXT NOT NULL, question TEXT NOT NULL, response TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, conversation_history JSONB DEFAULT '[]' ); -- Textbook content table (for RAG) CREATE TABLE IF NOT EXISTS textbook_content ( id SERIAL PRIMARY KEY, chapter_id VARCHAR(100) NOT NULL, chapter_title VARCHAR(255) NOT NULL, content TEXT NOT NULL, embeddings JSONB, -- Store vector embeddings created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Indexes CREATE INDEX IF NOT EXISTS idx_users_email ON users(email); CREATE INDEX IF NOT EXISTS idx_chat_sessions_user_id ON chat_sessions(user_id); CREATE INDEX IF NOT EXISTS idx_textbook_content_chapter_id ON textbook_content(chapter_id);