feat: implement brand asset cleanup event handling and reconciliation logic
Backend CI / Backend (push) Failing after 6m54s

This commit is contained in:
2026-06-21 08:26:56 +08:00
parent 05a69c7c89
commit c1b06dab18
11 changed files with 744 additions and 15 deletions
@@ -0,0 +1,12 @@
DELETE FROM ops.scheduler_job_triggers
WHERE job_key = 'brand_asset_cleanup_reconcile';
DELETE FROM ops.scheduler_jobs
WHERE job_key = 'brand_asset_cleanup_reconcile';
UPDATE ops.scheduler_jobs
SET schedule_type = 'interval',
interval_seconds = 60,
config = config - 'suppress_empty_success_runs' - 'empty_success_metric_keys',
updated_at = NOW()
WHERE job_key = 'brand_asset_cleanup';
@@ -0,0 +1,35 @@
UPDATE ops.scheduler_jobs
SET schedule_type = 'manual',
interval_seconds = 3600,
config = config
|| jsonb_build_object(
'batch_size', 20,
'statement_timeout', '8s',
'dry_run', false,
'suppress_empty_success_runs', true,
'empty_success_metric_keys', jsonb_build_array('event_count', 'candidate_count')
),
updated_at = NOW()
WHERE job_key = 'brand_asset_cleanup';
DELETE FROM ops.scheduler_job_triggers
WHERE job_key = 'brand_asset_cleanup'
AND reason IN ('brand deleted', 'brand cleanup continuation', 'brand cleanup reconcile');
INSERT INTO ops.scheduler_jobs
(job_key, display_name, category, description, enabled, schedule_type, interval_seconds, timezone, timeout_seconds, batch_size, config)
VALUES
('brand_asset_cleanup_reconcile', '品牌资产清理兜底巡检', 'tenant', '低频巡检仍处于 deleting 的品牌并补发清理事件;正常路径由业务事件 worker 通过 LISTEN/NOTIFY 驱动。', true, 'interval', 3600, 'Asia/Shanghai', 60, 100,
'{"batch_size":100,"statement_timeout":"8s","dry_run":false,"suppress_empty_success_runs":true,"empty_success_metric_keys":["candidate_count","runnable_event_count","enqueued_event_count"]}'::jsonb)
ON CONFLICT (job_key) DO UPDATE
SET display_name = EXCLUDED.display_name,
category = EXCLUDED.category,
description = EXCLUDED.description,
enabled = EXCLUDED.enabled,
schedule_type = EXCLUDED.schedule_type,
interval_seconds = EXCLUDED.interval_seconds,
timezone = EXCLUDED.timezone,
timeout_seconds = EXCLUDED.timeout_seconds,
batch_size = EXCLUDED.batch_size,
config = ops.scheduler_jobs.config || EXCLUDED.config,
updated_at = NOW();