-- Migration: Create Chat History Tables -- Description: Create tables for chat history functionality based on the old web API structure -- Date: 2024-01-01 -- Create chat_sessions table CREATE TABLE IF NOT EXISTS chat_sessions ( id SERIAL PRIMARY KEY, session_id VARCHAR(255) NOT NULL UNIQUE, user_id INTEGER NOT NULL, agent_id VARCHAR(255) NOT NULL, title VARCHAR(255) NOT NULL DEFAULT 'Chat Session', message_count INTEGER DEFAULT 0, status VARCHAR(50) DEFAULT 'active', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Create chat_messages_new table (to avoid conflict with existing chat_messages) CREATE TABLE IF NOT EXISTS chat_messages_new ( id SERIAL PRIMARY KEY, session_id VARCHAR(255) NOT NULL, message_type VARCHAR(50) NOT NULL CHECK (message_type IN ('user', 'assistant')), content TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Create indexes for better performance CREATE INDEX IF NOT EXISTS idx_chat_sessions_user_id ON chat_sessions (user_id); CREATE INDEX IF NOT EXISTS idx_chat_sessions_agent_id ON chat_sessions (agent_id); CREATE INDEX IF NOT EXISTS idx_chat_sessions_session_id ON chat_sessions (session_id); CREATE INDEX IF NOT EXISTS idx_chat_sessions_created_at ON chat_sessions (created_at); CREATE INDEX IF NOT EXISTS idx_chat_messages_new_session_id ON chat_messages_new (session_id); CREATE INDEX IF NOT EXISTS idx_chat_messages_new_created_at ON chat_messages_new (created_at); -- Add foreign key constraints ALTER TABLE chat_sessions ADD CONSTRAINT fk_chat_sessions_user_id FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE; ALTER TABLE chat_messages_new ADD CONSTRAINT fk_chat_messages_new_session_id FOREIGN KEY (session_id) REFERENCES chat_sessions(session_id) ON DELETE CASCADE; -- Insert sample data (optional) INSERT INTO chat_sessions (session_id, user_id, agent_id, title, message_count) VALUES ('sample-session-123', 1, 'd04bbced-ae93-4fb3-a015-9472e4e5e539', 'Sample Chat Session', 2) ON CONFLICT (session_id) DO NOTHING; INSERT INTO chat_messages_new (session_id, message_type, content) VALUES ('sample-session-123', 'user', 'Halo, ada yang bisa saya tanyakan?'), ('sample-session-123', 'assistant', 'Halo! Tentu saja, saya siap membantu Anda dengan pertanyaan apapun.') ON CONFLICT DO NOTHING;