исправление хранения календаря

This commit is contained in:
Zuev
2026-07-31 21:24:11 +03:00
parent 87f3d98621
commit cc422255a2
31 changed files with 825 additions and 425 deletions

View File

@@ -0,0 +1,25 @@
---
type: "query"
date: "2026-07-30T23:49:30.491131+00:00"
question: "как ты думаешь, нужно ли оптимизировать таблицу academic_calendar_days? а то расписаний будет очень много, минимум 1000 и со временем будет расти, а там уже такой большой объём данных, даже когда расписаний мало. Можем подумать как переделать логику чтобы оптимизировать это дело"
contributor: "graphify"
outcome: "useful"
source_nodes: ["AcademicCalendar", "AcademicDateService", "AcademicCalendarDayRepository", "ScheduleGeneratorService"]
---
# Q: как ты думаешь, нужно ли оптимизировать таблицу academic_calendar_days? а то расписаний будет очень много, минимум 1000 и со временем будет расти, а там уже такой большой объём данных, даже когда расписаний мало. Можем подумать как переделать логику чтобы оптимизировать это дело
## Answer
Expanded from original query via graph vocab: academic, calendar, days, schedule, generator, semester, date, repository. Граф помог найти AcademicDateService, AcademicCalendarDayRepository и ScheduleGeneratorService. Сверка исходников показала: рост таблицы зависит от числа уникальных календарных графиков, а не от числа групп или запросов расписания; текущая дневная материализация создаёт примерно 1460 строк на четырёхкурсовый годовой график. Рекомендация: при ожидаемых 1000 уникальных графиках перейти на непересекающиеся интервалы активности по курсу, сохранив дневной DTO на границе API на первом этапе; отдельно убрать дублирующий индекс и ограничить batch-чтение нужными парами график-курс. Партиционирование для такого объёма не требуется.
## Outcome
- Signal: useful
## Source Nodes
- AcademicCalendar
- AcademicDateService
- AcademicCalendarDayRepository
- ScheduleGeneratorService

View File

@@ -0,0 +1,25 @@
---
type: "query"
date: "2026-07-31T00:15:22.545259+00:00"
question: "давай сделаем \"Один непрерывный период с одинаковой активностью становится одной строкой\". пиши всё в v1 не создавая новую миграцию. внеси изменения о которых сказал, не беспокоясь о проде, потому что проект на этапе разработки и ничего не сломается."
contributor: "graphify"
outcome: "useful"
source_nodes: ["AcademicCalendarController", "AcademicCalendarDayRepository", "ScheduleGeneratorService", "AcademicCalendar"]
---
# Q: давай сделаем "Один непрерывный период с одинаковой активностью становится одной строкой". пиши всё в v1 не создавая новую миграцию. внеси изменения о которых сказал, не беспокоясь о проде, потому что проект на этапе разработки и ничего не сломается.
## Answer
Expanded from original query via vocab: [academic, calendar, days, grid, activity, repository, schedule, date]. Дневные строки заменены сущностью AcademicCalendarPeriod и таблицей academic_calendar_periods с включительными start_date/end_date. PUT дневной сетки проверяет payload и объединяет соседние даты одного курса с одинаковой активностью; GET разворачивает периоды обратно, поэтому frontend-контракт не изменён. Генератор загружает только пересекающиеся интервалы нужных курсов и ищет активность бинарным поиском. V1 содержит GiST exclusion constraint против пересечений; отдельная миграция не создана. Полные backend-тесты и frontend-проверки прошли.
## Outcome
- Signal: useful
## Source Nodes
- AcademicCalendarController
- AcademicCalendarDayRepository
- ScheduleGeneratorService
- AcademicCalendar

View File

@@ -0,0 +1,23 @@
---
type: "query"
date: "2026-07-31T00:27:24.418402+00:00"
question: "отлично, как мне подключиться к этой бд через dbeaver?"
contributor: "graphify"
outcome: "useful"
source_nodes: ["PostgreSQL-сервис Docker Compose", "Docker Compose инфраструктура"]
---
# Q: отлично, как мне подключиться к этой бд через dbeaver?
## Answer
Expanded from original query via vocab: [postgres, database, tenant, compose, docker, connection, config, service]. Локальный PostgreSQL-сервис Docker Compose сейчас не публикует порт на хост, поэтому DBeaver не сможет подключиться к localhost без изменения compose.yaml. Нужно добавить сервису db привязку 127.0.0.1:15432:5432, выполнить docker compose up -d db, затем создать PostgreSQL-подключение: host localhost, port 15432, database POSTGRES_DB, username POSTGRES_USER, password POSTGRES_PASSWORD из корневого .env, SSL отключён. Контейнерное имя db применимо только внутри Docker-сети. Каждая tenant-БД подключается отдельным именем базы.
## Outcome
- Signal: useful
## Source Nodes
- PostgreSQL-сервис Docker Compose
- Docker Compose инфраструктура