All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 13m13s
新增 000226 迁移:规则表 tb_package_traffic_alert_rule(每套餐商品至多一条,无软删除,package_id 非部分唯一约束)、达量预警快照表 tb_package_traffic_alert(以主套餐使用记录 + 阈值快照为唯一键, 触发时冻结用量、额度、比例、阈值、到期时间、归属与资产快照),并为 tb_package_usage 新增扫描 范围部分索引 idx_package_usage_alert_scope;down 在预警表存在数据时阻断回滚。 新增规则维护接口 GET/POST/PUT /api/admin/package-traffic-alert-rules(仅超级管理员与平台账号): 创建校验套餐存在且真流量额度大于零,阈值为 1%~100% 的两位小数;修改只影响后续扫描,不回填也 不改写既有预警快照;全部写操作记录操作者、前后值与时间。 新增每日 06:00(Asia/Shanghai)扫描任务 package:traffic:alert:scan,与套餐临期扫描共用 data_cleanup 队列:按资产汇总当前有效套餐的真流量,分子取使用记录真已用量、分母取使用记录真总量快照,命中 主套餐规则阈值时在同一事务创建预警与可靠通知事件;重复执行以唯一冲突视为已处理,不重复投递, 不建停机锁、不调用运营商。 新增预警列表、详情与异步导出 GET /api/admin/package-traffic-alerts、GET /api/admin/package-traffic-alerts/:id、 POST /api/admin/package-traffic-alerts/export,列表与详情一律读冻结快照;新增通知类型 package.traffic.alert 与受控目标 package_traffic_alert_detail,目标解析仅对超级管理员与平台账号 返回可跳转,越权与不存在统一按资源不可见处理。 同步 OpenAPI(cmd/gendocs、cmd/api/docs.go、pkg/openapi/handlers.go)、审计动作与资源注册、上下文 健康检查证据;归档变更并同步 package-traffic-alert 主 Spec。
24 lines
1.2 KiB
SQL
24 lines
1.2 KiB
SQL
-- 回滚套餐真流量达量预警的规则表、预警快照表与扫描部分索引。
|
||
-- 先删扫描索引,再按依赖倒序删除预警表与规则表,与 up 的创建顺序严格成对;
|
||
-- 既有 tb_package_usage 的列与数据不受影响,本迁移从未修改既有表结构。
|
||
--
|
||
-- 不可逆说明(ENG-MIG-001 例外条件):本迁移的 down 会删除 tb_package_traffic_alert 与
|
||
-- tb_package_traffic_alert_rule。规则可由后台按当前业务口径重建;已触发的预警与冻结快照
|
||
-- 无法由数据库自身重建,只能依据 tb_audit_event 中 package_traffic_alert.trigger 的前后值快照
|
||
-- 与站内通知正文人工复核。因此 down 只在预警事实已无留存需求时执行。
|
||
--
|
||
-- 守卫:预警表存在任何行时直接阻断回滚,避免静默丢失预警事实与已投递通知的追溯依据。
|
||
|
||
DO $$
|
||
BEGIN
|
||
IF EXISTS (SELECT 1 FROM tb_package_traffic_alert LIMIT 1) THEN
|
||
RAISE EXCEPTION '存在套餐真流量达量预警事实,拒绝回滚以避免丢失预警快照与通知追溯依据';
|
||
END IF;
|
||
END $$;
|
||
|
||
DROP INDEX IF EXISTS idx_package_usage_alert_scope;
|
||
|
||
DROP TABLE IF EXISTS tb_package_traffic_alert;
|
||
|
||
DROP TABLE IF EXISTS tb_package_traffic_alert_rule;
|