Add full monorepo: virtual-banker, backend, frontend, docs, scripts, deployment
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
55
database/migrations/001_sessions.up.sql
Normal file
55
database/migrations/001_sessions.up.sql
Normal file
@@ -0,0 +1,55 @@
|
||||
-- Create sessions table
|
||||
CREATE TABLE IF NOT EXISTS sessions (
|
||||
id VARCHAR(255) PRIMARY KEY,
|
||||
tenant_id VARCHAR(255) NOT NULL,
|
||||
user_id VARCHAR(255) NOT NULL,
|
||||
ephemeral_token VARCHAR(512) NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
expires_at TIMESTAMP NOT NULL,
|
||||
last_activity_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
ended_at TIMESTAMP,
|
||||
INDEX idx_tenant_user (tenant_id, user_id),
|
||||
INDEX idx_expires_at (expires_at),
|
||||
INDEX idx_ended_at (ended_at)
|
||||
);
|
||||
|
||||
-- Create tenants table
|
||||
CREATE TABLE IF NOT EXISTS tenants (
|
||||
id VARCHAR(255) PRIMARY KEY,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
theme JSONB,
|
||||
avatar_enabled BOOLEAN DEFAULT true,
|
||||
greeting TEXT,
|
||||
allowed_tools JSONB DEFAULT '[]'::jsonb,
|
||||
policy JSONB,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Create conversations table
|
||||
CREATE TABLE IF NOT EXISTS conversations (
|
||||
id VARCHAR(255) PRIMARY KEY,
|
||||
session_id VARCHAR(255) NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
|
||||
user_id VARCHAR(255) NOT NULL,
|
||||
tenant_id VARCHAR(255) NOT NULL,
|
||||
started_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
ended_at TIMESTAMP,
|
||||
metadata JSONB,
|
||||
INDEX idx_session (session_id),
|
||||
INDEX idx_user (user_id),
|
||||
INDEX idx_tenant (tenant_id)
|
||||
);
|
||||
|
||||
-- Create conversation_messages table
|
||||
CREATE TABLE IF NOT EXISTS conversation_messages (
|
||||
id VARCHAR(255) PRIMARY KEY,
|
||||
conversation_id VARCHAR(255) NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
|
||||
role VARCHAR(50) NOT NULL, -- 'user' or 'assistant'
|
||||
content TEXT NOT NULL,
|
||||
audio_url TEXT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
metadata JSONB,
|
||||
INDEX idx_conversation (conversation_id),
|
||||
INDEX idx_created_at (created_at)
|
||||
);
|
||||
|
||||
15
database/migrations/002_conversations.up.sql
Normal file
15
database/migrations/002_conversations.up.sql
Normal file
@@ -0,0 +1,15 @@
|
||||
-- Additional indexes for conversations
|
||||
CREATE INDEX IF NOT EXISTS idx_conversations_started_at ON conversations(started_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_conversations_ended_at ON conversations(ended_at);
|
||||
|
||||
-- Create conversation_state table for workflow state
|
||||
CREATE TABLE IF NOT EXISTS conversation_state (
|
||||
session_id VARCHAR(255) PRIMARY KEY REFERENCES sessions(id) ON DELETE CASCADE,
|
||||
workflow VARCHAR(255),
|
||||
step VARCHAR(255),
|
||||
context JSONB DEFAULT '{}'::jsonb,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
expires_at TIMESTAMP
|
||||
);
|
||||
|
||||
12
database/migrations/003_tenants.up.sql
Normal file
12
database/migrations/003_tenants.up.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
-- Add default tenant if not exists
|
||||
INSERT INTO tenants (id, name, theme, avatar_enabled, greeting, allowed_tools, policy)
|
||||
VALUES (
|
||||
'default',
|
||||
'Default Tenant',
|
||||
'{"primaryColor": "#0066cc", "secondaryColor": "#004499"}'::jsonb,
|
||||
true,
|
||||
'Hello! How can I help you today?',
|
||||
'[]'::jsonb,
|
||||
'{"max_session_duration_minutes": 30, "rate_limit_per_minute": 10, "require_consent": true}'::jsonb
|
||||
) ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
21
database/migrations/004_vector_extension.up.sql
Normal file
21
database/migrations/004_vector_extension.up.sql
Normal file
@@ -0,0 +1,21 @@
|
||||
-- Enable pgvector extension for RAG functionality
|
||||
CREATE EXTENSION IF NOT EXISTS vector;
|
||||
|
||||
-- Create knowledge_base table for RAG
|
||||
CREATE TABLE IF NOT EXISTS knowledge_base (
|
||||
id VARCHAR(255) PRIMARY KEY,
|
||||
tenant_id VARCHAR(255) NOT NULL,
|
||||
title VARCHAR(500),
|
||||
content TEXT NOT NULL,
|
||||
embedding vector(1536), -- OpenAI ada-002 dimension, adjust as needed
|
||||
metadata JSONB,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
INDEX idx_tenant (tenant_id)
|
||||
);
|
||||
|
||||
-- Create index for vector similarity search
|
||||
CREATE INDEX IF NOT EXISTS idx_knowledge_embedding ON knowledge_base
|
||||
USING ivfflat (embedding vector_cosine_ops)
|
||||
WITH (lists = 100);
|
||||
|
||||
25
database/migrations/005_user_profiles.up.sql
Normal file
25
database/migrations/005_user_profiles.up.sql
Normal file
@@ -0,0 +1,25 @@
|
||||
-- Create user_profiles table for memory service
|
||||
CREATE TABLE IF NOT EXISTS user_profiles (
|
||||
user_id VARCHAR(255) NOT NULL,
|
||||
tenant_id VARCHAR(255) NOT NULL,
|
||||
preferences JSONB DEFAULT '{}'::jsonb,
|
||||
context JSONB DEFAULT '{}'::jsonb,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
PRIMARY KEY (user_id, tenant_id),
|
||||
INDEX idx_tenant (tenant_id)
|
||||
);
|
||||
|
||||
-- Create conversation_history table
|
||||
CREATE TABLE IF NOT EXISTS conversation_history (
|
||||
id VARCHAR(255) PRIMARY KEY,
|
||||
user_id VARCHAR(255) NOT NULL,
|
||||
tenant_id VARCHAR(255) NOT NULL,
|
||||
session_id VARCHAR(255) NOT NULL,
|
||||
messages JSONB NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
INDEX idx_user_tenant (user_id, tenant_id),
|
||||
INDEX idx_session (session_id),
|
||||
INDEX idx_created_at (created_at)
|
||||
);
|
||||
|
||||
82
database/schema.sql
Normal file
82
database/schema.sql
Normal file
@@ -0,0 +1,82 @@
|
||||
-- Virtual Banker Database Schema
|
||||
-- This file contains the complete schema for reference
|
||||
|
||||
-- Sessions
|
||||
CREATE TABLE IF NOT EXISTS sessions (
|
||||
id VARCHAR(255) PRIMARY KEY,
|
||||
tenant_id VARCHAR(255) NOT NULL,
|
||||
user_id VARCHAR(255) NOT NULL,
|
||||
ephemeral_token VARCHAR(512) NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
expires_at TIMESTAMP NOT NULL,
|
||||
last_activity_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
ended_at TIMESTAMP,
|
||||
INDEX idx_tenant_user (tenant_id, user_id),
|
||||
INDEX idx_expires_at (expires_at),
|
||||
INDEX idx_ended_at (ended_at)
|
||||
);
|
||||
|
||||
-- Tenants
|
||||
CREATE TABLE IF NOT EXISTS tenants (
|
||||
id VARCHAR(255) PRIMARY KEY,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
theme JSONB,
|
||||
avatar_enabled BOOLEAN DEFAULT true,
|
||||
greeting TEXT,
|
||||
allowed_tools JSONB DEFAULT '[]'::jsonb,
|
||||
policy JSONB,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Conversations
|
||||
CREATE TABLE IF NOT EXISTS conversations (
|
||||
id VARCHAR(255) PRIMARY KEY,
|
||||
session_id VARCHAR(255) NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
|
||||
user_id VARCHAR(255) NOT NULL,
|
||||
tenant_id VARCHAR(255) NOT NULL,
|
||||
started_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
ended_at TIMESTAMP,
|
||||
metadata JSONB,
|
||||
INDEX idx_session (session_id),
|
||||
INDEX idx_user (user_id),
|
||||
INDEX idx_tenant (tenant_id)
|
||||
);
|
||||
|
||||
-- Conversation Messages
|
||||
CREATE TABLE IF NOT EXISTS conversation_messages (
|
||||
id VARCHAR(255) PRIMARY KEY,
|
||||
conversation_id VARCHAR(255) NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
|
||||
role VARCHAR(50) NOT NULL,
|
||||
content TEXT NOT NULL,
|
||||
audio_url TEXT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
metadata JSONB,
|
||||
INDEX idx_conversation (conversation_id),
|
||||
INDEX idx_created_at (created_at)
|
||||
);
|
||||
|
||||
-- Conversation State
|
||||
CREATE TABLE IF NOT EXISTS conversation_state (
|
||||
session_id VARCHAR(255) PRIMARY KEY REFERENCES sessions(id) ON DELETE CASCADE,
|
||||
workflow VARCHAR(255),
|
||||
step VARCHAR(255),
|
||||
context JSONB DEFAULT '{}'::jsonb,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
expires_at TIMESTAMP
|
||||
);
|
||||
|
||||
-- Knowledge Base (requires pgvector extension)
|
||||
CREATE TABLE IF NOT EXISTS knowledge_base (
|
||||
id VARCHAR(255) PRIMARY KEY,
|
||||
tenant_id VARCHAR(255) NOT NULL,
|
||||
title VARCHAR(500),
|
||||
content TEXT NOT NULL,
|
||||
embedding vector(1536),
|
||||
metadata JSONB,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
INDEX idx_tenant (tenant_id)
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user