Skip to content

Repository files navigation

Приложение "ExploreWithMe"

Позволяет пользователям делиться информацией об интересных событиях и находить компанию для участия в них

Дополнительная функциональность - комментарии к событиям

Возможность оставлять комментарии к событиям и модерировать их.

Описание функциональности

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

Функциональные требования

  • Комментарии могут оставлять только зарегистрированные пользователи.
  • Пользователь может оставить комментарий к событию, если ему была одобрена заявка на посещение этого события.
  • Пользователь может прокомментировать конкретное событие только один раз.
  • После создания комментарий попадает на этап модерации (PENDING), на котором администратор может его принять (APPROVE) или отклонить (REJECT).
  • Пользователь может отредактировать свой комментарий, если тот не находится в статусе ожидания модерации (PENDING).
  • Отредактированный комментарий должен снова проходить этап модерации.
  • У пользователя есть возможность удалить свой комментарий.
  • У администратора должна быть возможность постранично просматривать все комментарии с возможностью фильтрации по статусу комментария.
  • У пользователя должна быть возможность просматривать все свои комментарии с возможностью постраничного вывода и сортировкой по дате создания комментария - от новых к старым.
  • Любой пользователь (в т.ч. незарегистрированный) может осуществлять поиск событий, сортируя результат по количеству комментариев, оставленных к событиям.
  • При просмотре подробной информации о событии необходимо выводить 5 самых свежих комментариев.
  • Должна быть реализована возможность постраничного просмотра всех комментариев к конкретному событию.
  • У событий могу отображаться только те комментарии, которые успешно прошли модерацию.

API спецификация

Private

  • POST /users/{userId}/comments Добавление комментария к событию (новый эндпоинт)

Request body

{
  "eventId": 1,
  "text": "Все было прекрасно!"
}

Ограничения:

  • длина сообщения не более 255 символов.

Responses

code 201

{
  "id": 1,
  "eventId": 1,
  "authorId": 1,
  "text": "Все было прекрасно!",
  "status": "PENDING",
  "createdOn": "2020-01-01 12:00:00"
}

  • PATCH /users/{userId}/comments/{commentId} Изменение комментария к событию (новый эндпоинт)

Request body

{
  "text": "Новый текст комментария."
}

Ограничения:

  • длина сообщения не более 255 символов;
  • обновить можно только тот комментарий, который не находится в статусе PENDING.

Responses

code 200

{
  "id": 1,
  "eventId": 1,
  "authorId": 1,
  "text": "Новый текст комментария.",
  "status": "PENDING",
  "createdOn": "2020-01-01 12:00:00"
}

  • DELETE /users/{userId}/comments/{commentId} Удаление комментария к событию (новый эндпоинт)

Responses

code 204


  • GET /users/{userId}/comments/{commentId} Получение конкретного комментария (новый эндпоинт)

Responses

code 200

{
  "id": 1,
  "eventId": 1,
  "authorId": 1,
  "text": "Текст комментария.",
  "status": "APPROVE",
  "createdOn": "2020-01-01 12:00:00"
}

  • GET /users/{userId}/comments Получение всех комментариев пользователя с возможностью фильтрации (новый эндпоинт)

Parameters

Name Description
eventIds
array<integer(int64)>
(query)
Перечисление ИД событий, для которых нужно показать комментарии
status
enum[PENDING, APPROVE, REJECT]
(query)
Комментарии с каким статусом нужно показать
from
integer(int32)
(query)
Количество элементов, которые нужно пропустить для формирования текущего набора
Default value : 0
size
integer(int32)
(query)
Количество элементов в наборе
Default value : 10

Responses

code 200

[
  {
    "id": 1,
    "eventId": 1,
    "authorId": 1,
    "text": "Текст комментария.",
    "status": "APPROVE",
    "createdOn": "2020-01-01 12:00:00"
  },
  {
    "id": 2,
    "eventId": 2,
    "authorId": 1,
    "text": "Другой комментарий.",
    "status": "REJECT",
    "createdOn": "2020-01-02 12:00:00"
  }
]

Admin

  • GET /admin/comments Просмотр комментариев администратором с возможностью фильтрации по статусу (новый эндпоинт)

Parameters

Name Description
status
enum[PENDING, APPROVE, REJECT]
(query)
Комментарии с каким статусом нужно показать
from
integer(int32)
(query)
Количество элементов, которые нужно пропустить для формирования текущего набора
Default value : 0
size
integer(int32)
(query)
Количество элементов в наборе
Default value : 10

Responses

code 200

[
  {
    "id": 1,
    "eventId": 1,
    "authorId": 1,
    "text": "Текст комментария.",
    "status": "APPROVE",
    "createdOn": "2020-01-01 12:00:00"
  },
  {
    "id": 2,
    "eventId": 2,
    "authorId": 1,
    "text": "Другой комментарий.",
    "status": "REJECT",
    "createdOn": "2020-01-02 12:00:00"
  }
]

  • PATCH /admin/comments/{commentId} Отклонение или подтверждение комментария администратором (новый эндпоинт)

Request body

{
  "action": "APPROVE"
}

Responses

code 200

{
  "id": 1,
  "eventId": 1,
  "authorId": 1,
  "text": "Текст комментария.",
  "status": "APPROVE",
  "createdOn": "2020-01-01 12:00:00"
}

Public

  • GET /events Получение событий с возможностью фильтрации (существующий эндпоинт)

Parameters

Name Description
sort
string
(query)
Вариант сортировки: по дате события, по количеству просмотров, по количеству комментариев
Available values : EVENT_DATE, VIEWS, COMMENTS

Responses

Без изменений. По сути меняется только порядок сортировки, если был использован соответсвующий параметр в запросе.


  • GET /events/{id} Получение подробной информации об опубликованном событии по его идентификатору (существующий эндпоинт)

Parameters

Без изменений.

Responses

Добавляется возможность просматривать до 5 свежих комментариев события.

code 200

{
  "annotation": "Эксклюзивность нашего шоу гарантирует привлечение максимальной зрительской аудитории",
  "category": {
    "id": 1,
    "name": "Концерты"
  },
  "confirmedRequests": 5,
  "createdOn": "2022-09-06 11:00:23",
  "description": "Что получится, если соединить кукурузу и полёт? Создатели \"Шоу летающей кукурузы\" испытали эту идею на практике и воплотили в жизнь инновационный проект, предлагающий свежий взгляд на развлечения...",
  "eventDate": "2024-12-31 15:10:05",
  "id": 1,
  "initiator": {
    "id": 3,
    "name": "Фёдоров Матвей"
  },
  "location": {
    "lat": 55.754167,
    "lon": 37.62
  },
  "paid": true,
  "participantLimit": 10,
  "publishedOn": "2022-09-06 15:10:05",
  "requestModeration": true,
  "state": "PUBLISHED",
  "title": "Знаменитое шоу 'Летающая кукуруза'",
  "views": 999,
  "comments": [
    {
      "id": 1,
      "author": "Иван Иванов",
      "text": "Все было прекрасно!"
    },
    {
      "id": 2,
      "author": "Петр Петров",
      "text": "Обязательно пойду еще раз."
    }
  ]
}

  • GET /events/{id}/comments Получение комментариев к событию (новый эндпоинт)

Parameters

Name Description
from
integer(int32)
(query)
Количество элементов, которые нужно пропустить для формирования текущего набора
Default value : 0
size
integer(int32)
(query)
Количество элементов в наборе
Default value : 10

Responses

code 200

[
  {
    "id": 1,
    "author": "Петр Петров",
    "text": "Текст комментария.",
    "createdOn": "2020-01-01 12:00:00"
  },
  {
    "id": 2,
    "author": "Иван Иванов",
    "text": "Текст комментария.",
    "createdOn": "2020-01-03 12:00:00"
  }
]

About

Template repository for group ExploreWithMe project.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages