38 lines
1.9 KiB
MySQL
38 lines
1.9 KiB
MySQL
|
|
-- 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;
|
|||
|
|
|