Это микросервисная реализация приложения ExploreWithMe для поиска событий и участия в них. Исходный монолит разделен на несколько независимых сервисов, взаимодействующих через API Gateway и Feign-клиенты.
Технологический стек: Java 21, Spring Boot, Spring Cloud(Eureka, Gateway, OpenFeign, Config), MapStruct, Lombok, Apache Maven, Docker, PostgreSQL, Postman.
- event-service - сервис управления событиями, категориями, подборками;
- user-service - сервис управления пользователями.;
- request-service - сервис управления запросами на участие в событии;
- comment-service - сервис управления комментариями;
- stats-service - сервис сбора и предоставления статистики;
- discovery-server (Eureka) - регистрация и обнаружение сервисов;
- config-server - централизованное хранение конфигураций для всех сервисов;
- gateway-server - единая точка входа (API Gateway).
- interaction-api - общие DTO, Feign-клиенты, исключения, перечисления
Все настройки хранятся в config-server:
gateway-server.yml- маршрутизация Gatewayuser-service.yml- настройки user-serviceevent-service.yml- настройки event-servicerequest-service.yml- настройки request-servicecomment-service.yml- настройки comment-servicestats-service.yml- настройки stats-service
Приложение имеет общую базу данных. Каждый сервис имеет собственную schema.sql, обеспечивая изоляцию данных.
Для взаимодействия между микросервисами используются Feign Clients и Internal Endpoints:
- GET /internal/events/{eventId} - возвращает полное описание события;
- GET /internal/requests/event/{eventId}/count/{status} - возвращает количество заявок события с определенным статусом;
- GET /internal/users/{userId} - возвращает краткую информацию о пользователе.
Взаимодействие с внешними запросами происходит через API Gateway, который перенаправляет внешние запросы к нужным сервисам.
Примеры основных эндопинтов:
- GET /comments/events/{eventId} - поиск опубликованных комментариев к событию;
- GET /events - поиск событий;
- GET /categories - категории событий;
- GET /compilations/{compId} - поиск подборки по id;
- POST /users/{userId}/comments - добавить комментарий к событию;
- PATCH /users/{userId}/comments/{commentId} - изменить комментарий;
- GET /users/{userId}/events - события пользователя;
- GET /users/{userId}/events/{eventId}/requests - все заявки на участие в событии;
- PATCH /users/{userId}/requests/{requestId}/cancel - отмена заявки на участие;
- GET /admin/comments - поиск комментариев;
- DELETE /admin/comments/{commentId} - удалить комментарий;
- POST /admin/categories - создать категорию;
- PATCH /admin/compilations/{compId} - изменить подборку;
- GET /admin/events - расширенный поиск событий с фильтрами;
- POST /admin/users/ - создать пользователя;
- DELETE /admin/users/{userId} - удалить пользователя.
- ewm-main-service-spec.json - основная спецификация
- ewm-stat-service-spec.json - спецификация статистики