Table of Contents
- Справочник REST API: Система расписания университета
- 1. Аутентификация (/api/auth)
- 2. Пользователи (/api/users)
- GET /api/users — Список всех пользователей
- GET /api/users/teachers — Список преподавателей
- POST /api/users — Создание пользователя
- DELETE /api/users/{id} — Удаление пользователя
- 3. Аудитории (/api/classrooms)
- GET /api/classrooms — Список всех аудиторий
- POST /api/classrooms — Создание аудитории
- PUT /api/classrooms/{id} — Обновление аудитории
- DELETE /api/classrooms/{id} — Удаление аудитории
- 4. Оборудование (/api/equipments)
- GET /api/equipments — Список всего оборудования
- POST /api/equipments — Создание оборудования
- DELETE /api/equipments/{id} — Удаление оборудования
- 5. Дисциплины (/api/subjects)
- GET /api/subjects — Список всех дисциплин
- POST /api/subjects — Создание дисциплины
- DELETE /api/subjects/{id} — Удаление дисциплины
- 6. Формы обучения (/api/education-forms)
- GET /api/education-forms — Список форм обучения
- POST /api/education-forms — Создание формы обучения
- DELETE /api/education-forms/{id} — Удаление формы обучения
- 7. Группы (/api/groups)
- GET /api/groups — Список всех групп
- POST /api/groups — Создание группы
- DELETE /api/groups/{id} — Удаление группы
- 8. Привязка преподавателей к дисциплинам (/api/teacher-subjects)
- GET /api/teacher-subjects — Список всех привязок
- POST /api/teacher-subjects — Создание привязки
- DELETE /api/teacher-subjects — Удаление привязки
- 9. Занятия / Расписание (/api/users/test)
- GET /api/users/test — Список всех занятий
- POST /api/users/test/create — Создание занятия
- GET /api/users/test/ping — Проверка доступности
- Общий формат ошибок
Справочник REST API: Система расписания университета
Базовый URL: /api
1. Аутентификация (/api/auth)
POST /api/auth/login — Вход в систему
Тело запроса (JSON):
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
username |
String | ✅ | Логин пользователя |
password |
String | ✅ | Пароль пользователя |
Тело ответа (JSON) — LoginResponse:
| Поле | Тип | Присутствие | Описание |
|---|---|---|---|
success |
Boolean | Всегда | true при успешном входе, false при ошибке |
message |
String | Всегда | "OK" или сообщение об ошибке |
token |
String | Только при success=true |
UUID-токен сессии |
role |
String | Только при success=true |
Роль: ADMIN, TEACHER или STUDENT |
redirect |
String | Только при success=true |
URL для редиректа: /admin/, /teacher/ или /student/ |
Коды ответа: 200 OK, 401 Unauthorized
2. Пользователи (/api/users)
GET /api/users — Список всех пользователей
Параметры запроса: Нет
Тело ответа (JSON) — массив UserResponse[]:
| Поле | Тип | Описание |
|---|---|---|
id |
Long | ID пользователя |
username |
String | Логин пользователя |
role |
String | Роль: ADMIN, TEACHER или STUDENT |
GET /api/users/teachers — Список преподавателей
Параметры запроса: Нет
Тело ответа: Массив UserResponse[] (формат аналогичен /api/users, но только пользователи с ролью TEACHER).
POST /api/users — Создание пользователя
Тело запроса (JSON) — CreateUserRequest:
| Поле | Тип | Обязательное | Валидация | Описание |
|---|---|---|---|---|
username |
String | ✅ | Не пустое, уникальное | Логин нового пользователя |
password |
String | ✅ | Минимум 4 символа | Пароль (хэшируется через BCrypt) |
role |
String | ✅ | Одно из: ADMIN, TEACHER, STUDENT |
Роль пользователя |
Тело ответа: UserResponse (при успехе)
Коды ответа: 200 OK, 400 Bad Request (с полем message)
DELETE /api/users/{id} — Удаление пользователя
Параметры пути:
| Параметр | Тип | Обязательное | Описание |
|---|---|---|---|
id |
Long | ✅ | ID пользователя |
Тело ответа: { "message": "Пользователь удалён" }
Коды ответа: 200 OK, 404 Not Found
3. Аудитории (/api/classrooms)
GET /api/classrooms — Список всех аудиторий
Параметры запроса: Нет
Тело ответа (JSON) — массив ClassroomResponse[]:
| Поле | Тип | Описание |
|---|---|---|
id |
Long | ID аудитории |
name |
String | Название/номер аудитории |
capacity |
Integer | Вместимость |
isAvailable |
Boolean | Доступна ли аудитория |
equipments |
Equipment[] | Список оборудования (объекты с id и name) |
POST /api/classrooms — Создание аудитории
Тело запроса (JSON) — ClassroomRequest:
| Поле | Тип | Обязательное | По умолчанию | Валидация | Описание |
|---|---|---|---|---|---|
name |
String | ✅ | — | Не пустое, уникальное | Название/номер аудитории |
capacity |
Integer | ✅ | — | Больше нуля | Вместимость |
isAvailable |
Boolean | ❌ | true |
— | Доступна ли аудитория |
equipmentIds |
Long[] | ❌ | [] |
ID существующего оборудования | Список ID привязанного оборудования |
Тело ответа: ClassroomResponse
Коды ответа: 200 OK, 400 Bad Request
PUT /api/classrooms/{id} — Обновление аудитории
Параметры пути:
| Параметр | Тип | Обязательное | Описание |
|---|---|---|---|
id |
Long | ✅ | ID аудитории |
Тело запроса (JSON) — ClassroomRequest (все поля опциональны при обновлении):
| Поле | Тип | Обязательное | Валидация | Описание |
|---|---|---|---|---|
name |
String | ❌ | Не пустое, уникальное (если передаётся) | Новое название |
capacity |
Integer | ❌ | Больше нуля (если передаётся) | Новая вместимость |
isAvailable |
Boolean | ❌ | — | Новый статус доступности |
equipmentIds |
Long[] | ❌ | — | Новый список ID оборудования (полная замена) |
Тело ответа: ClassroomResponse
Коды ответа: 200 OK, 400 Bad Request, 404 Not Found
DELETE /api/classrooms/{id} — Удаление аудитории
Параметры пути:
| Параметр | Тип | Обязательное | Описание |
|---|---|---|---|
id |
Long | ✅ | ID аудитории |
Тело ответа: { "message": "Аудитория удалена" }
Коды ответа: 200 OK, 404 Not Found
4. Оборудование (/api/equipments)
GET /api/equipments — Список всего оборудования
Параметры запроса: Нет
Тело ответа (JSON) — массив Equipment[]:
| Поле | Тип | Описание |
|---|---|---|
id |
Long | ID оборудования |
name |
String | Название оборудования |
POST /api/equipments — Создание оборудования
Тело запроса (JSON):
| Поле | Тип | Обязательное | Валидация | Описание |
|---|---|---|---|---|
name |
String | ✅ | Не пустое, уникальное | Название оборудования |
Тело ответа: Equipment (объект с id и name)
Коды ответа: 200 OK, 400 Bad Request
DELETE /api/equipments/{id} — Удаление оборудования
Параметры пути:
| Параметр | Тип | Обязательное | Описание |
|---|---|---|---|
id |
Long | ✅ | ID оборудования |
Тело ответа: { "message": "Оборудование удалено" }
Коды ответа: 200 OK, 404 Not Found
5. Дисциплины (/api/subjects)
GET /api/subjects — Список всех дисциплин
Параметры запроса: Нет
Тело ответа (JSON) — массив Subject[]:
| Поле | Тип | Описание |
|---|---|---|
id |
Long | ID дисциплины |
name |
String | Название дисциплины |
POST /api/subjects — Создание дисциплины
Тело запроса (JSON):
| Поле | Тип | Обязательное | Валидация | Описание |
|---|---|---|---|---|
name |
String | ✅ | Не пустое, уникальное | Название дисциплины |
Тело ответа: Subject (объект с id и name)
Коды ответа: 200 OK, 400 Bad Request
DELETE /api/subjects/{id} — Удаление дисциплины
Параметры пути:
| Параметр | Тип | Обязательное | Описание |
|---|---|---|---|
id |
Long | ✅ | ID дисциплины |
Тело ответа: { "message": "Дисциплина удалена" }
Коды ответа: 200 OK, 404 Not Found
6. Формы обучения (/api/education-forms)
GET /api/education-forms — Список форм обучения
Параметры запроса: Нет
Тело ответа (JSON) — массив объектов:
| Поле | Тип | Описание |
|---|---|---|
id |
Long | ID формы обучения |
name |
String | Название формы обучения |
POST /api/education-forms — Создание формы обучения
Тело запроса (JSON):
| Поле | Тип | Обязательное | Валидация | Описание |
|---|---|---|---|---|
name |
String | ✅ | Не пустое, уникальное | Название формы обучения |
Тело ответа: { "id": Long, "name": String }
Коды ответа: 200 OK, 400 Bad Request
DELETE /api/education-forms/{id} — Удаление формы обучения
Параметры пути:
| Параметр | Тип | Обязательное | Описание |
|---|---|---|---|
id |
Long | ✅ | ID формы обучения |
Important
Удаление невозможно, если к форме обучения привязаны группы. Сначала необходимо удалить или перепривязать группы.
Тело ответа: { "message": "Форма обучения удалена" } или ошибка { "message": "Невозможно удалить: есть привязанные группы (N)" }
Коды ответа: 200 OK, 400 Bad Request, 404 Not Found
7. Группы (/api/groups)
GET /api/groups — Список всех групп
Параметры запроса: Нет
Тело ответа (JSON) — массив GroupResponse[]:
| Поле | Тип | Описание |
|---|---|---|
id |
Long | ID группы |
name |
String | Название группы |
educationFormId |
Long | ID формы обучения |
educationFormName |
String | Название формы обучения |
POST /api/groups — Создание группы
Тело запроса (JSON) — CreateGroupRequest:
| Поле | Тип | Обязательное | Валидация | Описание |
|---|---|---|---|---|
name |
String | ✅ | Не пустое, уникальное | Название группы |
educationFormId |
Long | ✅ | Должен существовать в БД | ID формы обучения |
Тело ответа: GroupResponse
Коды ответа: 200 OK, 400 Bad Request
DELETE /api/groups/{id} — Удаление группы
Параметры пути:
| Параметр | Тип | Обязательное | Описание |
|---|---|---|---|
id |
Long | ✅ | ID группы |
Тело ответа: { "message": "Группа удалена" }
Коды ответа: 200 OK, 404 Not Found
8. Привязка преподавателей к дисциплинам (/api/teacher-subjects)
GET /api/teacher-subjects — Список всех привязок
Параметры запроса: Нет
Тело ответа (JSON) — массив TeacherSubjectResponse[]:
| Поле | Тип | Описание |
|---|---|---|
userId |
Long | ID преподавателя |
username |
String | Логин преподавателя |
subjectId |
Long | ID дисциплины |
subjectName |
String | Название дисциплины |
POST /api/teacher-subjects — Создание привязки
Тело запроса (JSON):
| Поле | Тип | Обязательное | Валидация | Описание |
|---|---|---|---|---|
userId |
Long | ✅ | Преподаватель должен существовать | ID преподавателя |
subjectId |
Long | ✅ | Дисциплина должна существовать, привязка уникальна | ID дисциплины |
Тело ответа: { "message": "Привязка создана" }
Коды ответа: 200 OK, 400 Bad Request
DELETE /api/teacher-subjects — Удаление привязки
Тело запроса (JSON):
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
userId |
Long | ✅ | ID преподавателя |
subjectId |
Long | ✅ | ID дисциплины |
Тело ответа: { "message": "Привязка удалена" }
Коды ответа: 200 OK, 404 Not Found
9. Занятия / Расписание (/api/users/test)
GET /api/users/test — Список всех занятий
Параметры запроса: Нет
Тело ответа (JSON) — массив LessonResponse[]:
| Поле | Тип | Описание |
|---|---|---|
id |
Long | ID занятия |
teacherId |
Long | ID преподавателя |
groupId |
Long | ID группы (может быть null в ответе) |
lessonTypeId |
Long | ID типа занятия / предмета |
day |
String | День недели |
week |
String | Чётность недели |
time |
String | Время занятия |
POST /api/users/test/create — Создание занятия
Тело запроса (JSON) — CreateLessonRequest:
| Поле | Тип | Обязательное | Валидация | Описание |
|---|---|---|---|---|
teacherId |
Long | ✅ | Не null, не 0 |
ID преподавателя |
groupId |
Long | ✅ | Не null, не 0 |
ID группы |
lessonTypeId |
Long | ✅ | Не null, не 0 |
ID типа занятия / предмета |
day |
String | ✅ | Не пустое | День недели |
week |
String | ✅ | Не пустое | Чётность недели |
time |
String | ✅ | Не пустое | Время занятия |
Тело ответа: LessonResponse (поля: lessonTypeId, day, week, time)
Коды ответа: 200 OK, 400 Bad Request
GET /api/users/test/ping — Проверка доступности
Параметры запроса: Нет
Тело ответа: "pong" (plain text)
Коды ответа: 200 OK
Общий формат ошибок
Все 400 Bad Request ответы имеют формат:
{
"message": "Текст ошибки на русском языке"
}
На 404 Not Found — возвращается пустое тело.