feat: улучшить учебные периоды и просмотр расписаний
This commit is contained in:
39
docs/API.md
39
docs/API.md
@@ -365,10 +365,9 @@ Refresh-токен ротируется при каждом успешном о
|
||||
| `startDate` | Да | Начало периода в формате `YYYY-MM-DD` |
|
||||
| `endDate` | Да | Конец периода в формате `YYYY-MM-DD` |
|
||||
|
||||
Передаётся ровно один параметр: `groupId` или `teacherId`. Максимальный диапазон — 120
|
||||
календарных дат с учётом обеих границ: например, период с 1 января по 30 апреля
|
||||
невисокосного года содержит ровно 120 дат и разрешён, а по 1 мая — уже 121 дата и
|
||||
отклоняется. Если у группы нет назначения календарного графика на учебный год даты,
|
||||
Передаётся ровно один параметр: `groupId` или `teacherId`. Максимальный диапазон — 200
|
||||
календарных дат с учётом обеих границ: 200 дат разрешены, 201 дата отклоняется. Если у
|
||||
группы нет назначения календарного графика на учебный год даты,
|
||||
расписание для неё возвращается пустым списком. Время пары берётся из базового слота
|
||||
правила, но для конкретной даты может быть заменено субботней или ручной сеткой времени из
|
||||
`/api/admin/time-slots`.
|
||||
@@ -508,12 +507,30 @@ GET /api/schedule?groupId=1&startDate=2026-04-27&endDate=2026-05-03
|
||||
**Тело учебного года:**
|
||||
```json
|
||||
{
|
||||
"title": "2026-2027",
|
||||
"startDate": "2026-09-01",
|
||||
"endDate": "2027-06-30"
|
||||
"semesters": [
|
||||
{
|
||||
"semesterType": "autumn",
|
||||
"startDate": "2026-09-01",
|
||||
"endDate": "2027-01-31"
|
||||
},
|
||||
{
|
||||
"semesterType": "spring",
|
||||
"startDate": "2027-02-01",
|
||||
"endDate": "2027-06-30"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Название и дата окончания учебного года вычисляются backend автоматически по дате начала:
|
||||
для `2026-09-01` будут сохранены название `2026-2027` и окончание `2027-06-30`.
|
||||
В административной форме пользователь вводит только год `2026`; frontend преобразует его
|
||||
в `startDate: 2026-09-01` и сразу показывает вычисленный год окончания `2027`.
|
||||
При создании требуется хотя бы один семестр; учебный год и все переданные семестры
|
||||
сохраняются одной транзакцией. Поля `title` и `endDate`, переданные старым клиентом,
|
||||
не влияют на вычисленные значения.
|
||||
|
||||
**Тело семестра:**
|
||||
```json
|
||||
{
|
||||
@@ -526,10 +543,11 @@ GET /api/schedule?groupId=1&startDate=2026-04-27&endDate=2026-05-03
|
||||
Границы учебных периодов включительны. Учебные годы не могут пересекаться, семестры одного
|
||||
года также не могут пересекаться и должны полностью находиться внутри его границ. Следующий
|
||||
период разрешено начать на следующий календарный день после окончания предыдущего.
|
||||
Повторное название года, повторный тип семестра или пересечение возвращаются как
|
||||
Повторный тип семестра или пересечение возвращаются как
|
||||
`409 Conflict`; неверный порядок дат и выход семестра за границы года — как `400 Bad Request`.
|
||||
При сужении учебного года все существующие семестры должны оставаться внутри новых границ.
|
||||
Создание семестра также создаёт для него пустую версию 1 со статусом `PUBLISHED` и названием
|
||||
Создание учебного года или отдельного семестра также создаёт для каждого нового семестра
|
||||
пустую версию 1 со статусом `PUBLISHED` и названием
|
||||
`Основное расписание`, поэтому конструктор сразу может работать в обычном режиме.
|
||||
|
||||
**Тело создания/обновления кода активности:**
|
||||
@@ -752,6 +770,9 @@ ID существующих слотов сохраняются; удалени
|
||||
| `timeSlotId` | Временной слот |
|
||||
| `parity` | `BOTH`, `ODD`, `EVEN` |
|
||||
|
||||
Диапазон включает обе границы и не может превышать 200 календарных дней. Этого достаточно,
|
||||
чтобы запросить осенний или весенний семестр целиком одним обращением.
|
||||
|
||||
Если указан только `teacherId` без `groupId` и `departmentId`, базовое расписание
|
||||
преподавателя строится напрямую. Затем поиск учитывает точечные изменения, где преподаватель
|
||||
назначен через `newTeacherId`: для каждой уникальной даты такой замены один раз строится
|
||||
@@ -798,7 +819,7 @@ GET /api/schedule/search?classroomId=1&startDate=2026-05-20&endDate=2026-05-27
|
||||
| `DELETE` | `/api/edu-office/schedule/overrides/{id}` | Удалить изменение и вернуть актуальный вариант из правила |
|
||||
|
||||
`startDate` и `endDate` у списка передаются только парой, включительно; максимальный
|
||||
диапазон — 120 дней. Ответ реестра содержит исходные дату, время, преподавателя,
|
||||
диапазон — 200 дней. Ответ реестра содержит исходные дату, время, преподавателя,
|
||||
аудиторию, формат, дисциплину, тип занятия, группы и границы семестра, поэтому отменённую
|
||||
или перенесённую пару можно открыть без присутствия в текущей выдаче расписания.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user