axe/internal/db/migrations/0016_recurring_period.sql

36 lines
1.9 KiB
MySQL
Raw Normal View History

2026-10-18 19:07:25 +00:00
-- 0016_recurring_period — расписание «период в днях от даты-времени».
--
-- Зачем: годовое расписание по «дню + месяцу» (0015) заменяется
-- периодом: пользователь выбирает точку отсчёта (дата-время первого
-- запуска) и период «каждые N дней/недель». Точность расписания —
-- до суток: тик планировщика раз в сутки, выбранное время — ориентир,
-- заявка появится ближайшим тиком после срока.
--
-- Существующие правила не теряют ритм: anchor_at =
-- COALESCE(last_run_at, created_at) — та же отправная точка срока,
-- что считалась в Go, period_days = 365 — «раз в год» прежних правил.
--
-- Ограничение period_days (1..3650 = 10 лет) — рамки поля и для API:
-- хендлеры повторяют те же границы, чтобы ошибка приходила до БД.
--
-- Применённый файл не редактировать (checksum в schema_migrations).
-- ============ recurring_rules: run_month/run_day → anchor_at/period_days ============
ALTER TABLE recurring_rules
ADD COLUMN anchor_at timestamptz,
ADD COLUMN period_days int NOT NULL DEFAULT 365;
UPDATE recurring_rules
SET anchor_at = COALESCE(last_run_at, created_at);
ALTER TABLE recurring_rules
ALTER COLUMN anchor_at SET NOT NULL,
ADD CONSTRAINT recurring_rules_period_days_check
CHECK (period_days BETWEEN 1 AND 3650);
-- CHECK колонок даты (run_month/run_day) уходит вместе с ними.
ALTER TABLE recurring_rules
DROP COLUMN run_month,
DROP COLUMN run_day;