ExploreWithMe — это микросервисное приложение для управления событиями, пользователями, запросами на участие и статистикой просмотров.
Проект разделен на несколько микросервисов, каждый из которых отвечает за свою доменную область, и инфраструктурные компоненты для обнаружения, конфигурации и маршрутизации.
| Сервис | Описание |
|---|---|
| stats-server | Хранит и предоставляет статистику по просмотрам событий |
| user-service | Управление пользователями: создание, удаление, получение списков |
| category-service | Управление категориями событий |
| event-service | Управление событиями: создание, обновление, публикация, получение списков (админ, приватный, публичный API) |
| request-service | Обработка запросов на участие в событиях: создание, отмена, подтверждение и отклонение |
| Компонент | Описание | Порт |
|---|---|---|
| discovery-server (Eureka Server) | Обнаружение сервисов. Все микросервисы регистрируются здесь для динамического обнаружения | 8761 |
| config-server | Централизованное управление конфигурациями. Загружает YAML-конфигурации для каждого сервиса из Git-репозитория или локальных файлов | 8888 |
| gateway-server (Spring Cloud Gateway) | Шлюз для маршрутизации внешних запросов к сервисам. Использует Eureka для маршрутизации по именам сервисов | 8080 |
Каждый сервис использует отдельную PostgreSQL базу данных, которые запускаются в Docker-контейнерах:
- stats-db
- user-db
- category-db
- event-db
- request-db
Все базы данных доступны внутри Docker-сети по порту 5432.
Все сервисы регистрируются в Eureka Server.
Реализовано через Feign-клиенты в модуле:
core/interaction-api
Через Config Server.
Каждый сервис импортирует конфигурацию:
spring.config.import=configserver:
Каждый сервис имеет свою изолированную БД.
Доступен через gateway-server:
http://localhost:8080
GET /categories # получение списка категорий
GET /categories/{catId} # получение категории по ID
GET /compilations # получение списка подборок
GET /compilations/{compId} # получение подборки по ID
GET /events # получение списка событий с фильтрацией
GET /events/{id} # получение события по ID
GET /events/by-ids # получение событий по списку IDPOST /users/{userId}/events
GET /users/{userId}/events
GET /users/{userId}/events/{eventId}
PATCH /users/{userId}/events/{eventId}
POST /users/{userId}/requests
GET /users/{userId}/requests
PATCH /users/{userId}/requests/{requestId}/cancel
GET /users/{userId}/events/{eventId}/requests
PATCH /users/{userId}/events/{eventId}/requestsPOST /admin/users
GET /admin/users
GET /admin/users/{userId}
DELETE /admin/users/{userId}
POST /admin/categories
PATCH /admin/categories/{catId}
DELETE /admin/categories/{catId}
POST /admin/compilations
PATCH /admin/compilations/{compId}
DELETE /admin/compilations/{compId}
GET /admin/events
PATCH /admin/events/{eventId}GET /internal/events/{id}
GET /internal/events/{eventId}/confirmed-requestsPOST /hit
GET /stats