customer_service / supabase_schema.sql
codeBOKER's picture
connect to supabase
511ba56
-- 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);