961 lines
17 KiB
Markdown
961 lines
17 KiB
Markdown
|
|
# 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/`
|
|||
|
|
|
|||
|
|
Создает или обновляет дом игрока.
|
|||
|
|
|
|||
|
|
**Тело запроса:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"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
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Ответ:**
|
|||
|
|
```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"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 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`
|
|||
|
|
|
|||
|
|
### POST `/warps/`
|
|||
|
|
|
|||
|
|
Создает новую точку варпа.
|
|||
|
|
|
|||
|
|
**Тело запроса:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"name": "string",
|
|||
|
|
"world": "string",
|
|||
|
|
"x": 0.0,
|
|||
|
|
"y": 0.0,
|
|||
|
|
"z": 0.0,
|
|||
|
|
"yaw": 0.0,
|
|||
|
|
"pitch": 0.0,
|
|||
|
|
"is_public": true,
|
|||
|
|
"description": "string"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Статус:** `201 Created`
|
|||
|
|
|
|||
|
|
**Ответ:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"id": "uuid",
|
|||
|
|
"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"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### PATCH `/warps/`
|
|||
|
|
|
|||
|
|
Обновляет существующую точку варпа.
|
|||
|
|
|
|||
|
|
**Тело запроса:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"name": "string",
|
|||
|
|
"world": "string",
|
|||
|
|
"x": 0.0,
|
|||
|
|
"y": 0.0,
|
|||
|
|
"z": 0.0,
|
|||
|
|
"yaw": 0.0,
|
|||
|
|
"pitch": 0.0,
|
|||
|
|
"is_public": true,
|
|||
|
|
"description": "string"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Ответ:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"id": "uuid",
|
|||
|
|
"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"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### DELETE `/warps/`
|
|||
|
|
|
|||
|
|
Удаляет точку варпа.
|
|||
|
|
|
|||
|
|
**Тело запроса:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"name": "string"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Статус:** `204 No Content`
|
|||
|
|
|
|||
|
|
### POST `/warps/get`
|
|||
|
|
|
|||
|
|
Получает конкретную точку варпа по имени.
|
|||
|
|
|
|||
|
|
**Тело запроса:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"name": "string"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Ответ:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"id": "uuid",
|
|||
|
|
"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",
|
|||
|
|
"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 ключ
|
|||
|
|
- `404 Not Found` - ресурс не найден
|
|||
|
|
- `500 Internal Server Error` - внутренняя ошибка сервера
|
|||
|
|
|
|||
|
|
Тело ответа при ошибке содержит детальное описание проблемы.
|