Skip to content

Commit 4bbbbd0

Browse files
authored
Merge pull request #6 from yiqes/recommendations
Recommendations
2 parents ab1757d + 0b728bd commit 4bbbbd0

105 files changed

Lines changed: 3310 additions & 1170 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
# Explore-with-me
2+
3+
## Introduction
4+
5+
Explore-with-me - это платформа, позволяющая пользователям создавать мероприятия, управлять ими и участвовать в них. Приложение перешло на **микросервисную архитектуру** для улучшения масштабируемости, отказоустойчивости и гибкости разработки.
6+
7+
Ключевые компоненты архитектуры:
8+
* **Config Server**: Централизованное управление конфигурациями для всех микросервисов.
9+
* **Discovery Server (Eureka)**: Обеспечивает регистрацию и обнаружение сервисов в сети.
10+
* **Gateway Server**: Единая точка входа для всех клиентских запросов, выполняет маршрутизацию к соответствующим микросервисам.
11+
* **Event Service**: Отвечает за логику, связанную с мероприятиями (создание, поиск, управление).
12+
* **User Service**: Управляет данными пользователей и их аутентификацией/авторизацией.
13+
* **Request Service**: Обрабатывает запросы на участие в мероприятиях.
14+
* **Stats Service**: Система сбора и анализа статистики, разделенная на:
15+
* **Collector**: Принимает и сохраняет информацию о просмотрах и обращениях к эндпоинтам.
16+
* **Aggregator**: Агрегирует собранные данные для последующего анализа.
17+
* **Analyzer**: Анализирует агрегированные данные для формирования рекомендаций пользователям.
18+
19+
Взаимодействие между сервисами осуществляется с помощью **Feign клиентов**.
20+
21+
## Technologies Used
22+
23+
- **Spring Boot**: Основа для создания микросервисов.
24+
- **Spring Cloud**:
25+
- **Spring Cloud Config**: Для `config-server`.
26+
- **Spring Cloud Netflix Eureka** (или **Consul**): Для `discovery-server`.
27+
- **Spring Cloud Gateway**: Для `gateway-server`.
28+
- **OpenFeign**: Для декларативного REST-взаимодействия между сервисами.
29+
- **REST**: Для API коммуникации.
30+
- **Docker & Docker Compose**: Для контейнеризации и оркестрации окружения.
31+
- **PostgreSQL**: В качестве основной базы данных для сервисов (где это необходимо).
32+
- **Lombok**: Для уменьшения шаблонного кода.
33+
- **SLF4J**: Для логирования.
34+
35+
## Service Overview
36+
37+
Проект состоит из следующих основных микросервисов:
38+
39+
- **config-server**: Сервер конфигураций.
40+
- **discovery-server**: Сервер регистрации и обнаружения сервисов.
41+
- **gateway-server**: API шлюз, маршрутизирующий запросы.
42+
- **event-service**: Сервис управления событиями.
43+
- **user-service**: Сервис управления пользователями.
44+
- **request-service**: Сервис управления запросами на участие.
45+
- **collector**: Сервис сбора статистики.
46+
- **aggregator**: Сервис агрегации статистики.
47+
- **analyzer**: Сервис анализа статистики и формирования рекомендаций.
48+
49+
## Setup and Installation
50+
51+
### Prerequisites
52+
53+
- Java 21+
54+
- Maven
55+
- Docker
56+
- Docker Compose
57+
58+
### Installation Steps
59+
60+
1. **Clone the Repository**
61+
62+
```bash
63+
git clone https://github.com/yiqes/java-plus-graduation.git
64+
cd java-plus-graduation
65+
```
66+
67+
2. **Build the Project Modules**
68+
69+
```bash
70+
mvn clean install
71+
```
72+
73+
3. **Running with Docker Compose (Recommended)**
74+
75+
- Убедитесь, что Docker и Docker Compose установлены.
76+
- Перейдите в корневую директорию проекта, где находится `docker-compose.yml`.
77+
- Запустите:
78+
79+
```bash
80+
docker-compose up --build
81+
```
82+
Это поднимет все сконфигурированные сервисы, включая `config-server`, `discovery-server` и базы данных.
83+
84+
4. **Running Without Docker (More Complex)**
85+
86+
- Запустите `config-server`.
87+
- Запустите `discovery-server`. Убедитесь, что он регистрируется в `config-server` для получения своей конфигурации.
88+
- Запустите остальные микросервисы (`event-service`, `user-service`, `request-service`, `stats-collector`, `stats-aggregator`, `stats-analyzer`). Они должны регистрироваться в `discovery-server` и получать конфигурацию из `config-server`.
89+
- Запустите `gateway-server`. Он будет использовать `discovery-server` для маршрутизации запросов.
90+
- Для каждого сервиса необходимо настроить подключение к базе данных (если используется) в его `bootstrap.properties` (для подключения к config-server) и `application.properties` (или получать из config-server).
91+
- Запуск каждого сервиса:
92+
```bash
93+
# Пример для event-service
94+
# java -jar event-service/target/event-service.jar
95+
```
96+
97+
## API Documentation
98+
99+
Все API запросы должны направляться через **Gateway Server**, который обычно доступен по адресу `http://localhost:8080` (или порт, указанный в вашей конфигурации `gateway-server`). Gateway автоматически маршрутизирует запросы к соответствующим микросервисам.
100+
101+
**Эндпоинты остались теми же, что и в монолитной версии.**
102+
103+
### Admin API Endpoints (через Gateway)
104+
105+
- **POST /admin/categories**
106+
- Создает новую категорию.
107+
- Request Body: `NewCategoryDto`
108+
- *Маршрутизируется на `event-service`*
109+
110+
- **GET /admin/compilations**
111+
- Получает подборки событий.
112+
- Query Params: `pinned`, `from`, `size`
113+
- *Маршрутизируется на `event-service`*
114+
115+
- **POST /admin/events** (и другие PATCH, GET эндпоинты для событий)
116+
- Создает/обновляет/получает события (администратор).
117+
- Request Body: `NewEventDto` / `UpdateEventAdminRequest`
118+
- *Маршрутизируется на `event-service`*
119+
120+
- **GET /admin/users** (и другие эндпоинты для управления пользователями)
121+
- Получает пользователей.
122+
- Query Params: `ids`, `from`, `size`
123+
- *Маршрутизируется на `user-service`*
124+
125+
### Public API Endpoints (через Gateway)
126+
127+
- **GET /categories**
128+
- Получает категории.
129+
- Query Params: `from`, `size`
130+
- *Маршрутизируется на `event-service`*
131+
132+
- **GET /compilations**
133+
- Получает подборки событий.
134+
- Query Params: `pinned`, `from`, `size`
135+
- *Маршрутизируется на `event-service`*
136+
137+
- **GET /events**
138+
- Получает события (публичный доступ).
139+
- Query Params: `text`, `categories`, `paid`, `rangeStart`, `rangeEnd`, `onlyAvailable`, `sort`, `from`, `size`
140+
- *Маршрутизируется на `event-service`*
141+
142+
### Private API Endpoints (через Gateway)
143+
144+
- **POST /users/{userId}/events** (и другие эндпоинты для событий пользователя)
145+
- Создает событие для пользователя.
146+
- Request Body: `NewEventDto`
147+
- *Маршрутизируется на `event-service` (с проверкой пользователя через `user-service` или передачей `userId`)*
148+
149+
- **GET /users/{userId}/requests** (и другие эндпоинты для запросов пользователя)
150+
- Получает запросы на участие для событий пользователя.
151+
- *Маршрутизируется на `request-service` (с проверкой пользователя)*
152+
153+
## Usage Examples
154+
155+
### Getting an event with provided id & user-id from header (через Gateway)
156+
157+
```bash
158+
curl -X GET "http://localhost:8080/123" \
159+
-H "X-Ewm-User-Id: 456"

0 commit comments

Comments
 (0)