Данное приложение - афиша, позволяет пользователям делиться информацией об интересных событиях и находить компанию для участия в них.
Используемый стэк: Spring Boot, Spring Data JPA, PostgreSQL, Lombok, JUnit, Mockito, Mapstruct, Docker, Docker Compose.
Приложение разбито на два сервиса:
- Сервис сбора статистики (stats)
- Сохраняет количество обращений по эндпоинтам;
- Позволяет делать различные выборки для анализа работы приложения.
- Основной сервис
API основного сервиса разделена на три части:
- публичная доступна без регистрации любому пользователю сети;
- закрыта доступна только авторизованным пользователям;
- административная — для администраторов сервиса.
Публичный API должен представляет возможности поиска и фильтрации событий. Основные моменты:
- сортировка списка событий возможна по количеству просмотров, которое будет запрашиваться в сервисе статистики, по датам событий, а также по количеству комментариев под событием;
- при просмотре списка событий возвращается только краткая информация о мероприятиях;
- просмотр подробной информации о конкретном событии осуществляется через отдельный эндпоинт;
- есть возможность получения всех имеющихся категорий и подборок событий, которые составляют администраторы ресурса.
Закрытая часть API реализует возможности зарегистрированных пользователей продукта.
- авторизованные пользователи имеют возможность добавлять в приложение новые мероприятия, редактировать их,
- просматривать после добавления, оставлять комментарии и оставлять заявки на участие;
- создатель мероприятия может подтверждать заявки, которые отправили другие пользователи сервиса.
Административная часть API предоставляет возможности настройки и поддержки работы сервиса. Основной функционал:
- добавление, изменение и удаление категорий для событий;
- возможность добавлять, удалять и закреплять на главной странице подборки мероприятий;
- модерация событий, размещённых пользователями, — публикация или отклонение;
- управление пользователями — добавление, активация, просмотр и удаление.
Жизненный цикл события включает несколько этапов.
- Создание;
- Ожидание публикации. В статус ожидания публикации событие переходит сразу после создания;
- Публикация. В это состояние событие переводит администратор;
- Отмена публикации. В это состояние событие переходит в двух случаях. Первый — если администратор решил, что его нельзя публиковать. Второй — когда инициатор события решил отменить его на этапе ожидания публикации.
Приложение написано на Java 11 с использованием Spring Boot 2.7.5. Используемая база данных - PostgreSQL.
TODO: Добавить Spring Security для авторизации и аутентицифакции пользователей.