All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 1m5s
- Добавлена миграция 020 для замены period_type на start_date в score_conditions - Обновлена функция подсчёта баллов: calculateProjectPointsFromDate вместо calculateProjectPointsForPeriod - Добавлен компонент DateSelector для выбора даты начала подсчёта - По умолчанию выбран тип условия 'Баллы' - Переименованы опции: 'Баллы' и 'Задача' - Версия: 3.9.3
Database Migrations
Этот каталог содержит SQL миграции для создания структуры базы данных проекта play-life.
Использование
Создание базы данных с нуля
Выполните миграцию для создания всех таблиц и представлений:
psql -U your_user -d your_database -f 001_create_schema.sql
Или через docker-compose:
docker-compose exec db psql -U playeng -d playeng -f /migrations/001_create_schema.sql
Структура базы данных
Таблицы
-
projects - Проекты
id(SERIAL PRIMARY KEY)name(VARCHAR(255) NOT NULL, UNIQUE)priority(SMALLINT)
-
entries - Записи с текстом и датами создания
id(SERIAL PRIMARY KEY)text(TEXT NOT NULL)created_date(TIMESTAMP WITH TIME ZONE NOT NULL, DEFAULT CURRENT_TIMESTAMP)
-
nodes - Узлы, связывающие проекты и записи
id(SERIAL PRIMARY KEY)project_id(INTEGER NOT NULL, FK -> projects.id ON DELETE CASCADE)entry_id(INTEGER NOT NULL, FK -> entries.id ON DELETE CASCADE)score(NUMERIC(8,4))
-
weekly_goals - Недельные цели для проектов
id(SERIAL PRIMARY KEY)project_id(INTEGER NOT NULL, FK -> projects.id ON DELETE CASCADE)goal_year(INTEGER NOT NULL)goal_week(INTEGER NOT NULL)min_goal_score(NUMERIC(10,4) NOT NULL, DEFAULT 0)max_goal_score(NUMERIC(10,4))actual_score(NUMERIC(10,4), DEFAULT 0)priority(SMALLINT)- UNIQUE CONSTRAINT:
(project_id, goal_year, goal_week)
Materialized View
- weekly_report_mv - Агрегированные данные по неделям для каждого проекта
project_id(INTEGER)report_year(INTEGER)report_week(INTEGER)total_score(NUMERIC)
Миграции
Порядок применения миграций
- 001_create_schema.sql - Создание базовой структуры (таблицы, индексы, materialized view)
- 002_add_dictionaries.sql - Добавление таблиц для словарей
- 003_remove_words_unique_constraint.sql - Удаление уникального ограничения на words.name
- 004_add_config_dictionaries.sql - Добавление связи между конфигурациями и словарями
- 005_fix_weekly_report_mv.sql - Исправление использования ISOYEAR вместо YEAR для корректной работы на границе года
- 006_fix_weekly_report_mv_structure.sql - Исправление структуры view (добавление LEFT JOIN для включения всех проектов)
Применение миграций
Для существующей базы данных применяйте миграции последовательно:
psql -U playeng -d playeng -f migrations/005_fix_weekly_report_mv.sql
psql -U playeng -d playeng -f migrations/006_fix_weekly_report_mv_structure.sql
Или через docker-compose:
docker-compose exec db psql -U playeng -d playeng -f /migrations/005_fix_weekly_report_mv.sql
docker-compose exec db psql -U playeng -d playeng -f /migrations/006_fix_weekly_report_mv_structure.sql
Обновление Materialized View
После изменения данных в таблицах nodes или entries, необходимо обновить materialized view:
REFRESH MATERIALIZED VIEW weekly_report_mv;
Связи между таблицами
nodes.project_id→projects.id(ON DELETE CASCADE)nodes.entry_id→entries.id(ON DELETE CASCADE)weekly_goals.project_id→projects.id(ON DELETE CASCADE)
Индексы
Созданы индексы для оптимизации запросов:
idx_nodes_project_idнаnodes(project_id)idx_nodes_entry_idнаnodes(entry_id)idx_weekly_goals_project_idнаweekly_goals(project_id)idx_weekly_report_mv_project_year_weekнаweekly_report_mv(project_id, report_year, report_week)