-- Conversation History Database Schema -- SQLite Database Structure -- Users table to store user information CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, chat_id BIGINT UNIQUE NOT NULL, username VARCHAR(255), first_name VARCHAR(255), last_name VARCHAR(255), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Messages table to store conversation history CREATE TABLE IF NOT EXISTS messages ( id INTEGER PRIMARY KEY AUTOINCREMENT, chat_id BIGINT NOT NULL, message_text TEXT NOT NULL, message_type VARCHAR(20) NOT NULL CHECK (message_type IN ('user', 'assistant')), timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (chat_id) REFERENCES users(chat_id) ON DELETE CASCADE ); -- Conversation sessions to group messages by session CREATE TABLE IF NOT EXISTS conversation_sessions ( id INTEGER PRIMARY KEY AUTOINCREMENT, chat_id BIGINT NOT NULL, session_start TIMESTAMP DEFAULT CURRENT_TIMESTAMP, session_end TIMESTAMP NULL, message_count INTEGER DEFAULT 0, FOREIGN KEY (chat_id) REFERENCES users(chat_id) ON DELETE CASCADE ); -- Indexes for better performance CREATE INDEX IF NOT EXISTS idx_messages_chat_id_timestamp ON messages(chat_id, timestamp); CREATE INDEX IF NOT EXISTS idx_users_chat_id ON users(chat_id); CREATE INDEX IF NOT EXISTS idx_sessions_chat_id ON conversation_sessions(chat_id); -- Trigger to update user's updated_at timestamp CREATE TRIGGER IF NOT EXISTS update_user_timestamp AFTER INSERT ON messages FOR EACH ROW BEGIN UPDATE users SET updated_at = CURRENT_TIMESTAMP WHERE chat_id = NEW.chat_id; END; -- Trigger to update session message count CREATE TRIGGER IF NOT EXISTS update_session_count AFTER INSERT ON messages FOR EACH ROW BEGIN UPDATE conversation_sessions SET message_count = message_count + 1 WHERE chat_id = NEW.chat_id AND session_end IS NULL; END;