Посты и комментарии

API для работы с постами в каналах типа CHANNEL и FORUM. Для каналов типа CHAT используются Сообщения.

PostResponse

{ "id": "post-uuid", "channelId": "channel-uuid", "authorId": "user-uuid", "authorFederation": "https://auth.example.com", "title": "Заголовок поста", "content": "Текст поста", "formData": null, "status": "OPEN", "tags": ["bug", "urgent"], "commentCount": 5, "createdAt": "2025-01-15T10:30:00Z", "editedAt": null }

Получение постов

GET /channels/{channelId}/posts

Требуется членство и право READ_MESSAGES.

Параметр

Тип

Описание

limit

int

Количество (1-100, по умолчанию 20)

offset

long

Смещение (по умолчанию 0)

status

string

Фильтр по статусу: OPEN, CLOSED, RESOLVED

tag

string

Фильтр по тегу

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

Создание поста

POST /channels/{channelId}/posts

Права:

  • В каналах CHANNEL: требуется MANAGE_CHANNELS (только админы публикуют)

  • В каналах FORUM: требуется SEND_MESSAGES (все участники)

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

{ "title": "Баг в авторизации", "content": "При входе через email возникает ошибка 500", "formData": "{\"bug_type\": \"Backend\", \"priority\": \"High\"}", "tags": ["bug", "auth"] }

Поле

Тип

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

Описание

title

string

для FORUM

Заголовок

content

string

да

Текст поста (не пустой)

formData

string

нет

JSON с данными формы (для FORUM с шаблоном)

tags

string[]

нет

Теги для фильтрации

Ответ (201): PostResponse. Рассылается событие post.new.

Валидация формы (FORUM)

Если у канала задан formTemplate, при создании поста валидируются обязательные поля. formData — JSON-объект {fieldName: value}.

Ошибки: NOT_FOUND, FORBIDDEN, VALIDATION_ERROR.

Получение поста

GET /channels/{channelId}/posts/{postId}

Ответ (200): PostResponse с commentCount.

Удаление поста

DELETE /channels/{channelId}/posts/{postId}

Автор или пользователь с правом MANAGE_MESSAGES.

Ответ (200): SuccessResponse. Событие post.deleted.


Комментарии

CommentResponse

{ "id": "comment-uuid", "postId": "post-uuid", "authorId": "user-uuid", "authorFederation": "https://auth.example.com", "content": "Текст комментария", "createdAt": "2025-01-15T11:00:00Z", "editedAt": null }

Список комментариев

GET /posts/{postId}/comments

Требуется членство и право READ_MESSAGES.

Параметр

Тип

Описание

limit

int

Количество (1-100, по умолчанию 50)

offset

long

Смещение

Ответ (200): массив CommentResponse, отсортированный по дате (ASC).

Создание комментария

POST /posts/{postId}/comments

Требуется право SEND_MESSAGES. Комментарии должны быть включены у канала (commentsEnabled: true).

Тело: {"content": "Мой комментарий"}

Ответ (201): CommentResponse. Событие comment.new.

Ошибки: NOT_FOUND, FORBIDDEN, VALIDATION_ERROR (пустой текст / комментарии отключены).

Редактирование комментария

PUT /posts/{postId}/comments/{commentId}

Только автор. Тело: {"content": "Обновлённый текст"}.

Ответ (200): CommentResponse.

Удаление комментария

DELETE /posts/{postId}/comments/{commentId}

Автор или пользователь с правом MANAGE_MESSAGES.

Ответ (200): SuccessResponse.