- Защищённые эндпоинты требуют, чтобы cookie уже были установлены
Логин через TPU OAuth code flow. После успешного входа сервер ставит cookies app_token и refresh_token.
Что ожидает:
code- строка, код авторизацииcodeVerifier- строка, verifier из PKCE
Пример запроса:
curl -X POST {baseURL}/auth/login \
-H "Content-Type: application/json" \
-d '{
"code": "auth_code_from_tpu",
"codeVerifier": "pkce_verifier_value"
}'Пример ответа:
{
"message": "Successfully authenticated",
"user": {
"id": 1,
"username": "ivanBanan",
"email": "ib@tpu.ru",
"tpuId": "111111",
"totalPoints": 120
}
}Обновляет access token и refresh token по cookie refresh_token.
Что ожидает:
- Cookie
refresh_token
Пример запроса:
curl -X POST {baseURL}/auth/refresh \
--cookie "refresh_token=xxx"Пример ответа:
{
"user": {
"id": 1,
"username": "ivanBanan",
"email": "ivanBanan@tpu.ru",
"tpuId": "111111",
"totalPoints": 120
}
}Возвращает единственный уровень для тестового пользователя.
Что ожидает:
- Ничего, авторизация не требуется
Пример запроса:
curl {baseURL}/api/levelsПример ответа:
[
{
"id": 1,
"name": "Лев Тестировщик",
"min_points": 0,
"description": "Базовый уровень для тестирования и первого доступа к системе.",
"color": "#ca00c6"
}
]Список мероприятий. Для гостя возвращаются мероприятия без признака регистрации пользователя, для авторизованного пользователя добавляются isRegistered и registrationType.
Что ожидает:
- Ничего, авторизация необязательна
Пример запроса:
curl {baseURL}/eventsПример ответа:
[
{
"uuid": "a1b2c3d4-e5f6-4789-8abc-1234567890ab",
"title": "Весенний турнир",
"startDate": "2026-05-10T10:00:00.000Z",
"location": "Главный корпус",
"description": "Соревнование между командами бананов",
"participantPoints": 20,
"fanPoints": 5,
"registrationDeadline": "2026-05-08T18:00:00.000Z",
"status": "published",
"isRegistered": false,
"registrationType": null
}
]Детальная информация о мероприятии.
Что ожидает:
uuidв path
Пример запроса:
curl {baseURL}/events/a1b2c3d4-e5f6-4789-8abc-1234567890abПример ответа:
{
"uuid": "a1b2c3d4-e5f6-4789-8abc-1234567890ab",
"title": "Весенний турнир",
"description": "Соревнование между командами",
"eventType": "sport",
"status": "published",
"startDate": "2026-05-10T10:00:00.000Z",
"endDate": "2026-05-10T14:00:00.000Z",
"registrationDeadline": "2026-05-08T18:00:00.000Z",
"participantPoints": 20,
"fanPoints": 5,
"maxParticipants": 100,
"location": "Главный корпус",
"organizerId": 1,
"createdAt": "2026-05-01T12:00:00.000Z",
"updatedAt": "2026-05-02T12:00:00.000Z",
"currentParticipants": 12,
"currentFans": 4,
"isRegistered": true,
"userRegistration": {
"id": 55,
"role": "participant",
"status": "registered",
"registeredAt": "2026-05-03T09:15:00.000Z"
}
}Создаёт новое мероприятие.
Что ожидает:
- Cookie
app_token title- строка, обязательноstartDate- дата, обязательноendDate- дата, обязательно- Дополнительно можно передать
description,eventType,status,registrationDeadline,participantPoints,fanPoints,maxParticipants,location
Пример запроса:
curl -X POST {baseURL}/events \
-H "Content-Type: application/json" \
--cookie "app_token=your_access_token" \
-d '{
"title": "Весенний турнир",
"description": "Соревнование между командами",
"eventType": "sport",
"startDate": "2026-05-10T10:00:00.000Z",
"endDate": "2026-05-10T14:00:00.000Z",
"registrationDeadline": "2026-05-08T18:00:00.000Z",
"participantPoints": 20,
"fanPoints": 5,
"maxParticipants": 100,
"location": "Главный корпус"
}'Пример ответа:
{
"message": "Мероприятие успешно создано",
"uuid": "a1b2c3d4-e5f6-4789-8abc-1234567890ab"
}Частичное обновление мероприятия. Можно передать одно поле или все поля.
Что ожидает:
- Cookie
app_token uuidв path- Любые из полей:
title,description,eventType,status,startDate,endDate,registrationDeadline,participantPoints,fanPoints,maxParticipants,location - Минимальная проверка: хотя бы одно поле должно быть передано
Пример запроса:
curl -X PATCH {baseURL}/events/a1b2c3d4-e5f6-4789-8abc-1234567890ab \
-H "Content-Type: application/json" \
--cookie "app_token=your_access_token" \
-d '{
"title": "Весенний турнир 2026",
"maxParticipants": 120,
"status": "published"
}'Пример ответа:
{
"message": "Мероприятие успешно обновлено",
"event": {
"uuid": "a1b2c3d4-e5f6-4789-8abc-1234567890ab",
"title": "Весенний турнир 2026",
"description": "Соревнование между командами",
"eventType": "sport",
"status": "published",
"startDate": "2026-05-10T10:00:00.000Z",
"endDate": "2026-05-10T14:00:00.000Z",
"registrationDeadline": "2026-05-08T18:00:00.000Z",
"participantPoints": 20,
"fanPoints": 5,
"maxParticipants": 120,
"location": "Главный корпус",
"organizerId": 1,
"createdAt": "2026-05-01T12:00:00.000Z",
"updatedAt": "2026-05-04T12:00:00.000Z"
}
}Удаляет мероприятие.
Что ожидает:
- Cookie
app_token uuidв path
Пример запроса:
curl -X DELETE {baseURL}/events/a1b2c3d4-e5f6-4789-8abc-1234567890ab \
--cookie "app_token=your_access_token"Пример ответа:
{
"message": "Мероприятие успешно удалено",
"uuid": "a1b2c3d4-e5f6-4789-8abc-1234567890ab"
}Регистрирует пользователя на мероприятие.
Что ожидает:
- Cookie
app_token uuidв pathregistrationType-participantилиfan
Пример запроса:
curl -X POST {baseURL}/events/a1b2c3d4-e5f6-4789-8abc-1234567890ab/register \
-H "Content-Type: application/json" \
--cookie "app_token=your_access_token" \
-d '{
"registrationType": "participant"
}'Пример ответа:
{
"success": true,
"message": "Регистрация прошла успешно",
"registration": {
"id": 55,
"eventUuid": "a1b2c3d4-e5f6-4789-8abc-1234567890ab",
"userId": 1,
"registrationType": "participant",
"registeredAt": "2026-05-04T10:00:00.000Z"
},
"event": {
"currentParticipants": 13
}
}Снимает пользователя с регистрации на мероприятие.
Что ожидает:
- Cookie
app_token uuidв path
Пример запроса:
curl -X DELETE {baseURL}/events/a1b2c3d4-e5f6-4789-8abc-1234567890ab/unregister \
--cookie "app_token=your_access_token"Пример ответа:
{
"success": true,
"message": "Отписка от мероприятия выполнена успешно",
"uuid": "a1b2c3d4-e5f6-4789-8abc-1234567890ab",
"event": {
"currentParticipants": 12
}
}Список участников мероприятия.
Что ожидает:
- Cookie
app_token uuidв path
Пример запроса:
curl {baseURL}/events/a1b2c3d4-e5f6-4789-8abc-1234567890ab/persons \
--cookie "app_token=your_access_token"Пример ответа:
{
"success": true,
"count": 2,
"persons": [
{
"id": 1,
"username": "ivanBanan",
"firstName": "Иван",
"lastName": "Банан",
"email": "ivanBanan@tpu.ru",
"totalPoints": 120,
"registrationId": 55,
"role": "participant",
"attended": true,
"registeredAt": "2026-05-03T09:15:00.000Z"
}
]
}Отмечает людей на мероприятии и начисляет баллы за участие.
Что ожидает:
- Cookie
app_token uuidв pathuserIds- массив чисел
Пример запроса:
curl -X POST {baseURL}/events/a1b2c3d4-e5f6-4789-8abc-1234567890ab/persons \
-H "Content-Type: application/json" \
--cookie "app_token=your_access_token" \
-d '{
"userIds": [1, 2, 3]
}'Пример ответа:
{
"success": true,
"message": "Points awarded successfully",
"results": [
{
"userId": 1,
"points": 20,
"registered": true
}
]
}Список товаров.
Что ожидает:
- Cookie
app_token
Пример запроса:
curl {baseURL}/shop \
--cookie "app_token=your_access_token"Пример ответа:
[
{
"id": 1,
"name": "Худи 'Банан'",
"description": "Теплая толстовка для тех, кто не боится никого",
"price": 2500,
"image": null,
"points": 100
}
]Товар по id.
Что ожидает:
- Cookie
app_token idв path как число
Пример запроса:
curl {baseURL}/shop/1 \
--cookie "app_token=your_access_token"Пример ответа:
{
"id": 1,
"name": "Худи 'Банан'",
"description": "Теплая толстовка для тех, кто не боится ничего",
"price": 2500,
"image": null,
"points": 100
}Список заказов пользователя.
Что ожидает:
- Cookie
app_token
Пример запроса:
curl {baseURL}/profile/orders \
--cookie "app_token=your_access_token"Пример ответа:
[
{
"id": 101,
"image": null,
"product": "Футболка",
"description": "Размер L, черная",
"price": "1200",
"status": "completed",
"time": "12:30",
"date": "10.03.2024"
}
]Список достижений пользователя.
Что ожидает:
- Cookie
app_token
Пример запроса:
curl {baseURL}/profile/achievements \
--cookie "app_token=your_access_token"Пример ответа:
[
{
"id": 1,
"icon": "🔥",
"title": "Первая регистрация",
"description": "Зарегался на мероприятие",
"achieved": true
}
]Список всех пользователей.
Что ожидает:
- Cookie
app_token
Пример запроса:
curl {baseURL}/users \
--cookie "app_token=your_access_token"Пример ответа:
[
{
"id": 1,
"username": "ivanBanan",
"email": "ivanBanan@tpu.ru",
"totalPoints": 120
}
]Пользователь по id.
Что ожидает:
- Cookie
app_token idв path как число
Пример запроса:
curl {baseURL}/users/1 \
--cookie "app_token=your_access_token"Пример ответа:
{
"id": 1,
"username": "ivanBanan",
"email": "ivanBanan@tpu.ru",
"totalPoints": 120
}Типовые ответы при ошибках:
{
"message": "Unauthorized"
}{
"message": "Invalid event uuid"
}{
"message": "Event not found"
}{
"message": "Server error"
}