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

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

@@ -233,110 +233,56 @@ CRUD доступен по:
| `PUT` | `/api/admin/schedule-rules/{id}` | Обновить правило |
| `DELETE` | `/api/admin/schedule-rules/{id}` | Удалить правило |
---
### `GET /api/lesson-types`
## Расписание (Lessons, deprecated)
Справочник типов занятий для конструктора правил расписания.
Старые эндпоинты ещё физически есть в коде до удаления старых контроллеров и таблиц. Новый просмотр расписания использует `GET /api/schedule`, а новые seed-данные создаются сразу в динамической модели.
### `GET /api/users/lessons`
Список всех занятий с разрешёнными именами (преподаватель, группа, дисциплина, аудитория).
**Ответ:**
**Ответ:**
```json
[
{
"id": 1,
"teacherName": "Тестовый преподаватель",
"groupName": "ИВТ-21-1",
"classroomName": "101 Ленинская",
"educationFormName": "Бакалавриат",
"subjectName": "Высшая математика",
"typeLesson": "Лекция",
"lessonFormat": "Очно",
"day": "Понедельник",
"week": "Верхняя",
"time": "11:40 - 13:10"
}
{ "id": 1, "name": "Лекция" },
{ "id": 2, "name": "Практика" }
]
```
### `GET /api/users/lessons/{teacherId}`
---
Занятия конкретного преподавателя.
## Кафедры и специальности
### `POST /api/users/lessons/create`
### Кафедры
Создание занятия.
| Метод | URL | Назначение |
|-------|-----|------------|
| `GET` | `/api/departments` | Список кафедр |
| `POST` | `/api/departments` | Создать кафедру |
| `PUT` | `/api/departments/{id}` | Обновить кафедру |
| `DELETE` | `/api/departments/{id}` | Удалить кафедру |
**Тело запроса:**
**Тело создания/обновления:**
```json
{
"teacherId": 2,
"groupId": 1,
"subjectId": 1,
"lessonFormat": "Очно",
"typeLesson": "Лекция",
"classroomId": 1,
"day": "Понедельник",
"week": "Верхняя",
"time": "11:40 - 13:10"
"departmentName": "Кафедра ИБ",
"departmentCode": 1
}
```
**Валидация:**
### Специальности
| Поле | Правило |
|------|---------|
| `teacherId` | Обязателен, ≠ 0 |
| `groupId` | Обязателен, ≠ 0 |
| `subjectId` | Обязателен, ≠ 0 |
| `lessonFormat` | `Очно` или `Онлайн` |
| `typeLesson` | `Лекция`, `Практическая работа`, `Лабораторная работа` |
| `classroomId` | Обязателен, ≠ 0 |
| `day` | Пн–Сб (на русском) |
| `week` | `Верхняя`, `Нижняя`, `Обе` |
| `time` | Обязателен |
| Метод | URL | Назначение |
|-------|-----|------------|
| `GET` | `/api/specialties` | Список специальностей |
| `POST` | `/api/specialties` | Создать специальность |
| `PUT` | `/api/specialties/{id}` | Обновить специальность |
| `DELETE` | `/api/specialties/{id}` | Удалить специальность |
### `PUT /api/users/lessons/update/{lessonId}`
Обновление занятия. Поддерживает partial update — передаются только изменённые поля.
**Тело ответа:**
**Тело создания/обновления:**
```json
{
"id": 5,
"teacherId": 1,
"groupId": 1,
"subjectId": 2,
"LessonFormat": "Онлайн",
"typeLesson": "Практическая работа",
"classroomId": 3,
"day": "Понедельник",
"week": "Верхняя",
"time": "9:40 - 11:10",
"updatedFields": {
"teacherId": 1,
"subjectId": 2,
"lessonFormat": "Онлайн",
"classroomId": 3,
"day": "Понедельник",
"time": "9:40 - 11:10"
},
"message": "Занятие успешно обновлено"
"specialityName": "Программная инженерия",
"specialityCode": "09.03.04"
}
```
### `DELETE /api/users/lessons/delete/{lessonId}`
Удаление занятия.
### `GET /api/users/lessons/ping`
Проверка доступности контроллера. Возвращает строку `pong`.
---
## Группы
@@ -375,11 +321,13 @@ CRUD доступен по:
"groupSize": 12,
"educationFormId": 1,
"departmentId": 1,
"course": 2,
"yearStartStudy": 2026,
"specialityCode": 1
}
```
`specialityCode` исторически содержит ID записи из `/api/specialties`; текущий курс вычисляется из `yearStartStudy`.
### `DELETE /api/groups/{id}`
Удаление группы.