Java, Spring Boot, Spring JPA, JDBC, PostgreSQL, REST API, Maven, Docker, JUnit, Mockito, Lombok
Бэкенд для многомодульного сервиса, который позволит пользователям делиться информацией об интересных событиях и находить компанию для участия в них. В этой афише можно предложить какое-либо событие от выставки до похода в кино и собрать компанию для участия в нём.
Приложение содержит 2 микросервиса
- Main-service - содержит основную бизнес-логику
- Stat-service - осуществляет сбор статистики просмотров событий
Сервис статистики в свою очередь состоит из 3 модулей:
- Модуль клиента сервиса статистики
- Модуль общих DTO
- Модуль сервиса статистики
Каждый микросервис имеет свою базу данных. Микросервисы и БД запускаются в собственных Docker контейнерах.
API основного сервиса разделено на 3 части:
- public - доступна без регистрации любому пользователю сети
- private - доступна только авторизованным пользователям
- admin — для администраторов сервиса
Public API:
- Просмотр списка событий, категорий и подборок событий
- Фиксация информации о просмотре события или списка событий сервисом статистики
- Сортировка списка событий по количеству просмотров либо по датам событий
Private API:
- Добавление в приложение новых мероприятий, редактирование их и просмотр после добавления
- Подача заявок на участие в интересующих мероприятиях
- Подтверждение/отклонение заявок на участие организатором мероприятия
Admin API:
- Добавление, изменение и удаление категорий для событий
- Добавление, удаление и закрепление на главной странице подборок мероприятий
- Модерация событий, размещённых пользователями, — публикация или отклонение
- Управление пользователями — добавление, просмотр и удаление
API сервиса статистики:
- запись информации о том, что был обработан запрос к эндпоинту API
- предоставление статистики за выбранные даты
Метод | Endpoint | Описание |
---|---|---|
GET |
/admin/users |
Просмотр списка всех пользователей |
POST |
/admin/users |
Регистрация пользователя |
DELETE |
/admin/users/{userId} |
Удаление профиля пользователя |
Метод | Endpoint | Описание |
---|---|---|
POST |
/admin/categories |
Создание категории |
DELETE |
/admin/categories/{catId} |
Удаление категории |
PATCH |
/admin/categories/{catId} |
Редактирование категории |
Метод | Endpoint | Описание |
---|---|---|
GET |
/categories |
Просмотр всех категорий |
GET |
/categories/{catId} |
Просмотр категории по идентификатору |
Метод | Endpoint | Описание |
---|---|---|
GET |
/admin/events |
Просмотр списка всех мероприятий |
PATCH |
/admin/events/{eventId} |
Модерация события |
Метод | Endpoint | Описание |
---|---|---|
GET |
/events |
Просмотр списка всех мероприятий |
GET |
/events/{id} |
Просмотр мероприятия по идентификатору |
Метод | Endpoint | Описание |
---|---|---|
GET |
/users/{userId}/events |
Просмотр списка всех мероприятий пользователя |
GET |
/users/{userId}/events/{eventId} |
Просмотр события по идентификатору |
POST |
/users/{userId}/events |
Добавление мероприятия |
PATCH |
/users/{userId}/events/{eventId} |
Редактирование события |
GET |
/users/{userId}/events/{eventId}/requests |
Просмотр всех заявок на мероприятие |
PATCH |
/users/{userId}/events/{eventId}/requests |
Подтверждение/отклонение заявки на мероприятие |
Метод | Endpoint | Описание |
---|---|---|
POST |
/admin/compilations |
Создание подборки событий |
PATCH |
/admin/compilations/{compId} |
Редактирование подборки событий |
DELETE |
/admin/compilations/{compId} |
Удаление подборки событий |
Метод | Endpoint | Описание |
---|---|---|
GET |
/compilations |
Просмотр всех подборок событий |
GET |
/compilations/{compId} |
Просмотр подборки событий по идентификатору |
Метод | Endpoint | Описание |
---|---|---|
POST |
/users/{userId}/requests |
Создание заявки на участие в мероприятии |
GET |
/users/{userId}/requests |
Просмотр всех заявок пользователя |
PATCH |
/users/{userId}/requests/{requestId}/cancel |
Отмена заявки на участие в мероприятии |
Метод | Endpoint | Описание |
---|---|---|
POST |
/hit |
Сохранение информации о просмотре события |
GET |
/stats |
Получение статистики по просмотрам |
Метод | Endpoint | Описание |
---|---|---|
POST |
/users/{userId}/events/{eventId}/likes |
Добавление лайка событию |
DELETE |
/users/{userId}/events/{eventId}/likes/{likeId} |
Удаление лайка |
PATCH |
/users/{userId}/events/{eventId}/likes/{likeId} |
Редактирование лайка |
GET |
/users/{userId}/events/{eventId}/likes/{likeId} |
Получение лайка по идентификатору |
GET |
/users/{userId}/likes |
Получение всех лайков пользователя |
GET |
/users/{userId}/events/{eventId}/likes |
Получение всех лайков события |
- Нельзя ставить лайк своему событию
- Лайк можно поставить только посещенному мероприятию
- Лайк можно поставить только через 3 часа после начала мероприятия
- Лайк можно поставить только опубликованному событию
- Удалять/обновлять лайки могут только пользователи, которые их поставили
- Нет ограничений на время редактирования лайка
- Лайк может посмотреть либо человек, который его поставил, либо владелец события
- Посмотреть все лайки может только владелец события