Spaces:
Runtime error
Runtime error
| -- Initial database schema for chat agent | |
| -- Migration: 001_initial_schema | |
| -- Description: Create tables for chat sessions, messages, and language contexts | |
| -- Enable UUID extension for PostgreSQL | |
| CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; | |
| -- Create chat_sessions table | |
| CREATE TABLE chat_sessions ( | |
| id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), | |
| user_id UUID NOT NULL, | |
| language VARCHAR(50) NOT NULL DEFAULT 'python', | |
| last_active TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| message_count INTEGER NOT NULL DEFAULT 0, | |
| is_active BOOLEAN NOT NULL DEFAULT TRUE, | |
| session_metadata JSONB DEFAULT '{}', | |
| created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP | |
| ); | |
| -- Create indexes for chat_sessions | |
| CREATE INDEX idx_chat_sessions_user_id ON chat_sessions(user_id); | |
| CREATE INDEX idx_chat_sessions_last_active ON chat_sessions(last_active); | |
| CREATE INDEX idx_chat_sessions_is_active ON chat_sessions(is_active); | |
| -- Create messages table | |
| CREATE TABLE messages ( | |
| id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), | |
| session_id UUID NOT NULL REFERENCES chat_sessions(id) ON DELETE CASCADE, | |
| role VARCHAR(20) NOT NULL CHECK (role IN ('user', 'assistant')), | |
| content TEXT NOT NULL, | |
| language VARCHAR(50) NOT NULL DEFAULT 'python', | |
| timestamp TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| message_metadata JSONB DEFAULT '{}', | |
| created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP | |
| ); | |
| -- Create indexes for messages | |
| CREATE INDEX idx_messages_session_id ON messages(session_id); | |
| CREATE INDEX idx_messages_timestamp ON messages(timestamp); | |
| CREATE INDEX idx_messages_role ON messages(role); | |
| -- Create language_contexts table | |
| CREATE TABLE language_contexts ( | |
| id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), | |
| session_id UUID NOT NULL REFERENCES chat_sessions(id) ON DELETE CASCADE, | |
| language VARCHAR(50) NOT NULL DEFAULT 'python', | |
| prompt_template TEXT, | |
| syntax_highlighting VARCHAR(50), | |
| updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP | |
| ); | |
| -- Create indexes for language_contexts | |
| CREATE UNIQUE INDEX idx_language_contexts_session_id ON language_contexts(session_id); | |
| -- Create function to update updated_at timestamp | |
| CREATE OR REPLACE FUNCTION update_updated_at_column() | |
| RETURNS TRIGGER AS $$ | |
| BEGIN | |
| NEW.updated_at = CURRENT_TIMESTAMP; | |
| RETURN NEW; | |
| END; | |
| $$ language 'plpgsql'; | |
| -- Create triggers to automatically update updated_at | |
| CREATE TRIGGER update_chat_sessions_updated_at | |
| BEFORE UPDATE ON chat_sessions | |
| FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); | |
| CREATE TRIGGER update_messages_updated_at | |
| BEFORE UPDATE ON messages | |
| FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); | |
| CREATE TRIGGER update_language_contexts_updated_at | |
| BEFORE UPDATE ON language_contexts | |
| FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); | |
| -- Insert default supported languages data (optional) | |
| -- This can be used for reference or validation | |
| CREATE TABLE supported_languages ( | |
| code VARCHAR(50) PRIMARY KEY, | |
| name VARCHAR(100) NOT NULL, | |
| syntax_highlighting VARCHAR(50), | |
| file_extensions TEXT[], | |
| prompt_template TEXT, | |
| created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP | |
| ); | |
| -- Insert supported languages | |
| INSERT INTO supported_languages (code, name, syntax_highlighting, file_extensions, prompt_template) VALUES | |
| ('python', 'Python', 'python', ARRAY['.py', '.pyw'], 'You are a helpful Python programming assistant. Provide clear, beginner-friendly explanations and examples.'), | |
| ('javascript', 'JavaScript', 'javascript', ARRAY['.js', '.mjs'], 'You are a helpful JavaScript programming assistant. Provide clear, beginner-friendly explanations and examples.'), | |
| ('typescript', 'TypeScript', 'typescript', ARRAY['.ts', '.tsx'], 'You are a helpful TypeScript programming assistant. Provide clear, beginner-friendly explanations and examples.'), | |
| ('java', 'Java', 'java', ARRAY['.java'], 'You are a helpful Java programming assistant. Provide clear, beginner-friendly explanations and examples.'), | |
| ('cpp', 'C++', 'cpp', ARRAY['.cpp', '.cc', '.cxx', '.h', '.hpp'], 'You are a helpful C++ programming assistant. Provide clear, beginner-friendly explanations and examples.'), | |
| ('csharp', 'C#', 'csharp', ARRAY['.cs'], 'You are a helpful C# programming assistant. Provide clear, beginner-friendly explanations and examples.'), | |
| ('go', 'Go', 'go', ARRAY['.go'], 'You are a helpful Go programming assistant. Provide clear, beginner-friendly explanations and examples.'), | |
| ('rust', 'Rust', 'rust', ARRAY['.rs'], 'You are a helpful Rust programming assistant. Provide clear, beginner-friendly explanations and examples.'); | |
| -- Add comments for documentation | |
| COMMENT ON TABLE chat_sessions IS 'Stores user chat sessions with language context and activity tracking'; | |
| COMMENT ON TABLE messages IS 'Stores individual chat messages with role, content, and language information'; | |
| COMMENT ON TABLE language_contexts IS 'Stores session-specific language settings and prompt templates'; | |
| COMMENT ON TABLE supported_languages IS 'Reference table for supported programming languages and their configurations'; | |
| COMMENT ON COLUMN chat_sessions.user_id IS 'UUID of the user who owns this chat session'; | |
| COMMENT ON COLUMN chat_sessions.language IS 'Current programming language for this session'; | |
| COMMENT ON COLUMN chat_sessions.last_active IS 'Timestamp of last activity in this session'; | |
| COMMENT ON COLUMN chat_sessions.message_count IS 'Total number of messages in this session'; | |
| COMMENT ON COLUMN chat_sessions.is_active IS 'Whether this session is currently active'; | |
| COMMENT ON COLUMN chat_sessions.session_metadata IS 'Additional session metadata as JSON'; | |
| COMMENT ON COLUMN messages.session_id IS 'Reference to the chat session this message belongs to'; | |
| COMMENT ON COLUMN messages.role IS 'Role of the message sender: user or assistant'; | |
| COMMENT ON COLUMN messages.content IS 'The actual message content'; | |
| COMMENT ON COLUMN messages.language IS 'Programming language context when this message was sent'; | |
| COMMENT ON COLUMN messages.timestamp IS 'When this message was created'; | |
| COMMENT ON COLUMN messages.message_metadata IS 'Additional message metadata as JSON'; | |
| COMMENT ON COLUMN language_contexts.session_id IS 'Reference to the chat session this context belongs to'; | |
| COMMENT ON COLUMN language_contexts.language IS 'Current programming language for the session'; | |
| COMMENT ON COLUMN language_contexts.prompt_template IS 'Custom prompt template for this language'; | |
| COMMENT ON COLUMN language_contexts.syntax_highlighting IS 'Syntax highlighting scheme identifier'; |