- Sync engine: BaseSync abstract class + 4 sync modules (users/pricing/uapi/llmage) - Checkpoint management via sync_state table - Batch processing with retry and exponential backoff - Incremental fetch from Sage DB via sqlor - UPSERT to local cache tables - API handlers: balance/accounting/users/pricing/health - Balance: cache lookup + Sage fallback - Accounting: create with idempotency, query with filters/pagination - Users: keyword search, org filter - Pricing: filter by ppid/llmid/type/status - Health: basic + readiness checks (DB connectivity) - DAPI auth: middleware + authenticate_request function - HMAC-SHA256 signature verification - Timestamp window validation - Sage downapikey table lookup - HTTP client: SageHttpClient with aiohttp - Auto DAPI signature injection - Connection pooling, retry, timeout - Router: 12 routes registered - Module init: load_sageapi() wires everything to ServerEnv
123 lines
5.9 KiB
SQL
123 lines
5.9 KiB
SQL
-- =============================================================================
|
|
-- SageAPI Cache Tables DDL
|
|
-- These tables store synchronized data from the Sage database.
|
|
-- Run against the sageapi database.
|
|
-- =============================================================================
|
|
|
|
-- Checkpoint table: tracks the last sync timestamp for each module
|
|
CREATE TABLE IF NOT EXISTS sync_state (
|
|
state_key VARCHAR(64) NOT NULL PRIMARY KEY,
|
|
last_sync_ts VARCHAR(64) DEFAULT NULL,
|
|
created_at VARCHAR(32) NOT NULL,
|
|
updated_at VARCHAR(32) NOT NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- =============================================================================
|
|
-- users_cache: synced from Sage users / organi / organization tables
|
|
-- =============================================================================
|
|
CREATE TABLE IF NOT EXISTS users_cache (
|
|
user_id BIGINT NOT NULL PRIMARY KEY,
|
|
username VARCHAR(128) DEFAULT NULL,
|
|
email VARCHAR(256) DEFAULT NULL,
|
|
user_status INT DEFAULT 0,
|
|
user_created_at VARCHAR(32) DEFAULT NULL,
|
|
user_updated_at VARCHAR(32) DEFAULT NULL,
|
|
organi_id BIGINT DEFAULT NULL,
|
|
organi_name VARCHAR(256) DEFAULT NULL,
|
|
organi_parent_id BIGINT DEFAULT NULL,
|
|
org_id BIGINT DEFAULT NULL,
|
|
org_name VARCHAR(256) DEFAULT NULL,
|
|
org_type VARCHAR(64) DEFAULT NULL,
|
|
org_status INT DEFAULT 0,
|
|
org_updated_at VARCHAR(32) DEFAULT NULL,
|
|
synced_at VARCHAR(32) NOT NULL,
|
|
UNIQUE KEY uk_organi (organi_id),
|
|
KEY idx_updated (user_updated_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- =============================================================================
|
|
-- pricing_cache: synced from Sage pricing_program / pricing_program_timing
|
|
-- =============================================================================
|
|
CREATE TABLE IF NOT EXISTS pricing_cache (
|
|
program_id BIGINT NOT NULL,
|
|
program_name VARCHAR(256) DEFAULT NULL,
|
|
program_code VARCHAR(128) DEFAULT NULL,
|
|
program_type VARCHAR(64) DEFAULT NULL,
|
|
program_status INT DEFAULT 0,
|
|
description TEXT DEFAULT NULL,
|
|
program_created_at VARCHAR(32) DEFAULT NULL,
|
|
program_updated_at VARCHAR(32) DEFAULT NULL,
|
|
timing_id BIGINT DEFAULT NULL,
|
|
start_time VARCHAR(32) DEFAULT NULL,
|
|
end_time VARCHAR(32) DEFAULT NULL,
|
|
duration INT DEFAULT NULL,
|
|
repeat_rule VARCHAR(256) DEFAULT NULL,
|
|
timezone VARCHAR(64) DEFAULT NULL,
|
|
timing_status INT DEFAULT 0,
|
|
timing_updated_at VARCHAR(32) DEFAULT NULL,
|
|
synced_at VARCHAR(32) NOT NULL,
|
|
PRIMARY KEY (program_id, timing_id),
|
|
KEY idx_program_updated (program_updated_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- =============================================================================
|
|
-- uapi_cache: synced from Sage uapi / upapp tables
|
|
-- =============================================================================
|
|
CREATE TABLE IF NOT EXISTS uapi_cache (
|
|
uapi_id BIGINT NOT NULL,
|
|
api_name VARCHAR(256) DEFAULT NULL,
|
|
api_path VARCHAR(512) DEFAULT NULL,
|
|
api_method VARCHAR(16) DEFAULT 'GET',
|
|
api_version VARCHAR(32) DEFAULT NULL,
|
|
api_desc TEXT DEFAULT NULL,
|
|
uapi_status INT DEFAULT 0,
|
|
auth_required TINYINT DEFAULT 0,
|
|
uapi_created_at VARCHAR(32) DEFAULT NULL,
|
|
uapi_updated_at VARCHAR(32) DEFAULT NULL,
|
|
upapp_id BIGINT DEFAULT NULL,
|
|
app_name VARCHAR(256) DEFAULT NULL,
|
|
app_code VARCHAR(128) DEFAULT NULL,
|
|
app_type VARCHAR(64) DEFAULT NULL,
|
|
app_desc TEXT DEFAULT NULL,
|
|
app_owner VARCHAR(128) DEFAULT NULL,
|
|
upapp_status INT DEFAULT 0,
|
|
upapp_updated_at VARCHAR(32) DEFAULT NULL,
|
|
synced_at VARCHAR(32) NOT NULL,
|
|
PRIMARY KEY (uapi_id, upapp_id),
|
|
KEY idx_uapi_updated (uapi_updated_at),
|
|
KEY idx_upapp_id (upapp_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- =============================================================================
|
|
-- llmage_cache: synced from Sage llm / llmcatelog / llm_api_map tables
|
|
-- =============================================================================
|
|
CREATE TABLE IF NOT EXISTS llmage_cache (
|
|
llm_id BIGINT NOT NULL,
|
|
model_name VARCHAR(256) DEFAULT NULL,
|
|
model_version VARCHAR(64) DEFAULT NULL,
|
|
provider VARCHAR(128) DEFAULT NULL,
|
|
model_type VARCHAR(64) DEFAULT NULL,
|
|
llm_status INT DEFAULT 0,
|
|
llm_description TEXT DEFAULT NULL,
|
|
llm_created_at VARCHAR(32) DEFAULT NULL,
|
|
llm_updated_at VARCHAR(32) DEFAULT NULL,
|
|
catelog_id BIGINT DEFAULT NULL,
|
|
catelog_name VARCHAR(256) DEFAULT NULL,
|
|
catelog_code VARCHAR(128) DEFAULT NULL,
|
|
catelog_sort INT DEFAULT 0,
|
|
catelog_status INT DEFAULT 0,
|
|
catelog_updated_at VARCHAR(32) DEFAULT NULL,
|
|
api_map_id BIGINT DEFAULT NULL,
|
|
api_name VARCHAR(256) DEFAULT NULL,
|
|
api_endpoint VARCHAR(512) DEFAULT NULL,
|
|
api_version VARCHAR(32) DEFAULT NULL,
|
|
auth_type VARCHAR(32) DEFAULT NULL,
|
|
rate_limit INT DEFAULT NULL,
|
|
api_map_status INT DEFAULT 0,
|
|
api_map_updated_at VARCHAR(32) DEFAULT NULL,
|
|
synced_at VARCHAR(32) NOT NULL,
|
|
PRIMARY KEY (llm_id, catelog_id, api_map_id),
|
|
KEY idx_llm_updated (llm_updated_at),
|
|
KEY idx_catelog_id (catelog_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|