-- 1. 存储模块定义（例如：AI 决定创建一个“线索管理”模块，它的字段定义存这里）
CREATE TABLE sys_entities (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    entity_code VARCHAR(50) UNIQUE NOT NULL, -- 模块标识，如 'crm_lead'
    entity_name VARCHAR(100) NOT NULL,        -- 模块名称，如 '销售线索'
    schema_definition JSONB NOT NULL,        -- 核心：存储字段定义的 JSON (类型、标签、校验)
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

-- 2. 存储动态业务数据（所有的业务数据都进这一张表，靠 entity_id 区分）
CREATE TABLE sys_dynamic_data (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    entity_id UUID REFERENCES sys_entities(id),
    data JSONB NOT NULL,                      -- 核心：存储具体的业务字段数据
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
    creator_id VARCHAR(50)                   -- 预留租户或用户 ID
);

-- 3. 存储 AI 会话记忆（LangChain4j 自动持久化对话用）
CREATE TABLE chat_memory (
    id SERIAL PRIMARY KEY,
    chat_session_id VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,                   -- 存储对话内容
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

-- 为 JSONB 字段创建 GIN 索引，保证以后千万级数据的查询速度
CREATE INDEX idx_entity_data ON sys_dynamic_data USING GIN (data);
