axe/internal/db/migrations/0016_recurring_period.sql
2026-10-18 22:07:25 +03:00

36 lines
1.9 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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