Серверы

Серверы — основные рабочие пространства Saschat. Каждый сервер содержит каналы, роли и участников.

При создании сервера автоматически создаётся роль @everyone с базовыми правами и текстовый канал general.

Список публичных серверов

GET /servers

Аутентификация не требуется.

Ответ (200): массив ServerResponse.

[ { "id": "550e8400-e29b-41d4-a716-446655440000", "name": "My Server", "description": "Описание сервера", "iconUrl": null, "ownerId": "user-uuid", "ownerFederation": "https://auth.example.com", "isPublic": true, "memberCount": 42, "createdAt": "2025-01-15T10:30:00Z" } ]

Мои серверы

GET /servers/me

Возвращает серверы, в которых состоит текущий пользователь.

Ответ (200): массив ServerResponse.

Создание сервера

POST /servers

Тело запроса:

{ "name": "My Server", "description": "Описание сервера", "isPublic": true }

Поле

Тип

Обязательное

Описание

name

string

да

Название (1-128 символов)

description

string

нет

Описание

isPublic

boolean

нет

Публичный (по умолчанию true)

Ответ (201): ServerResponse.

Что происходит при создании:

  1. Создаётся сервер с владельцем = текущий пользователь

  2. Создаётся роль @everyone с правами: SEND_MESSAGES, READ_MESSAGES, CONNECT_VOICE, SPEAK

  3. Создаётся публичный текстовый канал general

  4. Владелец автоматически становится участником сервера и канала general

Ошибки:

Код

Описание

VALIDATION_ERROR

Невалидное название

ALREADY_EXISTS

Сервер с таким названием уже существует

Получение сервера

GET /servers/{serverId}

Аутентификация не требуется.

Параметр

Тип

Описание

serverId

UUID

ID сервера

Ответ (200): ServerResponse.

Ошибки: NOT_FOUND — сервер не найден.

Обновление сервера

PUT /servers/{serverId}

Только владелец сервера может обновлять его.

Тело запроса:

{ "name": "New Name", "description": "Новое описание", "iconUrl": "https://example.com/icon.png", "isPublic": false }

Все поля опциональны — передайте только те, которые нужно изменить.

Поле

Тип

Описание

name

string?

Новое название (1-128 символов)

description

string?

Новое описание

iconUrl

string?

URL иконки

isPublic

boolean?

Публичность

Ответ (200): обновлённый ServerResponse.

Ошибки:

Код

Описание

NOT_FOUND

Сервер не найден

FORBIDDEN

Не владелец сервера

VALIDATION_ERROR

Невалидное название

Удаление сервера

DELETE /servers/{serverId}

Только владелец сервера может удалить его. Удаляются все каналы, роли и участники.

Ответ (200): SuccessResponse.

Ошибки: NOT_FOUND, FORBIDDEN.

Вступление в сервер

POST /servers/{serverId}/join

Доступно только для публичных серверов. При вступлении пользователь автоматически присоединяется ко всем публичным каналам сервера с ролью @everyone.

Ответ (200):

{ "id": "membership-uuid", "userId": "user-uuid", "userFederation": "https://auth.example.com", "joinedAt": "2025-01-15T10:30:00Z" }

Ошибки:

Код

Описание

NOT_FOUND

Сервер не найден

FORBIDDEN

Сервер приватный

ALREADY_EXISTS

Уже участник

VALIDATION_ERROR

Сервер достиг лимита участников

Выход из сервера

POST /servers/{serverId}/leave

Владелец сервера не может покинуть свой сервер. При выходе удаляются все членства в каналах этого сервера.

Ответ (200): SuccessResponse.

Ошибки: NOT_FOUND, FORBIDDEN (владелец).

Список участников

GET /servers/{serverId}/members

Для приватных серверов требуется быть участником.

Ответ (200): массив ServerMemberResponse.

[ { "id": "membership-uuid", "userId": "user-uuid", "userFederation": "https://auth.example.com", "joinedAt": "2025-01-15T10:30:00Z" } ]

Ошибки: FORBIDDEN — приватный сервер и не участник.