-- 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;