-- 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 '模型参数配置JSON（max_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`);
