сделал настройку временных слотов

This commit is contained in:
Zuev
2026-05-01 20:55:49 +03:00
parent bf02efb8b8
commit 3cb311f469
32 changed files with 2130 additions and 383 deletions

View File

@@ -116,7 +116,7 @@
| `startDate` | Да | Начало периода в формате `YYYY-MM-DD` |
| `endDate` | Да | Конец периода в формате `YYYY-MM-DD` |
Передаётся ровно один параметр: `groupId` или `teacherId`. Максимальный диапазон — 120 дней. Если у группы нет назначения календарного графика на учебный год даты, расписание для неё возвращается пустым списком.
Передаётся ровно один параметр: `groupId` или `teacherId`. Максимальный диапазон — 120 дней. Если у группы нет назначения календарного графика на учебный год даты, расписание для неё возвращается пустым списком. Время пары берётся из базового слота правила, но для конкретной даты может быть заменено субботней или ручной сеткой времени из `/api/admin/time-slots`.
**Пример:**
```http
@@ -160,25 +160,51 @@ GET /api/schedule?groupId=1&startDate=2026-04-27&endDate=2026-05-03
### `GET /api/admin/time-slots`
Список временных слотов занятий. CRUD доступен по:
Список временных слотов занятий. Слот принадлежит конкретной сетке времени: базовой, автоматической субботней или ручной.
| Метод | URL | Назначение |
|-------|-----|------------|
| `GET` | `/api/admin/time-slots` | Список слотов |
| `GET` | `/api/admin/time-slots/effective?date=2026-05-02` | Эффективные слоты для даты |
| `POST` | `/api/admin/time-slots` | Создать слот |
| `PUT` | `/api/admin/time-slots/{id}` | Обновить слот |
| `DELETE` | `/api/admin/time-slots/{id}` | Удалить слот |
| `GET` | `/api/admin/time-slots/scopes` | Список сеток времени |
| `POST` | `/api/admin/time-slots/scopes` | Создать ручную сетку |
| `PUT` | `/api/admin/time-slots/scopes/{id}` | Переименовать ручную сетку |
| `DELETE` | `/api/admin/time-slots/scopes/{id}` | Удалить ручную сетку |
| `GET` | `/api/admin/time-slots/date-assignments` | Ручные назначения дат |
| `POST` | `/api/admin/time-slots/date-assignments` | Применить ручную сетку к дате |
| `DELETE` | `/api/admin/time-slots/date-assignments/{id}` | Убрать ручное назначение |
**Тело создания/обновления:**
```json
{
"orderNumber": 1,
"scopeId": 1,
"startTime": "08:00:00",
"endTime": "09:30:00",
"durationMinutes": 90
}
```
**Создание ручной сетки:**
```json
{
"name": "Праздничная сетка"
}
```
**Ручное применение сетки к дате:**
```json
{
"date": "2026-05-08",
"scopeId": 3
}
```
Базовая сетка применяется по умолчанию. Субботняя сетка применяется автоматически по субботам. Ручные сетки применяются только на датах из `date-assignments` и имеют приоритет над автоматической субботней сеткой. В правилах расписания выбираются только базовые слоты; эффективное время пары подставляется при генерации.
### Учебные годы, семестры и коды календарного графика
| Метод | URL | Назначение |
@@ -281,6 +307,8 @@ CRUD доступен по:
| `PUT` | `/api/admin/schedule-rules/{id}` | Обновить правило |
| `DELETE` | `/api/admin/schedule-rules/{id}` | Удалить правило |
`timeSlotId` должен ссылаться на базовый слот (`scopeApplyMode = DEFAULT`). Субботняя и ручные сетки не выбираются в правиле напрямую.
### `GET /api/lesson-types`
Справочник типов занятий для конструктора правил расписания.
@@ -436,7 +464,7 @@ CRUD доступен по:
}
```
Назначаемый график должен относиться к тому же учебному году, специальности и профилю, что и группа.
Назначаемый график должен относиться к тому же учебному году, специальности, профилю и форме обучения, что и группа.
---
@@ -453,6 +481,8 @@ CRUD доступен по:
"id": 1,
"name": "101 Ленинская",
"capacity": 120,
"building": "Главный корпус",
"floor": 2,
"isAvailable": true,
"equipments": [
{ "id": 1, "name": "Проектор" },
@@ -470,6 +500,8 @@ CRUD доступен по:
{
"name": "404 Лаборатория",
"capacity": 30,
"building": "Лабораторный корпус",
"floor": 4,
"isAvailable": true,
"equipmentIds": [1, 2, 3]
}