diff --git a/migrations/000006_cron_jobs_table.sql b/migrations/000006_cron_jobs_table.sql deleted file mode 100644 index 4ed4ba1..0000000 --- a/migrations/000006_cron_jobs_table.sql +++ /dev/null @@ -1,34 +0,0 @@ --- +goose Up --- 创建定时任务注册表,每条任务一行,记录最新执行状态和累计统计 -CREATE TABLE sys_cron_jobs ( - id BIGSERIAL PRIMARY KEY, - job_name VARCHAR(100) NOT NULL, - schedule VARCHAR(50) NOT NULL DEFAULT '', - last_status VARCHAR(20), - last_started_at TIMESTAMPTZ, - last_finished_at TIMESTAMPTZ, - last_duration_ms INTEGER, - last_error_message TEXT, - last_triggered_by VARCHAR(20), - total_runs INTEGER NOT NULL DEFAULT 0, - total_failures INTEGER NOT NULL DEFAULT 0, - created_at TIMESTAMPTZ NOT NULL DEFAULT now(), - updated_at TIMESTAMPTZ NOT NULL DEFAULT now() -); - -COMMENT ON TABLE sys_cron_jobs IS '定时任务注册表'; -COMMENT ON COLUMN sys_cron_jobs.job_name IS '任务名称(代码中定义的唯一标识)'; -COMMENT ON COLUMN sys_cron_jobs.schedule IS 'cron 表达式'; -COMMENT ON COLUMN sys_cron_jobs.last_status IS '最近一次执行状态:succeeded/failed'; -COMMENT ON COLUMN sys_cron_jobs.last_started_at IS '最近一次开始执行时间'; -COMMENT ON COLUMN sys_cron_jobs.last_finished_at IS '最近一次执行完成时间'; -COMMENT ON COLUMN sys_cron_jobs.last_duration_ms IS '最近一次执行耗时(毫秒)'; -COMMENT ON COLUMN sys_cron_jobs.last_error_message IS '最近一次错误信息(仅失败时有值)'; -COMMENT ON COLUMN sys_cron_jobs.last_triggered_by IS '最近一次触发方式:auto/manual'; -COMMENT ON COLUMN sys_cron_jobs.total_runs IS '累计执行次数'; -COMMENT ON COLUMN sys_cron_jobs.total_failures IS '累计失败次数'; - -CREATE UNIQUE INDEX uk_sys_cron_jobs_name ON sys_cron_jobs (job_name); - --- +goose Down -DROP TABLE IF EXISTS sys_cron_jobs; diff --git a/migrations/000006_v0_1_6_version.sql b/migrations/000006_v0_1_6_version.sql new file mode 100644 index 0000000..0ef853e --- /dev/null +++ b/migrations/000006_v0_1_6_version.sql @@ -0,0 +1,142 @@ +-- +goose Up +-- v0.1.6 变更汇总: +-- 1. 创建 sys_cron_jobs 定时任务注册表 +-- 2. 删除 sys_cron_job_executions 旧表(改为单表管理) +-- 3. 删除未使用的表:plg_example_logs、bil_daily/weekly/monthly_summary 系列 +-- 4. 修正 ord_orders.currency 默认值 USD→CNY,回填历史数据 + +-- 1. 创建定时任务注册表 +CREATE TABLE sys_cron_jobs ( + id BIGSERIAL PRIMARY KEY, + job_name VARCHAR(100) NOT NULL, + schedule VARCHAR(50) NOT NULL DEFAULT '', + last_status VARCHAR(20), + last_started_at TIMESTAMPTZ, + last_finished_at TIMESTAMPTZ, + last_duration_ms INTEGER, + last_error_message TEXT, + last_triggered_by VARCHAR(20), + total_runs INTEGER NOT NULL DEFAULT 0, + total_failures INTEGER NOT NULL DEFAULT 0, + created_at TIMESTAMPTZ NOT NULL DEFAULT now(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT now() +); + +COMMENT ON TABLE sys_cron_jobs IS '定时任务注册表'; +COMMENT ON COLUMN sys_cron_jobs.job_name IS '任务名称(代码中定义的唯一标识)'; +COMMENT ON COLUMN sys_cron_jobs.schedule IS 'cron 表达式'; +COMMENT ON COLUMN sys_cron_jobs.last_status IS '最近一次执行状态:succeeded/failed'; +COMMENT ON COLUMN sys_cron_jobs.last_started_at IS '最近一次开始执行时间'; +COMMENT ON COLUMN sys_cron_jobs.last_finished_at IS '最近一次执行完成时间'; +COMMENT ON COLUMN sys_cron_jobs.last_duration_ms IS '最近一次执行耗时(毫秒)'; +COMMENT ON COLUMN sys_cron_jobs.last_error_message IS '最近一次错误信息(仅失败时有值)'; +COMMENT ON COLUMN sys_cron_jobs.last_triggered_by IS '最近一次触发方式:auto/manual'; +COMMENT ON COLUMN sys_cron_jobs.total_runs IS '累计执行次数'; +COMMENT ON COLUMN sys_cron_jobs.total_failures IS '累计失败次数'; + +CREATE UNIQUE INDEX uk_sys_cron_jobs_name ON sys_cron_jobs (job_name); + +-- 2. 删除旧的定时任务执行日志表 +DROP TABLE IF EXISTS sys_cron_job_executions; + +-- 3. 删除未使用的表 +DROP TABLE IF EXISTS plg_example_logs; +DROP TABLE IF EXISTS bil_daily_usage_summary; +DROP TABLE IF EXISTS bil_daily_revenue_summary; +DROP TABLE IF EXISTS bil_monthly_usage_summary; +DROP TABLE IF EXISTS bil_monthly_revenue_summary; + +-- 4. 修正订单层币种默认值:USD -> CNY +ALTER TABLE ord_orders ALTER COLUMN currency SET DEFAULT 'CNY'; +COMMENT ON COLUMN ord_orders.currency IS '货币(订单层一律 CNY)'; +UPDATE ord_orders SET currency = 'CNY' WHERE currency = 'USD'; + +-- +goose Down +-- 回滚顺序与 Up 相反 + +-- 4. 恢复 ord_orders.currency 默认值 +ALTER TABLE ord_orders ALTER COLUMN currency SET DEFAULT 'USD'; +COMMENT ON COLUMN ord_orders.currency IS '货币'; + +-- 3. 重建被删除的未使用表 +CREATE TABLE plg_example_logs ( + id BIGSERIAL PRIMARY KEY, + plugin_name VARCHAR(100) NOT NULL, + tenant_id BIGINT, + message TEXT, + level VARCHAR(20) DEFAULT 'info', + created_at TIMESTAMPTZ DEFAULT now() NOT NULL, + updated_at TIMESTAMPTZ DEFAULT now() NOT NULL +); +COMMENT ON TABLE plg_example_logs IS '插件示例日志表(已废弃)'; + +CREATE TABLE bil_daily_usage_summary ( + id BIGSERIAL PRIMARY KEY, + tenant_id BIGINT NOT NULL, + date DATE NOT NULL, + total_requests INT NOT NULL DEFAULT 0, + total_tokens BIGINT NOT NULL DEFAULT 0, + total_cost NUMERIC(20,10) NOT NULL DEFAULT 0, + created_at TIMESTAMPTZ NOT NULL DEFAULT now(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT now(), + CONSTRAINT uk_bil_daily_usage_summary UNIQUE (tenant_id, date) +); +COMMENT ON TABLE bil_daily_usage_summary IS '每日用量汇总(已废弃)'; + +CREATE TABLE bil_daily_revenue_summary ( + id BIGSERIAL PRIMARY KEY, + date DATE NOT NULL, + total_recharge NUMERIC(20,10) NOT NULL DEFAULT 0, + total_consumption NUMERIC(20,10) NOT NULL DEFAULT 0, + net_revenue NUMERIC(20,10) NOT NULL DEFAULT 0, + new_orders INT NOT NULL DEFAULT 0, + paid_orders INT NOT NULL DEFAULT 0, + created_at TIMESTAMPTZ NOT NULL DEFAULT now(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT now(), + CONSTRAINT uk_bil_daily_revenue_summary UNIQUE (date) +); +COMMENT ON TABLE bil_daily_revenue_summary IS '每日收入汇总(已废弃)'; + +CREATE TABLE bil_monthly_usage_summary ( + id BIGSERIAL PRIMARY KEY, + tenant_id BIGINT NOT NULL, + month DATE NOT NULL, + total_requests INT NOT NULL DEFAULT 0, + total_tokens BIGINT NOT NULL DEFAULT 0, + total_cost NUMERIC(20,10) NOT NULL DEFAULT 0, + created_at TIMESTAMPTZ NOT NULL DEFAULT now(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT now(), + CONSTRAINT uk_bil_monthly_usage_summary UNIQUE (tenant_id, month) +); +COMMENT ON TABLE bil_monthly_usage_summary IS '每月用量汇总(已废弃)'; + +CREATE TABLE bil_monthly_revenue_summary ( + id BIGSERIAL PRIMARY KEY, + month DATE NOT NULL, + total_recharge NUMERIC(20,10) NOT NULL DEFAULT 0, + total_consumption NUMERIC(20,10) NOT NULL DEFAULT 0, + net_revenue NUMERIC(20,10) NOT NULL DEFAULT 0, + created_at TIMESTAMPTZ NOT NULL DEFAULT now(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT now(), + CONSTRAINT uk_bil_monthly_revenue_summary UNIQUE (month) +); +COMMENT ON TABLE bil_monthly_revenue_summary IS '每月收入汇总(已废弃)'; + +-- 2. 重建 sys_cron_job_executions 表 +CREATE TABLE sys_cron_job_executions ( + id BIGSERIAL PRIMARY KEY, + job_name VARCHAR(100) NOT NULL, + status VARCHAR(20) NOT NULL, + started_at TIMESTAMPTZ NOT NULL, + finished_at TIMESTAMPTZ NOT NULL, + duration_ms INTEGER NOT NULL, + error_message TEXT, + triggered_by VARCHAR(20) NOT NULL DEFAULT 'auto', + created_at TIMESTAMPTZ DEFAULT now() NOT NULL, + updated_at TIMESTAMPTZ DEFAULT now() NOT NULL +); +CREATE INDEX idx_sys_cron_job_exec_name_time ON sys_cron_job_executions (job_name, created_at DESC); +CREATE INDEX idx_sys_cron_job_exec_created_brin ON sys_cron_job_executions USING BRIN (created_at); + +-- 1. 删除 sys_cron_jobs 表 +DROP TABLE IF EXISTS sys_cron_jobs; diff --git a/migrations/000007_drop_cron_job_executions.sql b/migrations/000007_drop_cron_job_executions.sql deleted file mode 100644 index 85537af..0000000 --- a/migrations/000007_drop_cron_job_executions.sql +++ /dev/null @@ -1,20 +0,0 @@ --- +goose Up --- 删除旧的定时任务执行日志表,改为 sys_cron_jobs 单表管理 -DROP TABLE IF EXISTS sys_cron_job_executions; - --- +goose Down --- 回滚:重建 sys_cron_job_executions 表 -CREATE TABLE sys_cron_job_executions ( - id BIGSERIAL PRIMARY KEY, - job_name VARCHAR(100) NOT NULL, - status VARCHAR(20) NOT NULL, - started_at TIMESTAMPTZ NOT NULL, - finished_at TIMESTAMPTZ NOT NULL, - duration_ms INTEGER NOT NULL, - error_message TEXT, - triggered_by VARCHAR(20) NOT NULL DEFAULT 'auto', - created_at TIMESTAMPTZ DEFAULT now() NOT NULL, - updated_at TIMESTAMPTZ DEFAULT now() NOT NULL -); -CREATE INDEX idx_sys_cron_job_exec_name_time ON sys_cron_job_executions (job_name, created_at DESC); -CREATE INDEX idx_sys_cron_job_exec_created_brin ON sys_cron_job_executions USING BRIN (created_at); diff --git a/migrations/000008_drop_unused_tables.sql b/migrations/000008_drop_unused_tables.sql deleted file mode 100644 index 42c4cba..0000000 --- a/migrations/000008_drop_unused_tables.sql +++ /dev/null @@ -1,77 +0,0 @@ --- +goose Up --- 删除未使用的表: --- plg_example_logs:插件示例日志,代码中零引用 --- bil_daily_usage_summary / bil_daily_revenue_summary:日汇总,只有写入无读取 --- bil_monthly_usage_summary / bil_monthly_revenue_summary:月汇总,只有写入无读取 - -DROP TABLE IF EXISTS plg_example_logs; -DROP TABLE IF EXISTS bil_daily_usage_summary; -DROP TABLE IF EXISTS bil_daily_revenue_summary; -DROP TABLE IF EXISTS bil_monthly_usage_summary; -DROP TABLE IF EXISTS bil_monthly_revenue_summary; - --- +goose Down --- 回滚:重建被删除的表 - -CREATE TABLE plg_example_logs ( - id BIGSERIAL PRIMARY KEY, - plugin_name VARCHAR(100) NOT NULL, - tenant_id BIGINT, - message TEXT, - level VARCHAR(20) DEFAULT 'info', - created_at TIMESTAMPTZ DEFAULT now() NOT NULL, - updated_at TIMESTAMPTZ DEFAULT now() NOT NULL -); -COMMENT ON TABLE plg_example_logs IS '插件示例日志表(已废弃)'; - -CREATE TABLE bil_daily_usage_summary ( - id BIGSERIAL PRIMARY KEY, - tenant_id BIGINT NOT NULL, - date DATE NOT NULL, - total_requests INT NOT NULL DEFAULT 0, - total_tokens BIGINT NOT NULL DEFAULT 0, - total_cost NUMERIC(20,10) NOT NULL DEFAULT 0, - created_at TIMESTAMPTZ NOT NULL DEFAULT now(), - updated_at TIMESTAMPTZ NOT NULL DEFAULT now(), - CONSTRAINT uk_bil_daily_usage_summary UNIQUE (tenant_id, date) -); -COMMENT ON TABLE bil_daily_usage_summary IS '每日用量汇总(已废弃)'; - -CREATE TABLE bil_daily_revenue_summary ( - id BIGSERIAL PRIMARY KEY, - date DATE NOT NULL, - total_recharge NUMERIC(20,10) NOT NULL DEFAULT 0, - total_consumption NUMERIC(20,10) NOT NULL DEFAULT 0, - net_revenue NUMERIC(20,10) NOT NULL DEFAULT 0, - new_orders INT NOT NULL DEFAULT 0, - paid_orders INT NOT NULL DEFAULT 0, - created_at TIMESTAMPTZ NOT NULL DEFAULT now(), - updated_at TIMESTAMPTZ NOT NULL DEFAULT now(), - CONSTRAINT uk_bil_daily_revenue_summary UNIQUE (date) -); -COMMENT ON TABLE bil_daily_revenue_summary IS '每日收入汇总(已废弃)'; - -CREATE TABLE bil_monthly_usage_summary ( - id BIGSERIAL PRIMARY KEY, - tenant_id BIGINT NOT NULL, - month DATE NOT NULL, - total_requests INT NOT NULL DEFAULT 0, - total_tokens BIGINT NOT NULL DEFAULT 0, - total_cost NUMERIC(20,10) NOT NULL DEFAULT 0, - created_at TIMESTAMPTZ NOT NULL DEFAULT now(), - updated_at TIMESTAMPTZ NOT NULL DEFAULT now(), - CONSTRAINT uk_bil_monthly_usage_summary UNIQUE (tenant_id, month) -); -COMMENT ON TABLE bil_monthly_usage_summary IS '每月用量汇总(已废弃)'; - -CREATE TABLE bil_monthly_revenue_summary ( - id BIGSERIAL PRIMARY KEY, - month DATE NOT NULL, - total_recharge NUMERIC(20,10) NOT NULL DEFAULT 0, - total_consumption NUMERIC(20,10) NOT NULL DEFAULT 0, - net_revenue NUMERIC(20,10) NOT NULL DEFAULT 0, - created_at TIMESTAMPTZ NOT NULL DEFAULT now(), - updated_at TIMESTAMPTZ NOT NULL DEFAULT now(), - CONSTRAINT uk_bil_monthly_revenue_summary UNIQUE (month) -); -COMMENT ON TABLE bil_monthly_revenue_summary IS '每月收入汇总(已废弃)'; diff --git a/migrations/000009_fix_ord_orders_currency_default.sql b/migrations/000009_fix_ord_orders_currency_default.sql deleted file mode 100644 index 9b85906..0000000 --- a/migrations/000009_fix_ord_orders_currency_default.sql +++ /dev/null @@ -1,17 +0,0 @@ --- +goose Up --- 修正订单层币种:按 CLAUDE.md「三层币种固定规则」,ord_ 订单层一律 CNY(充值/套餐均为人民币)。 --- 原 DEFAULT 'USD' 与业务语义相反,且 auto_renew 历史续费订单被错误标记为 USD。 - --- 1. 修正默认值:USD -> CNY -ALTER TABLE ord_orders ALTER COLUMN currency SET DEFAULT 'CNY'; - --- 2. 补全字段注释,明确单位 -COMMENT ON COLUMN ord_orders.currency IS '货币(订单层一律 CNY)'; - --- 3. 回填历史错误数据:订单层不应存在 USD,统一修正为 CNY -UPDATE ord_orders SET currency = 'CNY' WHERE currency = 'USD'; - --- +goose Down --- 回滚:恢复原默认值与注释(历史回填的数据不再逆转) -ALTER TABLE ord_orders ALTER COLUMN currency SET DEFAULT 'USD'; -COMMENT ON COLUMN ord_orders.currency IS '货币';