2025-11-12 19:01:39 +01:00
|
|
|
|
# HubGW API Endpoints Documentation
|
|
|
|
|
|
|
|
|
|
|
|
Полное описание всех API endpoints в HubGW с телами запросов и ответов.
|
|
|
|
|
|
|
|
|
|
|
|
Базовый URL: `/api/v1`
|
|
|
|
|
|
|
|
|
|
|
|
Все endpoints требуют аутентификации через заголовок `X-API-Key`.
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Health
|
|
|
|
|
|
|
|
|
|
|
|
**Префикс:** `/health`
|
|
|
|
|
|
|
|
|
|
|
|
### GET `/health/`
|
|
|
|
|
|
|
|
|
|
|
|
Проверка работоспособности сервиса.
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"status": "ok"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Homes
|
|
|
|
|
|
|
|
|
|
|
|
**Префикс:** `/homes`
|
|
|
|
|
|
|
|
|
|
|
|
### PUT `/homes/`
|
|
|
|
|
|
|
2025-12-02 22:08:55 +01:00
|
|
|
|
Создает или обновляет дом игрока с проверкой лимита.
|
2025-11-12 19:01:39 +01:00
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"name": "string",
|
|
|
|
|
|
"world": "string",
|
|
|
|
|
|
"x": 0.0,
|
|
|
|
|
|
"y": 0.0,
|
|
|
|
|
|
"z": 0.0,
|
|
|
|
|
|
"yaw": 0.0,
|
|
|
|
|
|
"pitch": 0.0,
|
2025-12-02 22:08:55 +01:00
|
|
|
|
"is_public": false,
|
|
|
|
|
|
"max_homes": 5
|
2025-11-12 19:01:39 +01:00
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-12-02 22:08:55 +01:00
|
|
|
|
**Параметры:**
|
|
|
|
|
|
- `max_homes` (optional) - Максимальное количество домов для игрока. Если указан, проверяется лимит при создании нового дома.
|
|
|
|
|
|
|
2025-11-12 19:01:39 +01:00
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": "uuid",
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"name": "string",
|
|
|
|
|
|
"world": "string",
|
|
|
|
|
|
"x": 0.0,
|
|
|
|
|
|
"y": 0.0,
|
|
|
|
|
|
"z": 0.0,
|
|
|
|
|
|
"yaw": 0.0,
|
|
|
|
|
|
"pitch": 0.0,
|
|
|
|
|
|
"is_public": false,
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-12-02 22:08:55 +01:00
|
|
|
|
**Ошибки:**
|
|
|
|
|
|
- `409 Conflict` - Лимит домов превышен (если указан `max_homes`)
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"message": "Home limit exceeded. Maximum 5 homes allowed.",
|
|
|
|
|
|
"code": "limit_exceeded",
|
|
|
|
|
|
"details": {
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"current_count": 5,
|
|
|
|
|
|
"max_homes": 5
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-11-12 19:01:39 +01:00
|
|
|
|
### POST `/homes/get`
|
|
|
|
|
|
|
|
|
|
|
|
Получает конкретный дом игрока по имени.
|
|
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"name": "string"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": "uuid",
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"name": "string",
|
|
|
|
|
|
"world": "string",
|
|
|
|
|
|
"x": 0.0,
|
|
|
|
|
|
"y": 0.0,
|
|
|
|
|
|
"z": 0.0,
|
|
|
|
|
|
"yaw": 0.0,
|
|
|
|
|
|
"pitch": 0.0,
|
|
|
|
|
|
"is_public": false,
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### GET `/homes/{player_uuid}`
|
|
|
|
|
|
|
|
|
|
|
|
Получает список всех домов игрока.
|
|
|
|
|
|
|
|
|
|
|
|
**Параметры:**
|
|
|
|
|
|
- `player_uuid` (path) - UUID игрока
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"homes": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": "uuid",
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"name": "string",
|
|
|
|
|
|
"world": "string",
|
|
|
|
|
|
"x": 0.0,
|
|
|
|
|
|
"y": 0.0,
|
|
|
|
|
|
"z": 0.0,
|
|
|
|
|
|
"yaw": 0.0,
|
|
|
|
|
|
"pitch": 0.0,
|
|
|
|
|
|
"is_public": false,
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"total": 1
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Kits
|
|
|
|
|
|
|
|
|
|
|
|
**Префикс:** `/kits`
|
|
|
|
|
|
|
|
|
|
|
|
### POST `/kits/claim`
|
|
|
|
|
|
|
|
|
|
|
|
Выдает набор (kit) игроку.
|
|
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"player_uuid": "uuid",
|
|
|
|
|
|
"kit_name": "string"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"success": true,
|
|
|
|
|
|
"message": "string",
|
|
|
|
|
|
"cooldown_remaining": 3600
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Cooldowns
|
|
|
|
|
|
|
|
|
|
|
|
**Префикс:** `/cooldowns`
|
|
|
|
|
|
|
|
|
|
|
|
### POST `/cooldowns/check`
|
|
|
|
|
|
|
|
|
|
|
|
Проверяет статус кулдауна для игрока.
|
|
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"cooldown_type": "string"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"is_active": true,
|
|
|
|
|
|
"expires_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"remaining_seconds": 3600
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### POST `/cooldowns/`
|
|
|
|
|
|
|
|
|
|
|
|
Создает новый кулдаун для игрока.
|
|
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"cooldown_type": "string",
|
|
|
|
|
|
"expires_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"cooldown_seconds": 3600,
|
|
|
|
|
|
"data": {}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Статус:** `201 Created`
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"message": "Cooldown created successfully"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Warps
|
|
|
|
|
|
|
|
|
|
|
|
**Префикс:** `/warps`
|
|
|
|
|
|
|
2025-12-02 22:08:55 +01:00
|
|
|
|
Варпы имеют глобально уникальные имена и владельцев. Только владелец может редактировать или удалять свой варп.
|
|
|
|
|
|
|
2025-11-12 19:01:39 +01:00
|
|
|
|
### POST `/warps/`
|
|
|
|
|
|
|
2025-12-02 22:08:55 +01:00
|
|
|
|
Создает новую точку варпа с проверкой лимита per-player.
|
2025-11-12 19:01:39 +01:00
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
2025-12-02 22:08:55 +01:00
|
|
|
|
"player_uuid": "string",
|
2025-11-12 19:01:39 +01:00
|
|
|
|
"name": "string",
|
|
|
|
|
|
"world": "string",
|
|
|
|
|
|
"x": 0.0,
|
|
|
|
|
|
"y": 0.0,
|
|
|
|
|
|
"z": 0.0,
|
|
|
|
|
|
"yaw": 0.0,
|
|
|
|
|
|
"pitch": 0.0,
|
|
|
|
|
|
"is_public": true,
|
2025-12-02 22:08:55 +01:00
|
|
|
|
"description": "string",
|
|
|
|
|
|
"max_warps": 10
|
2025-11-12 19:01:39 +01:00
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-12-02 22:08:55 +01:00
|
|
|
|
**Параметры:**
|
|
|
|
|
|
- `player_uuid` (required) - UUID владельца варпа
|
|
|
|
|
|
- `name` (required) - Глобально уникальное имя варпа
|
|
|
|
|
|
- `max_warps` (optional) - Максимальное количество варпов для игрока
|
|
|
|
|
|
|
2025-11-12 19:01:39 +01:00
|
|
|
|
**Статус:** `201 Created`
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": "uuid",
|
2025-12-02 22:08:55 +01:00
|
|
|
|
"player_uuid": "string",
|
2025-11-12 19:01:39 +01:00
|
|
|
|
"name": "string",
|
|
|
|
|
|
"world": "string",
|
|
|
|
|
|
"x": 0.0,
|
|
|
|
|
|
"y": 0.0,
|
|
|
|
|
|
"z": 0.0,
|
|
|
|
|
|
"yaw": 0.0,
|
|
|
|
|
|
"pitch": 0.0,
|
|
|
|
|
|
"is_public": true,
|
|
|
|
|
|
"description": "string",
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-12-02 22:08:55 +01:00
|
|
|
|
**Ошибки:**
|
|
|
|
|
|
- `409 Conflict` - Варп с таким именем уже существует
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"message": "Warp 'spawn' already exists",
|
|
|
|
|
|
"code": "already_exists",
|
|
|
|
|
|
"details": {
|
|
|
|
|
|
"owner_uuid": "другой-uuid"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
- `409 Conflict` - Лимит варпов превышен (если указан `max_warps`)
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"message": "Warp limit exceeded. Maximum 10 warps allowed.",
|
|
|
|
|
|
"code": "limit_exceeded",
|
|
|
|
|
|
"details": {
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"current_count": 10,
|
|
|
|
|
|
"max_warps": 10
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-11-12 19:01:39 +01:00
|
|
|
|
### PATCH `/warps/`
|
|
|
|
|
|
|
2025-12-02 22:08:55 +01:00
|
|
|
|
Обновляет существующую точку варпа. Только владелец может редактировать варп.
|
2025-11-12 19:01:39 +01:00
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
2025-12-02 22:08:55 +01:00
|
|
|
|
"player_uuid": "string",
|
2025-11-12 19:01:39 +01:00
|
|
|
|
"name": "string",
|
|
|
|
|
|
"world": "string",
|
|
|
|
|
|
"x": 0.0,
|
|
|
|
|
|
"y": 0.0,
|
|
|
|
|
|
"z": 0.0,
|
|
|
|
|
|
"yaw": 0.0,
|
|
|
|
|
|
"pitch": 0.0,
|
2025-12-02 22:08:55 +01:00
|
|
|
|
"is_public": false,
|
2025-11-12 19:01:39 +01:00
|
|
|
|
"description": "string"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-12-02 22:08:55 +01:00
|
|
|
|
**Параметры:**
|
|
|
|
|
|
- `player_uuid` (required) - UUID игрока (для проверки ownership)
|
|
|
|
|
|
- `name` (required) - Имя варпа для обновления
|
|
|
|
|
|
- Все остальные поля опциональны
|
|
|
|
|
|
|
2025-11-12 19:01:39 +01:00
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": "uuid",
|
2025-12-02 22:08:55 +01:00
|
|
|
|
"player_uuid": "string",
|
2025-11-12 19:01:39 +01:00
|
|
|
|
"name": "string",
|
|
|
|
|
|
"world": "string",
|
|
|
|
|
|
"x": 0.0,
|
|
|
|
|
|
"y": 0.0,
|
|
|
|
|
|
"z": 0.0,
|
|
|
|
|
|
"yaw": 0.0,
|
|
|
|
|
|
"pitch": 0.0,
|
2025-12-02 22:08:55 +01:00
|
|
|
|
"is_public": false,
|
2025-11-12 19:01:39 +01:00
|
|
|
|
"description": "string",
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-12-02 22:08:55 +01:00
|
|
|
|
**Ошибки:**
|
|
|
|
|
|
- `403 Forbidden` - Нет прав для редактирования варпа
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"message": "You don't have permission to update warp 'spawn'",
|
|
|
|
|
|
"code": "permission_denied",
|
|
|
|
|
|
"details": {
|
|
|
|
|
|
"warp_owner": "uuid-владельца",
|
|
|
|
|
|
"requested_by": "ваш-uuid"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
- `404 Not Found` - Варп не найден
|
|
|
|
|
|
|
2025-11-12 19:01:39 +01:00
|
|
|
|
### DELETE `/warps/`
|
|
|
|
|
|
|
2025-12-02 22:08:55 +01:00
|
|
|
|
Удаляет точку варпа. Только владелец может удалить варп.
|
2025-11-12 19:01:39 +01:00
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
2025-12-02 22:08:55 +01:00
|
|
|
|
"player_uuid": "string",
|
2025-11-12 19:01:39 +01:00
|
|
|
|
"name": "string"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-12-02 22:08:55 +01:00
|
|
|
|
**Параметры:**
|
|
|
|
|
|
- `player_uuid` (required) - UUID игрока (для проверки ownership)
|
|
|
|
|
|
- `name` (required) - Имя варпа для удаления
|
|
|
|
|
|
|
2025-11-12 19:01:39 +01:00
|
|
|
|
**Статус:** `204 No Content`
|
|
|
|
|
|
|
2025-12-02 22:08:55 +01:00
|
|
|
|
**Ошибки:**
|
|
|
|
|
|
- `403 Forbidden` - Нет прав для удаления варпа
|
|
|
|
|
|
- `404 Not Found` - Варп не найден
|
|
|
|
|
|
|
2025-11-12 19:01:39 +01:00
|
|
|
|
### POST `/warps/get`
|
|
|
|
|
|
|
2025-12-02 22:08:55 +01:00
|
|
|
|
Получает конкретную точку варпа по имени. Доступно всем игрокам.
|
2025-11-12 19:01:39 +01:00
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": "string"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": "uuid",
|
2025-12-02 22:08:55 +01:00
|
|
|
|
"player_uuid": "string",
|
2025-11-12 19:01:39 +01:00
|
|
|
|
"name": "string",
|
|
|
|
|
|
"world": "string",
|
|
|
|
|
|
"x": 0.0,
|
|
|
|
|
|
"y": 0.0,
|
|
|
|
|
|
"z": 0.0,
|
|
|
|
|
|
"yaw": 0.0,
|
|
|
|
|
|
"pitch": 0.0,
|
|
|
|
|
|
"is_public": true,
|
|
|
|
|
|
"description": "string",
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### POST `/warps/list`
|
|
|
|
|
|
|
|
|
|
|
|
Получает список точек варпа с возможностью фильтрации.
|
|
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": "string",
|
|
|
|
|
|
"world": "string",
|
|
|
|
|
|
"is_public": true,
|
|
|
|
|
|
"page": 1,
|
|
|
|
|
|
"size": 20
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"warps": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": "uuid",
|
2025-12-02 22:08:55 +01:00
|
|
|
|
"player_uuid": "string",
|
2025-11-12 19:01:39 +01:00
|
|
|
|
"name": "string",
|
|
|
|
|
|
"world": "string",
|
|
|
|
|
|
"x": 0.0,
|
|
|
|
|
|
"y": 0.0,
|
|
|
|
|
|
"z": 0.0,
|
|
|
|
|
|
"yaw": 0.0,
|
|
|
|
|
|
"pitch": 0.0,
|
|
|
|
|
|
"is_public": true,
|
|
|
|
|
|
"description": "string",
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"total": 1,
|
|
|
|
|
|
"page": 1,
|
|
|
|
|
|
"size": 20,
|
|
|
|
|
|
"pages": 1
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Whitelist
|
|
|
|
|
|
|
|
|
|
|
|
**Префикс:** `/whitelist`
|
|
|
|
|
|
|
|
|
|
|
|
### POST `/whitelist/add`
|
|
|
|
|
|
|
|
|
|
|
|
Добавляет игрока в белый список.
|
|
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"player_name": "string",
|
|
|
|
|
|
"added_by": "string",
|
|
|
|
|
|
"added_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"expires_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"is_active": true,
|
|
|
|
|
|
"reason": "string"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Статус:** `201 Created`
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": "uuid",
|
|
|
|
|
|
"player_name": "string",
|
|
|
|
|
|
"added_by": "string",
|
|
|
|
|
|
"added_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"expires_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"is_active": true,
|
|
|
|
|
|
"reason": "string"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### POST `/whitelist/remove`
|
|
|
|
|
|
|
|
|
|
|
|
Удаляет игрока из белого списка.
|
|
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"player_name": "string"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Статус:** `204 No Content`
|
|
|
|
|
|
|
|
|
|
|
|
### POST `/whitelist/check`
|
|
|
|
|
|
|
|
|
|
|
|
Проверяет, находится ли игрок в белом списке.
|
|
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"player_name": "string"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"is_whitelisted": true
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### GET `/whitelist/`
|
|
|
|
|
|
|
|
|
|
|
|
Получает список всех игроков в белом списке.
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"entries": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": "uuid",
|
|
|
|
|
|
"player_name": "string",
|
|
|
|
|
|
"added_by": "string",
|
|
|
|
|
|
"added_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"expires_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"is_active": true,
|
|
|
|
|
|
"reason": "string"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"total": 1
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### GET `/whitelist/count`
|
|
|
|
|
|
|
|
|
|
|
|
Получает общее количество игроков в белом списке.
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"total": 42
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Punishments
|
|
|
|
|
|
|
|
|
|
|
|
**Префикс:** `/punishments`
|
|
|
|
|
|
|
|
|
|
|
|
### POST `/punishments/`
|
|
|
|
|
|
|
|
|
|
|
|
Создает новое наказание (бан/мут).
|
|
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"player_name": "string",
|
|
|
|
|
|
"player_ip": "192.168.1.1",
|
|
|
|
|
|
"punishment_type": "string",
|
|
|
|
|
|
"reason": "string",
|
|
|
|
|
|
"staff_uuid": "string",
|
|
|
|
|
|
"staff_name": "string",
|
|
|
|
|
|
"expires_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"evidence_url": "string",
|
|
|
|
|
|
"notes": "string"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Статус:** `201 Created`
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": "uuid",
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"player_name": "string",
|
|
|
|
|
|
"player_ip": "192.168.1.1",
|
|
|
|
|
|
"punishment_type": "string",
|
|
|
|
|
|
"reason": "string",
|
|
|
|
|
|
"staff_uuid": "string",
|
|
|
|
|
|
"staff_name": "string",
|
|
|
|
|
|
"expires_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"is_active": true,
|
|
|
|
|
|
"revoked_at": null,
|
|
|
|
|
|
"revoked_by": null,
|
|
|
|
|
|
"revoked_reason": null,
|
|
|
|
|
|
"evidence_url": "string",
|
|
|
|
|
|
"notes": "string",
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### POST `/punishments/revoke`
|
|
|
|
|
|
|
|
|
|
|
|
Отменяет наказание.
|
|
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"punishment_id": "uuid",
|
|
|
|
|
|
"revoked_by": "string",
|
|
|
|
|
|
"revoked_reason": "string"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": "uuid",
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"player_name": "string",
|
|
|
|
|
|
"player_ip": "192.168.1.1",
|
|
|
|
|
|
"punishment_type": "string",
|
|
|
|
|
|
"reason": "string",
|
|
|
|
|
|
"staff_uuid": "string",
|
|
|
|
|
|
"staff_name": "string",
|
|
|
|
|
|
"expires_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"is_active": false,
|
|
|
|
|
|
"revoked_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"revoked_by": "string",
|
|
|
|
|
|
"revoked_reason": "string",
|
|
|
|
|
|
"evidence_url": "string",
|
|
|
|
|
|
"notes": "string",
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### POST `/punishments/query`
|
|
|
|
|
|
|
|
|
|
|
|
Выполняет поиск наказаний по фильтрам.
|
|
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"punishment_type": "string",
|
|
|
|
|
|
"is_active": true,
|
|
|
|
|
|
"page": 1,
|
|
|
|
|
|
"size": 20
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"punishments": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": "uuid",
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"player_name": "string",
|
|
|
|
|
|
"player_ip": "192.168.1.1",
|
|
|
|
|
|
"punishment_type": "string",
|
|
|
|
|
|
"reason": "string",
|
|
|
|
|
|
"staff_uuid": "string",
|
|
|
|
|
|
"staff_name": "string",
|
|
|
|
|
|
"expires_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"is_active": true,
|
|
|
|
|
|
"revoked_at": null,
|
|
|
|
|
|
"revoked_by": null,
|
|
|
|
|
|
"revoked_reason": null,
|
|
|
|
|
|
"evidence_url": "string",
|
|
|
|
|
|
"notes": "string",
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"total": 1,
|
|
|
|
|
|
"page": 1,
|
|
|
|
|
|
"size": 20,
|
|
|
|
|
|
"pages": 1
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### GET `/punishments/ban/{player_uuid}`
|
|
|
|
|
|
|
|
|
|
|
|
Получает статус активного бана игрока.
|
|
|
|
|
|
|
|
|
|
|
|
**Параметры:**
|
|
|
|
|
|
- `player_uuid` (path) - UUID игрока
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"is_banned": true,
|
|
|
|
|
|
"punishment": {
|
|
|
|
|
|
"id": "uuid",
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"player_name": "string",
|
|
|
|
|
|
"player_ip": "192.168.1.1",
|
|
|
|
|
|
"punishment_type": "ban",
|
|
|
|
|
|
"reason": "string",
|
|
|
|
|
|
"staff_uuid": "string",
|
|
|
|
|
|
"staff_name": "string",
|
|
|
|
|
|
"expires_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"is_active": true,
|
|
|
|
|
|
"revoked_at": null,
|
|
|
|
|
|
"revoked_by": null,
|
|
|
|
|
|
"revoked_reason": null,
|
|
|
|
|
|
"evidence_url": "string",
|
|
|
|
|
|
"notes": "string",
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### GET `/punishments/mute/{player_uuid}`
|
|
|
|
|
|
|
|
|
|
|
|
Получает статус активного мута игрока.
|
|
|
|
|
|
|
|
|
|
|
|
**Параметры:**
|
|
|
|
|
|
- `player_uuid` (path) - UUID игрока
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"is_muted": true,
|
|
|
|
|
|
"punishment": {
|
|
|
|
|
|
"id": "uuid",
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"player_name": "string",
|
|
|
|
|
|
"player_ip": "192.168.1.1",
|
|
|
|
|
|
"punishment_type": "mute",
|
|
|
|
|
|
"reason": "string",
|
|
|
|
|
|
"staff_uuid": "string",
|
|
|
|
|
|
"staff_name": "string",
|
|
|
|
|
|
"expires_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"is_active": true,
|
|
|
|
|
|
"revoked_at": null,
|
|
|
|
|
|
"revoked_by": null,
|
|
|
|
|
|
"revoked_reason": null,
|
|
|
|
|
|
"evidence_url": "string",
|
|
|
|
|
|
"notes": "string",
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Audit
|
|
|
|
|
|
|
|
|
|
|
|
**Префикс:** `/audit`
|
|
|
|
|
|
|
|
|
|
|
|
### POST `/audit/commands`
|
|
|
|
|
|
|
|
|
|
|
|
Логирует выполнение команды для аудита.
|
|
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"player_uuid": "uuid",
|
|
|
|
|
|
"player_name": "string",
|
|
|
|
|
|
"command": "string",
|
|
|
|
|
|
"arguments": ["arg1", "arg2"],
|
|
|
|
|
|
"server": "string",
|
|
|
|
|
|
"timestamp": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Статус:** `202 Accepted`
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"accepted": 1
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## LuckPerms
|
|
|
|
|
|
|
|
|
|
|
|
**Префикс:** `/luckperms`
|
|
|
|
|
|
|
|
|
|
|
|
### GET `/luckperms/players/{uuid}`
|
|
|
|
|
|
|
|
|
|
|
|
Получает информацию об игроке по UUID.
|
|
|
|
|
|
|
|
|
|
|
|
**Параметры:**
|
|
|
|
|
|
- `uuid` (path) - UUID игрока
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"uuid": "string",
|
|
|
|
|
|
"username": "string",
|
|
|
|
|
|
"primary_group": "string",
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### GET `/luckperms/players/username/{username}`
|
|
|
|
|
|
|
|
|
|
|
|
Получает информацию об игроке по имени.
|
|
|
|
|
|
|
|
|
|
|
|
**Параметры:**
|
|
|
|
|
|
- `username` (path) - Имя игрока
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"uuid": "string",
|
|
|
|
|
|
"username": "string",
|
|
|
|
|
|
"primary_group": "string",
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### GET `/luckperms/groups/{name}`
|
|
|
|
|
|
|
|
|
|
|
|
Получает информацию о группе по имени.
|
|
|
|
|
|
|
|
|
|
|
|
**Параметры:**
|
|
|
|
|
|
- `name` (path) - Название группы
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": "string",
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### GET `/luckperms/players/{uuid}/permissions`
|
|
|
|
|
|
|
|
|
|
|
|
Получает список разрешений игрока.
|
|
|
|
|
|
|
|
|
|
|
|
**Параметры:**
|
|
|
|
|
|
- `uuid` (path) - UUID игрока
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
[
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"uuid": "string",
|
|
|
|
|
|
"permission": "string",
|
|
|
|
|
|
"value": true,
|
|
|
|
|
|
"server": "string",
|
|
|
|
|
|
"world": "string",
|
|
|
|
|
|
"expiry": 1234567890,
|
|
|
|
|
|
"contexts": "string",
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### GET `/luckperms/players/{uuid}/with-permissions`
|
|
|
|
|
|
|
|
|
|
|
|
Получает информацию об игроке вместе со всеми разрешениями.
|
|
|
|
|
|
|
|
|
|
|
|
**Параметры:**
|
|
|
|
|
|
- `uuid` (path) - UUID игрока
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"uuid": "string",
|
|
|
|
|
|
"username": "string",
|
|
|
|
|
|
"primary_group": "string",
|
|
|
|
|
|
"permissions": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"uuid": "string",
|
|
|
|
|
|
"permission": "string",
|
|
|
|
|
|
"value": true,
|
|
|
|
|
|
"server": "string",
|
|
|
|
|
|
"world": "string",
|
|
|
|
|
|
"expiry": 1234567890,
|
|
|
|
|
|
"contexts": "string",
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### POST `/luckperms/players`
|
|
|
|
|
|
|
|
|
|
|
|
Создает нового игрока в LuckPerms.
|
|
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"username": "string",
|
|
|
|
|
|
"primary_group": "default"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Статус:** `201 Created`
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"uuid": "string",
|
|
|
|
|
|
"username": "string",
|
|
|
|
|
|
"primary_group": "default",
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
|
|
|
|
"updated_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Teleport History
|
|
|
|
|
|
|
|
|
|
|
|
**Префикс:** `/teleport-history`
|
|
|
|
|
|
|
|
|
|
|
|
### POST `/teleport-history/`
|
|
|
|
|
|
|
|
|
|
|
|
Создает запись о телепортации в истории.
|
|
|
|
|
|
|
|
|
|
|
|
**Тело запроса:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"from_world": "string",
|
|
|
|
|
|
"from_x": 0.0,
|
|
|
|
|
|
"from_y": 0.0,
|
|
|
|
|
|
"from_z": 0.0,
|
|
|
|
|
|
"to_world": "string",
|
|
|
|
|
|
"to_x": 0.0,
|
|
|
|
|
|
"to_y": 0.0,
|
|
|
|
|
|
"to_z": 0.0,
|
|
|
|
|
|
"tp_type": "string",
|
|
|
|
|
|
"target_name": "string"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Статус:** `201 Created`
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": "uuid",
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"from_world": "string",
|
|
|
|
|
|
"from_x": 0.0,
|
|
|
|
|
|
"from_y": 0.0,
|
|
|
|
|
|
"from_z": 0.0,
|
|
|
|
|
|
"to_world": "string",
|
|
|
|
|
|
"to_x": 0.0,
|
|
|
|
|
|
"to_y": 0.0,
|
|
|
|
|
|
"to_z": 0.0,
|
|
|
|
|
|
"tp_type": "string",
|
|
|
|
|
|
"target_name": "string",
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### GET `/teleport-history/players/{player_uuid}`
|
|
|
|
|
|
|
|
|
|
|
|
Получает историю телепортаций игрока.
|
|
|
|
|
|
|
|
|
|
|
|
**Параметры:**
|
|
|
|
|
|
- `player_uuid` (path) - UUID игрока
|
|
|
|
|
|
- `limit` (query) - Максимальное количество записей (по умолчанию: 100, мин: 1, макс: 1000)
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
[
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": "uuid",
|
|
|
|
|
|
"player_uuid": "string",
|
|
|
|
|
|
"from_world": "string",
|
|
|
|
|
|
"from_x": 0.0,
|
|
|
|
|
|
"from_y": 0.0,
|
|
|
|
|
|
"from_z": 0.0,
|
|
|
|
|
|
"to_world": "string",
|
|
|
|
|
|
"to_x": 0.0,
|
|
|
|
|
|
"to_y": 0.0,
|
|
|
|
|
|
"to_z": 0.0,
|
|
|
|
|
|
"tp_type": "string",
|
|
|
|
|
|
"target_name": "string",
|
|
|
|
|
|
"created_at": "2024-01-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Users
|
|
|
|
|
|
|
|
|
|
|
|
**Префикс:** `/users`
|
|
|
|
|
|
|
|
|
|
|
|
### GET `/users/users/{name}/game-id`
|
|
|
|
|
|
|
|
|
|
|
|
Получает игровой ID пользователя по имени.
|
|
|
|
|
|
|
|
|
|
|
|
**Параметры:**
|
|
|
|
|
|
- `name` (path) - Имя пользователя
|
|
|
|
|
|
|
|
|
|
|
|
**Ответ:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"game_id": "string"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Аутентификация
|
|
|
|
|
|
|
|
|
|
|
|
Все endpoints (кроме `/health/`) требуют наличия заголовка:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
X-API-Key: <your-api-key>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
API ключ настраивается через переменную окружения `SECURITY__API_KEY`.
|
|
|
|
|
|
|
|
|
|
|
|
## Обработка ошибок
|
|
|
|
|
|
|
|
|
|
|
|
Все endpoints возвращают стандартные HTTP коды ошибок:
|
|
|
|
|
|
- `400 Bad Request` - некорректные данные в запросе
|
|
|
|
|
|
- `401 Unauthorized` - отсутствует или неверный API ключ
|
2025-12-02 22:08:55 +01:00
|
|
|
|
- `403 Forbidden` - недостаточно прав для выполнения операции (например, попытка удалить чужой варп)
|
2025-11-12 19:01:39 +01:00
|
|
|
|
- `404 Not Found` - ресурс не найден
|
2025-12-02 22:08:55 +01:00
|
|
|
|
- `409 Conflict` - конфликт ресурсов (ресурс уже существует, лимит превышен)
|
2025-11-12 19:01:39 +01:00
|
|
|
|
- `500 Internal Server Error` - внутренняя ошибка сервера
|
|
|
|
|
|
|
2025-12-02 22:08:55 +01:00
|
|
|
|
Тело ответа при ошибке имеет следующий формат:
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"message": "Human-readable error message",
|
|
|
|
|
|
"code": "error_code",
|
|
|
|
|
|
"details": {
|
|
|
|
|
|
"additional": "context"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Коды ошибок:**
|
|
|
|
|
|
- `not_found` - ресурс не найден (404)
|
|
|
|
|
|
- `already_exists` - ресурс уже существует (409)
|
|
|
|
|
|
- `limit_exceeded` - превышен лимит ресурсов (409)
|
|
|
|
|
|
- `permission_denied` - нет прав на операцию (403)
|
|
|
|
|
|
- `invalid_state` - некорректное состояние данных (400)
|
|
|
|
|
|
- `cooldown_active` - кулдаун активен (400)
|