Skip to content

Latest commit

 

History

History
210 lines (176 loc) · 8.27 KB

File metadata and controls

210 lines (176 loc) · 8.27 KB

Приложение Explore With Me (дипломный проект)

Explore With Me — приложение, которое дает возможность делиться информацией об интересных событиях и помогает найти компанию для участия в них.

Основные возможности приложения

  • Мероприятия - Создание событий с различными параметрами (платные/бесплатные, место проведения, дата, количество участников, категория и т.д.).
  • Заявки на посещение мероприятия - Можно выбирать события и оставлять заявку на посещение.
  • Доступ к информации - Разные возможности по редактированию и получению информации для пользователей и администраторов, модерация событий, фильтрация по параметрам (дата проведения, категория и т.д.)
  • Подборки событий - Администраторы могут группировать события по каким-либо признакам, а пользователи знакомиться с подборками.
  • Сбор статистики по просмотрам событий для выбора самых популярных.

Архитектура

Приложение состоит из 3 сервисов:

  • Основной сервис — содержит всё необходимое для работы с событиями
  • Сервис статистики — хранит количество просмотров и позволяет делать различные выборки для анализа работы приложения.
  • Сервис администрирования — пользовательский интерфейс для управления

Инструкция по запуску приложения

Для корректной работы приложения необходимо наличие на компьютере Docker. Оба сервиса запускаются следующей командой:

mvn install
docker-compose up

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

API основного сервиса разделено на три части. Первая — публичная, доступна без регистрации любому пользователю сети. Вторая — закрытая, доступна только авторизованным пользователям. Третья — административная, для администраторов сервиса.

Для просмотра спецификаций используйте редактор Swagger.

Используемые технологии

  • Spring Boot 2.7.3
  • Maven
  • MapStruct 1.5.2
  • Lombok
  • OpenFeign
  • Hibernate ORM
  • PostgreSQL 13.7
  • Docker
  • Liquibase
  • Vaadin 23

Администрирование

Вход в систему администрирования: http://localhost:8081

Редактирование пользователя

Поиск пользователя

Добавление пользователя

Спецификация дополнительной возможности

Public: Комментарии

GET /comments
Получение комментариев с возможностью фильтрации
  • это публичный эндпоинт, соответственно в выдаче должны быть только опубликованные комментарии
  • текстовый поиск должен быть без учета регистра букв
  • сортировка должна быть по времени создания комментария
    text – для поиска в комментариях
    events – список идентификаторов событий, для которых будет вестись поиск комментариев
    rangeStart – поиск только начиная с этого времени размещения комментария
    rangeEnd – поиск комментариев, размещенных не позднее этого времени
    from - количество комментариев, которые нужно пропустить для формирования текущего набора
    size – количество комментариев в наборе

Private: Комментарии

POST /users/{userId}/comments
Размещение комментария пользователем
Пример запроса:
{
  "text": "Новый комментарий на событие",
  "event": 1
}

Пример ответа:

{
"id": 1,
"text": "Новый комментарий на событие",
"created": "2022-10-15 07:56:45",
"status": "PENDING",
"event": 1,
"commentator": 1
}
PATCH /users/{userId}/comments/{commentId}
Снятие пользователем комментария с публикации
Пример запроса:
{
"status": "CANCELED"
}

Пример ответа:

{
 "id": 1,
 "text": "Новый комментарий на событие",
 "created": "2022-10-15 07:51:36",
 "status": "CANCELED",
 "event": 1,
 "commentator": 1
}
PATCH /users/{userId}/comments/{commentId}
Редактирование комментария
Пример запроса:
{
 "text": "Отредактированный комментарий"
}
GET /users/{userId}/comments
Получение всех комментариев пользователя

Admin: Комментарии

PATCH /admin/comments/{commentId}/
Публикация или отклонение комментария администратором
Пример запроса:
{
  "status": "CONFIRMED"
}

Пример запроса:

{
  "status": "REJECTED"
}

Пример ответа:

{
"id": 1,
"text": "Новый комментарий на событие",
"created": "2022-10-15 08:56:36",
"status": "CONFIRMED",
"event": 1,
"commentator": 1
}
PATCH /admin/comments/{commentId}
Редактирование комментария
Пример запроса:
{
 "text": "Отредактированный администратором комментарий"
}
GET /admin/comments
Получение комментариев с возможностью фильтрации
text – для поиска в комментариях
events – список идентификаторов событий, для которых будет вестись поиск комментариев
rangeStart – поиск только начиная с этого времени размещения комментария
rangeEnd – поиск комментариев, размещенных не позднее этого времени
status – получение комментариев с определенным статусом
from - количество комментариев, которые нужно пропустить для формирования текущего набора
size – количество комментариев в набор