Наверняка у вашего города есть сайт-афиша с событиями. Так вот, это практически готовый backend для целого портала, эдакая мини-социальная сеть, которая позволяет коммуницировать друзьям(и не только) между собой, чтобы создавать свои события, производить регистрацию на них, а владельцам(или доверенным модераторам) ресурса придется почувствовать себя главными редакторами и делать подборки лучших событий.
Important
Создано с помощью:
- Java 11
- Spring Boot
- JPA(Hibernate)
- PostgreSQL, H2(memory)
- Lombok
- MapStruct
- Maven
- Docker
- JUnit
- MockMVC
- Swagger
- Postman
Note
Что это? Это микросервисное приложение. Разработано в соответствии с архитектурным стилем RESTful
по спецификации
в swagger
. Имеет 4 сервиса (2 основных и 2 базы данных), которые взаимодействуют между собой по VPN
(Virtual Private Network) в специальных контейнерах Docker.
Основной сервис:
Main-Service
- отвечает за валидацию данных и основную бизнес логику. Имеет на борту API разделенное на 3 части:
публичная
(доступна без регистрации любому пользователи сети)закрытая
(доступна только авторизованным пользователям)административная
(доступна только для администраторов сервиса)
Основной элемент бизнес-логики сервиса - это события
на различные мероприятия. Они имеют 4 стадии:
- Создание
нового события
Ожидание модерации
. В это состояние переходит сразу после создания.Публикация
, которую проводит администратор.Отмена публикации
. Возможна в двух случаях -> если инициатор решил отменить во время ожидания модерации. Или если администратору не понравилось что-либо в событии (или оно нарушает какие-то правила).
Сервис взаимодействует с базой данных на PostgreSQL и вторым сервисом статистики, который участвует в сборе информации и позволяет производить различные выборки и анализ работы приложения.
Реализованные эндпоинты:
User
(Пользователи) - основные CRUD операции над пользователями ресурса.Category
(Категории) - основные CRUD операции над категориями событий.Compilation
(Подборки событий) - позволяет компоновать подборку событий на сайте.Event
(События) - взаимодействия с событиями.Request
(Запросы на участие) - потребители делают запросы на своё участие в событии здесь.
Сервис статистики:
Stat-Service
- отвечает за сбор информации о количестве обращений пользователей к спискам событий и о количестве
запросов к подробной информации о событии.
Реализованные эндпоинты:
Hit
(Просмотр) - создает запись в системе об использовании сервиса.Stats
(Статистика) - сделать выгрузку необходимого отчета по параметризованному запросу.
Концепт взаимодействия статистики:
Tip
Что можно улучшить:
- добавить
Liquibase
и перевести инициализацию БД - добавить
Spring Security
- добавить брокер очередей (
Kafka/RabbitMQ
) - добавить использование кеша на основе
Redis
- добавить
комментарии к событиям
- добавить возможность добавить
друзей
- добавить
подписки на других пользователей
- добавить
администрирование локаций
- добавить
модерацию событий
администратором
Спецификацию по основному сервису можно посмотреть здесь - ewm-main-service-specific
Спецификацию по сервису статистики можно посмотреть здесь - ewm-stats-service-specific
Краткое описание эндпоинтов смотрите ниже:
Адрес | Описание |
---|---|
GET /categories |
Получить список категорий |
GET /categories/{catId} |
Получить конкретную категорию по ID |
GET /compilations |
Получить подборку событий |
GET /compilations/{compId} |
Получить конкретную подборку событий по ID |
GET /events |
Получить список событий с параметризованным запросом |
GET /events/{id} |
Получить конкретное событие по ID |
Адрес | Описание |
---|---|
GET /admin/users |
Получить список пользователей |
POST /admin/users |
Зарегистрировать нового пользователя |
DELETE /admin/users/{userId} |
Удалить пользователя по ID |
POST /admin/categories |
Создать новую категорию |
DELETE /admin/categories/{catId} |
Удалить конкретную категорию по ID |
PATCH /admin/categories/{catId} |
Частичное обновление категории по ID |
GET /admin/events |
Поиск событий с параметрами |
PATCH /admin/events/{eventId} |
Модерация события по ID |
POST /admin/compilations |
Создать новую подборку событий |
DELETE /admin/compilations/{compId} |
Удалить подборку событий по ID |
PATCH /admin/compilations/{compId} |
Частичное обновление конкретной подборки по ID |
Адрес | Описание |
---|---|
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 |
Изменение статуса заявок на участие в событии |
GET /users/{userId}/requests |
Получить информацию о своём участии в чужих событиях |
POST /users/{userId}/requests |
Добавить запрос на участие в чужом событии |
PATCH /users/{userId}/requests/{requestId}/cancel |
Отменить свой запрос на участие в чужом событии |
- С помощью Maven собрать проект
mvn clean install
- Установить Docker Compose
- Собрать 4 образа с помощью команды
docker-compose up
- Запустить образы в Docker
- На запущенных сервисах можно сделать проверку тестами в Postman (папка postman)