Много разных изменений
This commit is contained in:
72
docs/API.md
72
docs/API.md
@@ -230,10 +230,39 @@ Refresh-токен ротируется при каждом успешном о
|
||||
|
||||
`UserResponse` единый для списков пользователей, списков преподавателей и ответов создания/восстановления. Поля `departmentName`, `departmentId` и `status` не выводятся только если равны `null`.
|
||||
|
||||
### `GET /api/users/page`
|
||||
|
||||
Пагинированный реестр пользователей для администратора. Параметры: `query`, `role`,
|
||||
`departmentId`, `includeArchived`, `page`, `size`, `sort`, `direction`. Размер страницы
|
||||
ограничен диапазоном `1..100`; поддерживаемые поля сортировки — `fullName`, `username`,
|
||||
`role`, `status`.
|
||||
|
||||
Пагинированные endpoints используют общий ответ:
|
||||
|
||||
```json
|
||||
{
|
||||
"items": [],
|
||||
"page": 0,
|
||||
"size": 25,
|
||||
"totalItems": 0,
|
||||
"totalPages": 0,
|
||||
"first": true,
|
||||
"last": true
|
||||
}
|
||||
```
|
||||
|
||||
### `GET /api/users/teachers`
|
||||
|
||||
Список только преподавателей (роль `TEACHER`).
|
||||
|
||||
### `GET /api/users/teachers/options`
|
||||
|
||||
Серверный поиск преподавателей для асинхронных списков. Параметры: `query`,
|
||||
`departmentId`, `selectedId`, `limit` (`1..50`). Поиск выполняется по логину, ФИО и
|
||||
должности; архивные записи исключаются. Для роли `DEPARTMENT` backend принудительно
|
||||
использует кафедру текущего пользователя и учитывает действующие основные и дополнительные
|
||||
назначения из `teacher_department_assignments`. `selectedId` не обходит это ограничение.
|
||||
|
||||
### `GET /api/users/teachers/{departmentId}`
|
||||
|
||||
Список преподавателей привязанных к конкретной кафедре (роль `TEACHER`, код кафедры `departmentId`). Ответ использует ту же структуру `UserResponse`, что и `GET /api/users`.
|
||||
@@ -309,6 +338,7 @@ Refresh-токен ротируется при каждом успешном о
|
||||
| Метод | URL | Назначение |
|
||||
|-------|-----|------------|
|
||||
| `GET` | `/api/teacher-requests?status=PENDING` | Список заявок, опционально с фильтром статуса |
|
||||
| `GET` | `/api/teacher-requests/page?query=&status=PENDING&page=0&size=25` | Пагинированный поиск заявок по логину, ФИО, должности и кафедре |
|
||||
| `POST` | `/api/teacher-requests/{id}/approve` | Одобрить заявку, скорректировать данные и создать преподавателя |
|
||||
| `POST` | `/api/teacher-requests/{id}/reject` | Отклонить заявку |
|
||||
|
||||
@@ -567,6 +597,7 @@ GET /api/schedule?groupId=1&startDate=2026-04-27&endDate=2026-05-03
|
||||
| Метод | URL | Назначение |
|
||||
|-------|-----|------------|
|
||||
| `GET` | `/api/admin/academic-calendars` | Список графиков, фильтры `academicYearId`, `specialtyId`, `profileId` |
|
||||
| `GET` | `/api/admin/academic-calendars/options` | Асинхронный поиск совместимых графиков для комбобокса |
|
||||
| `GET` | `/api/admin/academic-calendars/{id}` | Один график |
|
||||
| `POST` | `/api/admin/academic-calendars` | Создать график |
|
||||
| `PUT` | `/api/admin/academic-calendars/{id}` | Обновить график |
|
||||
@@ -593,6 +624,11 @@ GET /api/schedule?groupId=1&startDate=2026-04-27&endDate=2026-05-03
|
||||
название автоматически как `код специальности — профиль обучения — форма обучения — учебный год`.
|
||||
Отдельного пользовательского названия у календарного графика нет.
|
||||
|
||||
`GET /api/admin/academic-calendars/options` принимает `query`, `academicYearId`,
|
||||
`specialtyId`, `profileId`, `studyFormId`, `selectedId` и `limit` (`1..50`). Поиск
|
||||
выполняется по составному названию, учебному году, коду/названию специальности, профилю и
|
||||
форме обучения. Фасетные параметры позволяют не показывать группе несовместимые графики.
|
||||
|
||||
`POST /api/admin/academic-calendars` создаёт график и начальную сетку одной транзакцией.
|
||||
Для каждого курса из диапазона `1..courseCount` backend сохраняет один период с кодом `Т`
|
||||
на весь учебный год, включая обе его границы. Поэтому обычные занятия разрешены сразу после
|
||||
@@ -1305,6 +1341,21 @@ payload обрабатываются один раз, используется
|
||||
|
||||
Параметр `includeArchived=true` возвращает все группы, включая архивные и завершившие обучение.
|
||||
|
||||
### `GET /api/groups/page`
|
||||
|
||||
Пагинированный реестр групп. Параметры: `query`, повторяемый `educationFormId`,
|
||||
`departmentId`, `yearStartStudy`, `includeArchived`, `page`, `size`, `sort`, `direction`.
|
||||
Поддерживаемые поля сортировки: `name`, `yearStartStudy`, `groupSize`, `status`. Поиск
|
||||
проверяет название группы, код и название специальности, профиль и форму обучения. Для
|
||||
роли `DEPARTMENT` кафедра всегда берётся из JWT-контекста независимо от переданного фильтра.
|
||||
|
||||
### `GET /api/groups/options`
|
||||
|
||||
Асинхронный поиск активных групп. Параметры: `query`, `departmentId`, `selectedId`, `limit`
|
||||
(`1..50`). Завершившие обучение и архивные группы исключаются. Для роли `DEPARTMENT`
|
||||
действует то же принудительное ограничение своей кафедрой, включая восстановление выбранного
|
||||
`selectedId`.
|
||||
|
||||
**Ответ:**
|
||||
```json
|
||||
[
|
||||
@@ -1408,7 +1459,7 @@ legacy-alias для старых клиентов и исторически со
|
||||
|
||||
| Метод | URL | Назначение |
|
||||
|-------|-----|------------|
|
||||
| `GET` | `/api/subgroups` | Список всех подгрупп |
|
||||
| `GET` | `/api/subgroups?groupId=1&groupId=2` | Подгруппы выбранных групп; без параметра — совместимый список всех подгрупп, не более 100 ID групп за запрос |
|
||||
| `GET` | `/api/groups/{groupId}/subgroups` | Подгруппы конкретной группы |
|
||||
| `POST` | `/api/groups/{groupId}/subgroups` | Создать подгруппу |
|
||||
| `PUT` | `/api/groups/{groupId}/subgroups/{id}` | Обновить подгруппу |
|
||||
@@ -1486,6 +1537,12 @@ legacy-alias для старых клиентов и исторически со
|
||||
|
||||
Список аудиторий с привязанным оборудованием.
|
||||
|
||||
### `GET /api/classrooms/options`
|
||||
|
||||
Асинхронный поиск доступных неархивных аудиторий по названию и корпусу. Параметры:
|
||||
`query`, `selectedId`, `limit` (`1..50`). Выбранная запись добавляется в результат, если
|
||||
она не попала в первую страницу поиска.
|
||||
|
||||
**Ответ:**
|
||||
```json
|
||||
[
|
||||
@@ -1539,6 +1596,12 @@ legacy-alias для старых клиентов и исторически со
|
||||
|
||||
Список всех дисциплин.
|
||||
|
||||
### `GET /api/subjects/page`
|
||||
|
||||
Пагинированный реестр дисциплин. Параметры: `query`, `departmentId`, `includeArchived`,
|
||||
`page`, `size`, `sort`, `direction`; сортировка разрешена по `name`, `code`,
|
||||
`departmentId`, `status`. Роль `DEPARTMENT` всегда ограничивается своей кафедрой на backend.
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "Физика",
|
||||
@@ -1620,14 +1683,17 @@ legacy-alias для старых клиентов и исторически со
|
||||
|
||||
### `GET /api/teacher-subjects`
|
||||
|
||||
Список всех привязок.
|
||||
Список привязок. Повторяемый параметр `subjectId` ограничивает результат указанными
|
||||
дисциплинами; за один запрос принимается не более 100 ID. Без параметра сохраняется
|
||||
совместимый режим получения всех доступных текущей роли привязок.
|
||||
|
||||
**Ответ:**
|
||||
```json
|
||||
[
|
||||
{
|
||||
"userId": 2,
|
||||
"userName": "Тестовый преподаватель",
|
||||
"username": "teacher2",
|
||||
"fullName": "Тестовый преподаватель",
|
||||
"subjectId": 1,
|
||||
"subjectName": "Высшая математика"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user