sageapi/db/schema.sql
Hermes Agent acb9674375 feat: CRUD definitions, build script, DDL generation
- 3 CRUD JSON files: customer_balance, accounting_records, sync_state
- Build script with model validation, CRUD validation, DDL generation
- DDL: db/schema.sql (72 lines, 7 tables)
- Scripts: validate_models.py, validate_crud.py, generate_ddl.py
2026-05-20 18:28:59 +08:00

153 lines
7.6 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- SageAPI DDL (auto-generated)
CREATE TABLE IF NOT EXISTS `accounting_records` (
`id` VARCHAR(32) NOT NULL DEFAULT COMMENT '主键',
`customer_id` VARCHAR(32) NOT NULL DEFAULT COMMENT '客户ID',
`llmid` VARCHAR(32) NULL DEFAULT COMMENT '模型ID',
`model_name` VARCHAR(128) NULL DEFAULT COMMENT '模型名称',
`pricing_id` VARCHAR(32) NULL DEFAULT COMMENT '定价ID',
`input_tokens` BIGINT NULL COMMENT '输入token数',
`output_tokens` BIGINT NULL COMMENT '输出token数',
`total_tokens` BIGINT NULL COMMENT '总token数',
`quantity` DECIMAL(15,4) NULL COMMENT '用量(图片数/分钟数等)',
`amount` DECIMAL(15,6) NOT NULL DEFAULT 0.0 COMMENT '金额',
`currency` VARCHAR(8) NOT NULL DEFAULT 'CNY' COMMENT '货币单位',
`request_id` VARCHAR(64) NULL DEFAULT COMMENT '请求ID幂等键',
`transno` VARCHAR(64) NULL DEFAULT COMMENT '事务号',
`status` VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT '状态: pending/accounted/failed',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `accounting_records` ADD INDEX `idx_customer_id` (`customer_id`);
ALTER TABLE `accounting_records` ADD INDEX `idx_llmid` (`llmid`);
ALTER TABLE `accounting_records` ADD UNIQUE `idx_request_id` (`request_id`);
ALTER TABLE `accounting_records` ADD INDEX `idx_status` (`status`);
ALTER TABLE `accounting_records` ADD INDEX `idx_created_at` (`created_at`);
CREATE TABLE IF NOT EXISTS `customer_balance` (
`id` VARCHAR(32) NOT NULL DEFAULT COMMENT '主键,即 customer_id',
`balance` DECIMAL(15,4) NOT NULL DEFAULT 0.0 COMMENT '当前余额',
`currency` VARCHAR(8) NOT NULL DEFAULT 'CNY' COMMENT '货币单位',
`credit_limit` DECIMAL(15,4) NULL COMMENT '信用额度',
`last_recharge` DATETIME NULL COMMENT '最后充值时间',
`last_consumption` DATETIME NULL COMMENT '最后消费时间',
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态: active/suspended/arrears',
`sync_version` VARCHAR(32) NULL DEFAULT COMMENT '同步版本号',
`cached_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '缓存更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `customer_balance` ADD INDEX `idx_status` (`status`);
ALTER TABLE `customer_balance` ADD INDEX `idx_balance` (`balance`);
CREATE TABLE IF NOT EXISTS `llmage_cache` (
`id` VARCHAR(32) NOT NULL DEFAULT COMMENT '主键',
`llmid` VARCHAR(32) NOT NULL DEFAULT COMMENT '关联模型ID',
`model_name` VARCHAR(128) NULL DEFAULT COMMENT '模型名称',
`upappid` VARCHAR(32) NOT NULL DEFAULT COMMENT '上游应用ID',
`apiname` VARCHAR(128) NOT NULL DEFAULT COMMENT 'API名称',
`api_url` VARCHAR(512) NULL DEFAULT COMMENT 'API端点URL',
`api_params` TEXT NULL COMMENT 'API参数配置JSON',
`model_params` TEXT NULL COMMENT '模型参数配置JSONmax_tokens, temperature等',
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态: active/inactive',
`sync_version` VARCHAR(32) NULL DEFAULT COMMENT '同步版本号',
`cached_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '缓存写入时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `llmage_cache` ADD INDEX `idx_llmid` (`llmid`);
ALTER TABLE `llmage_cache` ADD INDEX `idx_upappid` (`upappid`);
ALTER TABLE `llmage_cache` ADD INDEX `idx_apiname` (`apiname`);
CREATE TABLE IF NOT EXISTS `pricing_cache` (
`id` VARCHAR(32) NOT NULL DEFAULT COMMENT '主键,对应 pricing_program id (ppid)',
`llmid` VARCHAR(32) NOT NULL DEFAULT COMMENT '关联模型ID',
`model_name` VARCHAR(128) NULL DEFAULT COMMENT '模型名称',
`pricing_type` VARCHAR(32) NOT NULL DEFAULT COMMENT '计费类型: token/image/video/audio',
`input_price` DECIMAL(10,6) NULL COMMENT '输入单价每千token',
`output_price` DECIMAL(10,6) NULL COMMENT '输出单价每千token',
`unit_price` DECIMAL(10,6) NULL COMMENT '统一单价(按次/按图/按分钟等)',
`currency` VARCHAR(8) NOT NULL DEFAULT 'CNY' COMMENT '货币单位',
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态: active/inactive/deprecated',
`effective_from` DATETIME NULL COMMENT '生效时间',
`effective_to` DATETIME NULL COMMENT '失效时间',
`sync_version` VARCHAR(32) NULL DEFAULT COMMENT '同步版本号',
`cached_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '缓存写入时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `pricing_cache` ADD INDEX `idx_llmid` (`llmid`);
ALTER TABLE `pricing_cache` ADD INDEX `idx_pricing_type` (`pricing_type`);
ALTER TABLE `pricing_cache` ADD INDEX `idx_status` (`status`);
CREATE TABLE IF NOT EXISTS `sync_state` (
`id` VARCHAR(32) NOT NULL DEFAULT COMMENT '主键',
`entity_type` VARCHAR(32) NOT NULL DEFAULT COMMENT '实体类型: users/pricing/llmage/uapi',
`entity_id` VARCHAR(64) NULL DEFAULT COMMENT '实体标识(全量同步时为空)',
`last_sync_time` DATETIME NULL COMMENT '最后同步时间',
`sync_version` VARCHAR(32) NULL DEFAULT COMMENT 'Sage返回的版本标识',
`sync_status` VARCHAR(16) NOT NULL DEFAULT 'success' COMMENT '同步状态: success/pending/failed',
`error_msg` TEXT NULL COMMENT '失败原因',
`retry_count` INT NOT NULL DEFAULT 0 COMMENT '重试次数',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `sync_state` ADD INDEX `idx_entity_type` (`entity_type`);
ALTER TABLE `sync_state` ADD UNIQUE `idx_entity_type_id` (`entity_type`,`entity_id`);
ALTER TABLE `sync_state` ADD INDEX `idx_sync_status` (`sync_status`);
CREATE TABLE IF NOT EXISTS `uapi_cache` (
`id` VARCHAR(32) NOT NULL DEFAULT COMMENT '主键',
`upappid` VARCHAR(32) NOT NULL DEFAULT COMMENT '上游应用ID',
`apiname` VARCHAR(128) NOT NULL DEFAULT COMMENT 'API名称',
`method` VARCHAR(16) NULL DEFAULT 'POST' COMMENT 'HTTP方法',
`endpoint` VARCHAR(512) NULL DEFAULT COMMENT 'API端点',
`auth_type` VARCHAR(32) NULL DEFAULT 'bearer' COMMENT '认证类型',
`rate_limit` INT NULL COMMENT '速率限制(次/分钟)',
`description` TEXT NULL COMMENT 'API描述',
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态',
`sync_version` VARCHAR(32) NULL DEFAULT COMMENT '同步版本号',
`cached_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '缓存写入时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `uapi_cache` ADD UNIQUE `idx_upappid_apiname` (`upappid`,`apiname`);
ALTER TABLE `uapi_cache` ADD INDEX `idx_status` (`status`);
CREATE TABLE IF NOT EXISTS `users_cache` (
`id` VARCHAR(32) NOT NULL DEFAULT COMMENT '主键,对应 users 表 id',
`username` VARCHAR(128) NOT NULL DEFAULT COMMENT '用户名',
`orgid` VARCHAR(32) NULL DEFAULT COMMENT '组织ID',
`orgname` VARCHAR(255) NULL DEFAULT COMMENT '组织名称',
`email` VARCHAR(128) NULL DEFAULT COMMENT '邮箱',
`phone` VARCHAR(32) NULL DEFAULT COMMENT '手机号',
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态: active/inactive/suspended',
`created_at` DATETIME NULL COMMENT '创建时间',
`updated_at` DATETIME NULL COMMENT '更新时间',
`sync_version` VARCHAR(32) NULL DEFAULT COMMENT '同步版本号',
`cached_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '缓存写入时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `users_cache` ADD INDEX `idx_username` (`username`);
ALTER TABLE `users_cache` ADD INDEX `idx_orgid` (`orgid`);
ALTER TABLE `users_cache` ADD INDEX `idx_sync_version` (`sync_version`);