axe/internal/db/migrations/0015_recurring_annual.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.

-- 0015_recurring_annual — расписание «ежегодно по дате» вместо интервала.
--
-- Зачем: «повторять каждые N месяцев» заменяется на конкретную дату —
-- день и месяц («15 марта»): правило срабатывает раз в год в эту дату.
-- Нагляднее для человека и попадает в «Новая заявка» чекбоксом, а не
-- отдельной секцией в проекте (см. README).
--
-- Существующие правила переводятся на день/месяц своего создания —
-- семантика «первая годовщина после заведения» сохраняется.
--
-- Невозможные даты прижимаются к последнему дню месяца при расчёте
-- срока (29 февраля в невисокосный → 28), здесь — только рамки поля:
-- день 1..31, месяц 1..12.
--
-- Применённый файл не редактировать (checksum в schema_migrations).
-- ============ recurring_rules: interval_months → run_month/run_day ============
ALTER TABLE recurring_rules
ADD COLUMN run_month smallint NOT NULL DEFAULT 1,
ADD COLUMN run_day smallint NOT NULL DEFAULT 1;
UPDATE recurring_rules
SET run_month = EXTRACT(MONTH FROM created_at AT TIME ZONE 'UTC')::smallint,
run_day = EXTRACT(DAY FROM created_at AT TIME ZONE 'UTC')::smallint;
-- CHECK interval_months (interval >= 1) уходит вместе с колонкой.
ALTER TABLE recurring_rules
DROP COLUMN interval_months;
ALTER TABLE recurring_rules
ADD CONSTRAINT recurring_rules_run_month_check
CHECK (run_month BETWEEN 1 AND 12),
ADD CONSTRAINT recurring_rules_run_day_check
CHECK (run_day BETWEEN 1 AND 31);