Skip to content

Backend для городского портала на микросервисной архитектуре сделанное по swagger в соответствии с REST API

Notifications You must be signed in to change notification settings

Jon7even/java-explore-with-me

Repository files navigation

Explore with me

Наверняка у вашего города есть сайт-афиша с событиями. Так вот, это практически готовый 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 стадии:

  1. Создание нового события
  2. Ожидание модерации. В это состояние переходит сразу после создания.
  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

Краткое описание эндпоинтов смотрите ниже:

Публичное API

Адрес Описание
GET /categories Получить список категорий
GET /categories/{catId} Получить конкретную категорию по ID
GET /compilations Получить подборку событий
GET /compilations/{compId} Получить конкретную подборку событий по ID
GET /events Получить список событий с параметризованным запросом
GET /events/{id} Получить конкретное событие по ID

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

Адрес Описание
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

Закрытое API

Адрес Описание
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 Отменить свой запрос на участие в чужом событии

Сборка и запуск

  1. С помощью Maven собрать проект mvn clean install
  2. Установить Docker Compose
  3. Собрать 4 образа с помощью команды docker-compose up
  4. Запустить образы в Docker
  5. На запущенных сервисах можно сделать проверку тестами в Postman (папка postman)

About

Backend для городского портала на микросервисной архитектуре сделанное по swagger в соответствии с REST API

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages