Skip to content

ponchik327/CommentTree

Repository files navigation

CommentTree

API для хранения и отображения вложенных комментариев с поддержкой полнотекстового поиска на русском языке.


Содержание


Get Started

Требования: Docker Compose.
Опционально: go-task.
Все команды находяться тут Taskfile.yaml

git clone <repo-url>
cd CommentTree

task docker:up
# или напрямую:
docker compose up -d

Приложение будет доступно на http://localhost:8080.

Конфигурация

Конфиг читается из YAML-файла. Каждый параметр можно переопределить переменной окружения.

Полный пример с описанием всех параметров: config.example.yaml.

Для детальной настройки нужно определить файл config.yaml

cp config.yaml config.example.yaml

API

Все ответы с телом возвращают Content-Type: application/json.
Ошибки возвращаются в формате {"error": "описание"}.

Каждый запрос логируется с уникальным request_id, методом, путём, статусом и временем выполнения.


POST /comments/

Создать новый комментарий (корневой или ответ на существующий).

Query параметры:

Параметр Тип Обязательный Описание
parent integer нет ID родительского комментария. Если не указан — создаётся корневой комментарий.

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

{
  "body": "текст комментария"
}

Ответы:

Код Описание
201 Created Комментарий создан
400 Bad Request Невалидное тело запроса, пустой body или некорректный parent
404 Not Found Родительский комментарий не найден
500 Internal Server Error Внутренняя ошибка

Пример — корневой комментарий:

curl -X POST http://localhost:8080/comments/ \
  -H "Content-Type: application/json" \
  -d '{"body": "Первый комментарий"}'
{
  "id": 1,
  "body": "Первый комментарий",
  "depth": 0,
  "created_at": "2026-04-04T12:00:00Z"
}

Пример — ответ на комментарий:

curl -X POST "http://localhost:8080/comments/?parent=1" \
  -H "Content-Type: application/json" \
  -d '{"body": "Ответ на первый"}'
{
  "id": 2,
  "body": "Ответ на первый",
  "depth": 1,
  "created_at": "2026-04-04T12:01:00Z"
}

GET /comments/

Получить список комментариев с пагинацией.

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

Query параметры:

Параметр Тип Default Описание
page integer 1 Номер страницы (>= 1)

Ответ 200 OK:

{
  "comments": [
    {
      "id": 1,
      "body": "Корневой комментарий",
      "depth": 0,
      "created_at": "2026-04-04T12:00:00Z"
    },
    {
      "id": 2,
      "body": "Ответ на корневой",
      "depth": 1,
      "created_at": "2026-04-04T12:01:00Z"
    }
  ],
  "total_pages": 3
}

Пример:

curl "http://localhost:8080/comments/?page=2"

GET /comments/search

Полнотекстовый поиск по телу комментариев (русский язык, PostgreSQL tsvector).

Возвращает найденные комментарии вместе со всеми их потомками.

Query параметры:

Параметр Тип Обязательный Описание
q string да Поисковый запрос (непустой)

Ответ 200 OK:

{
  "comments": [
    {
      "id": 5,
      "body": "Комментарий о Go",
      "depth": 0,
      "created_at": "2026-04-04T12:00:00Z"
    }
  ]
}

Ошибки:

Код Описание
400 Bad Request Параметр q отсутствует или пустой

Пример:

curl "http://localhost:8080/comments/search?q=golang"

GET /comments/{id}

Получить комментарий и всё его поддерево (дочерние, внучатые и т.д.).

Path параметры:

Параметр Тип Описание
id integer ID комментария

Ответ 200 OK:

{
  "comments": [
    {
      "id": 5,
      "body": "Родительский комментарий",
      "depth": 0,
      "created_at": "2026-04-04T12:00:00Z"
    },
    {
      "id": 10,
      "body": "Дочерний комментарий",
      "depth": 1,
      "created_at": "2026-04-04T12:05:00Z"
    }
  ]
}

Ошибки:

Код Описание
400 Bad Request Некорректный id
404 Not Found Комментарий не найден

Пример:

curl http://localhost:8080/comments/5

DELETE /comments/{id}

Удалить комментарий и всех его потомков (каскадное удаление по path).

Path параметры:

Параметр Тип Описание
id integer ID комментария

Ответы:

Код Описание
204 No Content Комментарий и потомки удалены
400 Bad Request Некорректный id
404 Not Found Комментарий не найден

Пример:

curl -X DELETE http://localhost:8080/comments/5

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors