36 lines
1.9 KiB
SQL
36 lines
1.9 KiB
SQL
-- 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;
|