Отзывы (общедоступные маршруты):

/api/publicReviews

Метод: GET
Описание: Запрос списка отзывов, которые опубликованы.
Параметры:

Права: ✅ Открыт для всех

Ответ:

{
  "type": "success",
  "message": null,
  "data": {
    "items": [
      {
        "id": 10,
        "date": "2025-05-10 22:33:39",
        "mail": "[email protected]",
        "caption": "admin",
        "text": "тест",
        "rating": 1
      },
      {
        "id": 11,
        "date": "2025-05-11 19:25:22",
        "mail": "[email protected]",
        "caption": "admin",
        "text": "Молодцы",
        "rating": 4
      }
    ],
    "total": 2,
    "page": 1,
    "pageSize": 2
  },
  "action": null
}

Подробности:
date - дата создания отзыва;
mail - почта пользователя. уникальная и не меняется;
caption - заголовок (имя пользователя), берется из профиля, сохраняется в таблице reviews на момент отзыва. При смене имени (Петр -> Вася) в таблице останется старое имя;
rating - оценка, от 1 до 5.

/api/publicReviews/{id}

Метод: GET
Описание: Загрузка отзыва по id.
Параметры: id - id отзыва.
Права: ✅ Открыт для всех
Ответ:

{
  "type": "success",
  "message": null,
  "data": {
    "id": 10,
    "date": "2025-05-10 22:33:39",
    "mail": "[email protected]",
    "caption": "admin",
    "text": "тест",
    "rating": 1      
  },
  "action": null
}

Отзывы (маршруты для пользователя):

/api/user/reviews

Метод: GET
Описание: Загрузка списка своих отзывов, в том числе тех, которые забанены или находятся на модерации. Максимальное число отзывов на каждого пользователя - 50.
Права: 🔵 авторизованный пользователь.
Параметры: textSize - размер окна предпросмотра. по умолчанию - вывести весь текст (2048 символов)

Ответ:

{
  "type": "success",
  "message": null,
  "data": {
    "items": [
      {
        "id": 10,
        "date": "2025-05-10 22:33:39",
        "caption": "admin",
        "text": "тест",
        "status": "approved",
        "rating": 1
      },
      {
        "id": 11,
        "date": "2025-05-11 19:25:22",
        "caption": "admin",
        "text": "молодцы",
        "status": "approved",
        "rating": 4
      }
    ],
    "total": 2,
    "page": 1,
    "pageSize": 10
  },
  "action": null
}

Подробности: status:

/api/user/reviews/{id}

Метод: GET
Описание: Загрузка отзыва по id.
Параметры: id - id отзыва.
Права: 🔵 авторизованный пользователь.

Ответ:

{
  "type": "success",
  "message": null,
  "data": {
    "id": 10,
    "date": "2025-05-10 22:33:39",
    "caption": "admin",
    "text": "тест",
    "status": "approved",
    "rating": 1
  },
  "action": null
}

/api/user/reviews

Метод: PUT
Описание: Добавление отзыва. Отзыв проверяется на стоп-фразы. И у каждого пользователя есть лимит на добавление 3х отзывов в сутки.
Права: 🔵 авторизованный пользователь.
Запрос:

{
  "text": "ттт",
  "rating": 3
}

Ответ:

{
  "type": "success",
  "message": "Отзыв добавлен",
  "data": {
    "id": 12,
    "date": "2025-06-17T22:00:01",
    "caption": "admin",
    "text": "ттт",
    "rating": 3
  },
  "action": null
}

Подробности: id - id отзыва.

/api/user/reviews

Метод: POST
Описание: Редактирование отзыва. После редактирования статус отзыва меняется на moderation. Если отзыв забанен, его нельзя редактировать, получите ошибку 403.
Права: 🔵 авторизованный пользователь.
Запрос:

{
  "id": 2,
  "text": "Молодцы! Выполнили обмен за 5 минут",
  "rating": 5
}

Параметры:
id - id отзыва для редактирования.

Ответ:

{
  "type": "success",
  "message": "Отзыв обновлен",
  "data": {
    "id": 2,
    "date": "2025-05-10T22:33:39",
    "caption": "admin",
    "text": "Молодцы! Выполнили обмен за 5 минут",
    "rating": 5
  },
  "action": null
}

/api/user/reviews

Метод: DELETE
Права: 🔵 авторизованный пользователь.
Описание: Удаление отзывов по id. Отзывы не удаляются из базы мгновенно. Они маркируются как deleted и доступны для просмотра в админке.
Параметры: ids - список отзывов, разделенный запятыми.

Отзывы (админка):

/api/reviews

Метод: GET
Описание: Загрузка списка отзывов для админки.
Права: 🔴 админка.
Параметры (можно не указывать):

/api/reviews

Метод: POST
Описание: Редактирование отзыва. Можно менять текст и статус.
Запрос:

{
  "id": 2,  
  "text": "Молодцы! Выполнили обмен за 3 минуты",
  "status": "approved",
  "rating": 5
}

Ответ:

{
  "type": "success",
  "message": "Отзыв обновлен",
  "data": null,
  "action": null
}

/api/reviews

Метод: DELETE
Права: 🔴 админка + isEditReviews.
Описание: Удаление отзывов по id
Параметры: ids - список id отзывов, разделенный запятыми.

/api/stopwords

Метод: GET
Права: 🔴 админка + isEditReviews.
Описание: Загрузка списка стоп-фраз. Если в тексте отзыва содержится хотя бы одна фраза, отзыв не будет опубликован. Регистр символов не имеет значения.

Ответ:

{
  "type": "success",
  "message": null,
  "data": [
    "0% риск",
    "50% скидка",
    "акции",
    "банкротство",
    "без вложений"
  ],
  "action": null
}

/api/stopwords

Метод: POST
Права: 🔴 админка + isEditReviews.
Описание: Редактирование списка стоп-фраз. Каждая фраза задается с новой строки. Если в списке есть дубликаты, они будут удалены (List конвертируется в Set).
Можно использовать, например, эти слова: https://github.com/OOPSpam/spam-words/blob/main/spam-words-RU.txt

Запрос:

  ["риск", "скидка"]

Ответ:

{
  "type": "success",
  "message": "Стоп-слова обновлены",
  "data": null,
  "action": null
}