Spaces:
Sleeping
Sleeping
| -- Supabase Database Schema for Conversation History | |
| -- Run this in your Supabase SQL Editor | |
| -- Enable UUID extension | |
| CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; | |
| -- Users table to store user information | |
| CREATE TABLE IF NOT EXISTS users ( | |
| id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, | |
| telegram_id BIGINT UNIQUE NOT NULL, | |
| username VARCHAR(255), | |
| first_name VARCHAR(255), | |
| last_name VARCHAR(255), | |
| created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), | |
| updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() | |
| ); | |
| -- Messages table to store conversation history | |
| CREATE TABLE IF NOT EXISTS messages ( | |
| id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, | |
| telegram_id BIGINT NOT NULL, | |
| message_text TEXT NOT NULL, | |
| message_type VARCHAR(20) NOT NULL CHECK (message_type IN ('user', 'assistant')), | |
| created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), | |
| FOREIGN KEY (telegram_id) REFERENCES users(telegram_id) ON DELETE CASCADE | |
| ); | |
| -- Conversation sessions to group messages by session | |
| CREATE TABLE IF NOT EXISTS conversation_sessions ( | |
| id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, | |
| telegram_id BIGINT NOT NULL, | |
| session_start TIMESTAMP WITH TIME ZONE DEFAULT NOW(), | |
| session_end TIMESTAMP WITH TIME ZONE, | |
| message_count INTEGER DEFAULT 0, | |
| created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), | |
| FOREIGN KEY (telegram_id) REFERENCES users(telegram_id) ON DELETE CASCADE | |
| ); | |
| -- Indexes for better performance | |
| CREATE INDEX IF NOT EXISTS idx_messages_telegram_id_created_at ON messages(telegram_id, created_at); | |
| CREATE INDEX IF NOT EXISTS idx_users_telegram_id ON users(telegram_id); | |
| CREATE INDEX IF NOT EXISTS idx_sessions_telegram_id ON conversation_sessions(telegram_id); | |
| -- Function to update updated_at timestamp | |
| CREATE OR REPLACE FUNCTION update_updated_at_column() | |
| RETURNS TRIGGER AS $$ | |
| BEGIN | |
| NEW.updated_at = NOW(); | |
| RETURN NEW; | |
| END; | |
| $$ language 'plpgsql'; | |
| -- Trigger to update user's updated_at timestamp | |
| CREATE TRIGGER update_user_updated_at | |
| BEFORE UPDATE ON users | |
| FOR EACH ROW | |
| EXECUTE FUNCTION update_updated_at_column(); | |
| -- Trigger to update session message count | |
| CREATE OR REPLACE FUNCTION update_session_count() | |
| RETURNS TRIGGER AS $$ | |
| BEGIN | |
| UPDATE conversation_sessions | |
| SET message_count = message_count + 1 | |
| WHERE telegram_id = NEW.telegram_id AND session_end IS NULL; | |
| RETURN NEW; | |
| END; | |
| $$ language 'plpgsql'; | |
| CREATE TRIGGER update_session_message_count | |
| AFTER INSERT ON messages | |
| FOR EACH ROW | |
| EXECUTE FUNCTION update_session_count(); | |
| -- Row Level Security (RLS) policies | |
| ALTER TABLE users ENABLE ROW LEVEL SECURITY; | |
| ALTER TABLE messages ENABLE ROW LEVEL SECURITY; | |
| ALTER TABLE conversation_sessions ENABLE ROW LEVEL SECURITY; | |
| -- Policy for users table (allow all operations for now) | |
| CREATE POLICY "Enable all operations for users" ON users | |
| FOR ALL USING (true); | |
| -- Policy for messages table (allow all operations for now) | |
| CREATE POLICY "Enable all operations for messages" ON messages | |
| FOR ALL USING (true); | |
| -- Policy for conversation_sessions table (allow all operations for now) | |
| CREATE POLICY "Enable all operations for conversation_sessions" ON conversation_sessions | |
| FOR ALL USING (true); | |