Миллион изменений, создание вкладки "Расписание занятий"

This commit is contained in:
Zuev
2026-04-29 23:35:16 +03:00
parent 8f71b9b2b5
commit 96e9d8155f
42 changed files with 1718 additions and 4661 deletions

View File

@@ -6,7 +6,7 @@
Реализован первый рабочий срез динамического расписания. Новая модель теперь является базовой схемой проекта и создаётся сразу в `V1__init.sql`.
Старые таблицы `lessons` и `schedule_data` пока физически остаются в `V1__init.sql`, потому что связанный старый код будет удаляться отдельным шагом. Они больше не заполняются тестовыми данными и не являются источником для новой модели расписания.
Старые таблицы `lessons` и `schedule_data`, старые контроллеры, DTO, модели, репозитории и админские вызовы старых API удалены. Новая модель расписания является единственным базовым способом хранения и генерации расписания.
## Что добавлено
@@ -78,7 +78,7 @@
| `AcademicDateService` | Календарная математика: семестр по дате, номер недели, чётность, праздник, курс группы, тип активности |
| `ScheduleGeneratorService` | Генерация расписания группы или преподавателя на диапазон дат |
Старый `LessonsController` пока физически присутствует в коде и помечен как `@Deprecated`. Это технический хвост до удаления старых экранов и таблиц, а не целевой слой совместимости.
Старый ручной слой занятий удалён: в backend больше нет `LessonsController`, `ScheduleDataController`, сущностей `Lesson`/`ScheduleData`, их DTO, репозиториев и валидаторов старых строк расписания.
### API
@@ -134,6 +134,8 @@ GET /api/schedule?teacherId={userId}&startDate=...&endDate=...
Заглушки кабинетов заменены на базовые экраны просмотра расписания.
Админский экран `schedule` показывает текущие `schedule_rules` и сетку `time_slots` через новые admin API.
#### Кабинет студента
Файл: `frontend/student/index.html`.
@@ -268,8 +270,8 @@ docker run --rm -v /mnt/HDD/magistr/magistr/backend:/app -w /app maven:3.9-eclip
| `schedule_rule_slots` | 4 |
| `time_slots` | 7 |
| `academic_calendar_matrix` | 132 |
| `lessons` | 0 |
| `schedule_data` | 0 |
| `lessons` | таблица отсутствует |
| `schedule_data` | таблица отсутствует |
Также выполнен:
@@ -285,27 +287,19 @@ git diff --check
Ограничения:
- полноценный UI конструктора правил в админке ещё не реализован;
- визуальный редактор матрицы учебного графика в админке ещё не реализован;
- UI управления праздниками и учебными годами пока доступен только через API;
- строгая проверка конфликтов преподавателей, аудиторий и групп при сохранении правил ещё не реализована;
- студент пока выбирает группу вручную, потому что в модели пользователя нет связи `student -> group`;
- старые таблицы и контроллеры `lessons` / `schedule_data` ещё физически есть, но больше не используются для seed-расписания.
- студент пока выбирает группу вручную, потому что в модели пользователя нет связи `student -> group`.
## Следующий этап
Рекомендуемый следующий этап:
1. Добавить в админку вкладку настройки временных слотов.
2. Добавить UI учебных годов, семестров и праздников.
3. Добавить визуальную матрицу учебного графика.
4. Добавить конструктор правил расписания.
5. Реализовать backend-валидацию конфликтов:
1. Реализовать backend-валидацию конфликтов:
- преподаватель не может вести разные занятия одновременно;
- аудитория не может быть занята двумя разными занятиями одновременно;
- группа не может быть на двух занятиях одновременно, кроме корректного деления по подгруппам.
6. Удалить старые экраны, контроллеры, DTO, модели и репозитории `lessons` / `schedule_data`.
7. Удалить старые таблицы `lessons` и `schedule_data` из `V1__init.sql`.
2. Добавить модель связи студента с учебной группой, чтобы кабинет студента не требовал ручного выбора группы.
3. Добавить отдельное управление подгруппами и подключить выбор `subgroupId` в конструкторе правил.
## Связанные документы