Spaces:
Sleeping
Sleeping
| -- 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; | |