-- Migration: Change period_type to start_date in score_conditions -- This allows specifying a start date for counting points instead of period type -- Date can be in the past or future, NULL means count all time -- Добавляем новое поле start_date ALTER TABLE score_conditions ADD COLUMN IF NOT EXISTS start_date DATE; -- Миграция данных: для существующих записей с period_type устанавливаем start_date -- Если period_type = 'week', то start_date = начало текущей недели -- Если period_type = 'month', то start_date = начало текущего месяца -- Если period_type = 'year', то start_date = начало текущего года -- Если period_type IS NULL, то start_date = NULL (за всё время) UPDATE score_conditions SET start_date = CASE WHEN period_type = 'week' THEN DATE_TRUNC('week', CURRENT_DATE)::DATE WHEN period_type = 'month' THEN DATE_TRUNC('month', CURRENT_DATE)::DATE WHEN period_type = 'year' THEN DATE_TRUNC('year', CURRENT_DATE)::DATE ELSE NULL END WHERE start_date IS NULL; -- Обновляем уникальное ограничение (удаляем старое, добавляем новое) ALTER TABLE score_conditions DROP CONSTRAINT IF EXISTS unique_score_condition; ALTER TABLE score_conditions ADD CONSTRAINT unique_score_condition UNIQUE (project_id, required_points, start_date); -- Обновляем комментарии COMMENT ON COLUMN score_conditions.start_date IS 'Date from which to start counting points. NULL means count all time.'; -- Примечание: поле period_type оставляем пока для обратной совместимости -- Его можно будет удалить позже после проверки, что всё работает: -- ALTER TABLE score_conditions DROP COLUMN period_type;