2026-08-03 09:34:08 +08:00
|
|
|
|
-- 平台治理:租户 / 审批 / 审计(字段以 platform_store 实际写入为准)
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS tenants (
|
|
|
|
|
|
id TEXT PRIMARY KEY,
|
|
|
|
|
|
name TEXT NOT NULL,
|
|
|
|
|
|
code TEXT,
|
|
|
|
|
|
status TEXT DEFAULT 'active',
|
|
|
|
|
|
owner_user_id TEXT,
|
|
|
|
|
|
quota TEXT,
|
|
|
|
|
|
retention_policy_id TEXT,
|
|
|
|
|
|
create_time TEXT
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS approval_templates (
|
|
|
|
|
|
id TEXT PRIMARY KEY,
|
|
|
|
|
|
name TEXT NOT NULL,
|
|
|
|
|
|
steps TEXT,
|
|
|
|
|
|
create_time TEXT
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS approval_instances (
|
|
|
|
|
|
id TEXT PRIMARY KEY,
|
|
|
|
|
|
template_id TEXT,
|
|
|
|
|
|
resource_type TEXT,
|
|
|
|
|
|
resource_id TEXT,
|
|
|
|
|
|
applicant_id TEXT,
|
|
|
|
|
|
status TEXT DEFAULT 'pending',
|
|
|
|
|
|
current_step INTEGER DEFAULT 0,
|
|
|
|
|
|
create_time TEXT
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS approval_steps (
|
|
|
|
|
|
id TEXT PRIMARY KEY,
|
|
|
|
|
|
instance_id TEXT,
|
|
|
|
|
|
step_index INTEGER,
|
|
|
|
|
|
approver_id TEXT,
|
|
|
|
|
|
status TEXT DEFAULT 'pending',
|
|
|
|
|
|
comment TEXT,
|
|
|
|
|
|
time TEXT
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS audit_logs (
|
|
|
|
|
|
id TEXT PRIMARY KEY,
|
|
|
|
|
|
tenant_id TEXT,
|
|
|
|
|
|
project_id TEXT,
|
|
|
|
|
|
actor_id TEXT,
|
|
|
|
|
|
action TEXT,
|
|
|
|
|
|
target_type TEXT,
|
|
|
|
|
|
target_id TEXT,
|
|
|
|
|
|
detail TEXT,
|
|
|
|
|
|
client_ip TEXT,
|
|
|
|
|
|
time TEXT
|
|
|
|
|
|
);
|
|
|
|
|
|
|
2026-08-17 16:04:04 +08:00
|
|
|
|
-- 幂等升级 audit_logs 表:新增字段(已存在则跳过)
|
|
|
|
|
|
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS trace_id TEXT;
|
|
|
|
|
|
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS request_method TEXT;
|
|
|
|
|
|
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS request_path TEXT;
|
|
|
|
|
|
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS status_code INTEGER;
|
|
|
|
|
|
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS duration_ms REAL;
|
|
|
|
|
|
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS extra JSONB;
|
|
|
|
|
|
|
|
|
|
|
|
-- 索引(已存在则跳过)
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_audit_trace ON audit_logs(trace_id);
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_audit_actor_time ON audit_logs(actor_id, time);
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_audit_target ON audit_logs(target_type, target_id);
|
2026-08-03 09:34:08 +08:00
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS retention_policies (
|
|
|
|
|
|
id TEXT PRIMARY KEY,
|
|
|
|
|
|
name TEXT NOT NULL,
|
|
|
|
|
|
scope TEXT,
|
|
|
|
|
|
rule TEXT,
|
|
|
|
|
|
status TEXT DEFAULT 'active',
|
|
|
|
|
|
create_time TEXT,
|
|
|
|
|
|
create_by TEXT,
|
|
|
|
|
|
updated_at TEXT
|
|
|
|
|
|
);
|
2026-08-18 14:49:12 +08:00
|
|
|
|
|
|
|
|
|
|
-- ===================== 操作日志表 =====================
|
|
|
|
|
|
-- 记录用户在每个业务模块的详细操作(成功/失败、报错信息等)
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS operation_logs (
|
|
|
|
|
|
id TEXT PRIMARY KEY,
|
|
|
|
|
|
user_id TEXT, -- 操作用户 ID
|
|
|
|
|
|
username TEXT, -- 操作用户名(冗余,便于查询)
|
|
|
|
|
|
module TEXT, -- 业务模块:fine-tune/model-eval/model-inference/dataset/data-process/data-convert/model-manage
|
|
|
|
|
|
action TEXT, -- 具体动作:create/start/stop/delete/upload/convert 等
|
|
|
|
|
|
target_type TEXT, -- 资源类型
|
|
|
|
|
|
target_id TEXT, -- 资源 ID
|
|
|
|
|
|
target_name TEXT, -- 资源名称(便于阅读)
|
|
|
|
|
|
status TEXT NOT NULL, -- success / failure
|
|
|
|
|
|
error_message TEXT, -- 失败时的报错信息
|
|
|
|
|
|
detail TEXT, -- 操作详情 JSON(参数摘要)
|
|
|
|
|
|
client_ip TEXT, -- 客户端 IP
|
|
|
|
|
|
request_method TEXT, -- HTTP 方法
|
|
|
|
|
|
request_path TEXT, -- 请求路径
|
|
|
|
|
|
trace_id TEXT, -- 链路追踪 ID
|
|
|
|
|
|
duration_ms REAL, -- 耗时(ms)
|
|
|
|
|
|
create_time TEXT -- 操作时间
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
-- 幂等升级 operation_logs 表:新增字段(已存在则跳过)
|
|
|
|
|
|
ALTER TABLE operation_logs ADD COLUMN IF NOT EXISTS error_type TEXT; -- 异常类型:RuntimeError / ValueError / ConnectionError
|
|
|
|
|
|
ALTER TABLE operation_logs ADD COLUMN IF NOT EXISTS error_traceback TEXT; -- 完整异常堆栈
|
|
|
|
|
|
ALTER TABLE operation_logs ADD COLUMN IF NOT EXISTS func_name TEXT; -- 出错的函数名
|
|
|
|
|
|
|
|
|
|
|
|
-- 索引
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_op_user_time ON operation_logs(user_id, create_time DESC);
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_op_module_time ON operation_logs(module, create_time DESC);
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_op_status ON operation_logs(status, create_time DESC);
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_op_action ON operation_logs(action);
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_op_create_time ON operation_logs(create_time DESC);
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_op_error_type ON operation_logs(error_type);
|