Explore With Me — это комплексная платформа для поиска, создания и участия в событиях. Пользователи могут организовывать мероприятия, находить интересные события поблизости, участвовать в них и оставлять отзывы.
Это учебный проект, разработанный для демонстрации навыков создания сложных бэкенд-систем на Java. Проект реализует полнофункциональную event-платформу с микросервисной архитектурой, системой статистики, модерацией контента и расширенными возможностями поиска.
Основные цели проекта:
- Освоение микросервисной архитектуры
- Реализация сложной бизнес-логики с валидацией
- Интеграция сервисов через REST API
- Работа с статистикой и аналитикой
- Реализация системы комментариев
Проект использует микросервисную архитектуру с разделением на:
- ewm-service (порт 8080) - основной сервис событий
- stats-service (порт 9090) - сервис статистики посещений
- Базы данных - PostgreSQL для каждого сервиса
📁 explore-with-me/
├── 📁 ewm-service/ # Основной сервис событий
└── 📁 stats/ # Сервис статистики
├── 📁 stats-client/ # Клиент для работы со статистикой
├── 📁 stats-dto/ # DTO для статистики
└── 📁 stats-service/ # Сервис статистики
- Java 21 - основной язык разработки
- Spring Boot 3.3.2 - фреймворк
- Spring Data JPA - работа с БД
- Hibernate 6.5.2 - ORM
- MapStruct 1.5.5 - маппинг DTO
- Lombok - упрощение кода
- PostgreSQL - основная БД
- H2 - in-memory БД для тестирования
- JUnit 5 - модульное тестирование
- JaCoCo - покрытие кода тестами
- Checkstyle - проверка стиля кода
- SpotBugs - статический анализ
- Docker - контейнеризация
- Docker Compose - оркестрация
- Maven - система сборки
- ✅ Создание и редактирование событий
- ✅ Модерация событий администраторами
- ✅ Поиск событий с фильтрацией
- ✅ Система участия в событиях (заявки)
- ✅ Пагинация и сортировка
- ✅ Регистрация и управление пользователями
- ✅ Ролевая модель (обычные пользователи, администраторы)
- ✅ Система запросов на участие
- ✅ Трекинг просмотров событий
- ✅ Сбор статистики посещений
- ✅ Аналитика популярности событий
- ✅ Добавление комментариев к событиям
- ✅ Редактирование и удаление комментариев
- ✅ Модерация комментариев
- ✅ Создание тематических подборок
- ✅ Закрепление подборок на главной
- ✅ Управление подборками
- Java 21 или выше
- Maven 3.6+
- Docker и Docker Compose
- PostgreSQL (если запуск без Docker)
- Клонируйте репозиторий:
git clone <your-repository-url>
cd explore-with-me- Соберите и запустите приложение:
docker-compose up --buildСервисы будут доступны по адресам:
- Основной сервис: http://localhost:8080
- Сервис статистики: http://localhost:9090
- База данных ewm: localhost:6542
- База данных stats: localhost:6541
Настройте базы данных PostgreSQL:
-- Для основного сервиса
CREATE DATABASE ewm_main;
CREATE USER postgres WITH PASSWORD '12345';
-- Для сервиса статистики
CREATE DATABASE ewm_stats;Запустите сервис статистики:
cd stats/stats-service
mvn spring-boot:run -Dspring.profiles.active=devЗапустите основной сервис:
cd ewm-service
mvn spring-boot:run -Dspring.profiles.active=dev# Все тесты
mvn test
# С проверкой покрытия
mvn test jacoco:report
# Со статическим анализом
mvn checkstyle:check spotbugs:checkПроект включает полную OpenAPI документацию:
- Основной сервис: OpenAPI спецификация
- Сервис статистики: OpenAPI спецификация
GET /events- поиск событийPOST /users/{userId}/events- создание событияGET /events/{id}- получение событияPATCH /admin/events/{eventId}- модерация события
GET /admin/users- получение пользователейPOST /admin/users- создание пользователяDELETE /admin/users/{userId}- удаление пользователя
POST /hit- сохранение информации о запросеGET /stats- получение статистики
POST /users/{userId}/comments- добавление комментарияGET /comments- получение комментариевPATCH /users/{userId}/comments/{commentId}- редактирование комментария
users- пользователи системыevents- событияcategories- категории событийrequests- заявки на участиеcompilations- подборки событийcomments- комментарии к событиямstats- статистика посещений
CREATE TABLE users (id, email, name);
CREATE TABLE events (id, title, annotation, description, ...);
CREATE TABLE categories (id, name);
CREATE TABLE requests (id, event_id, requester_id, status, ...);
CREATE TABLE compilations (id, title, pinned);
CREATE TABLE comments (id, text, author_id, event_id, ...);
CREATE TABLE stats (id, app_name, user_ip, uri, created);Проект включает comprehensive тестирование:
- Unit tests - тестирование отдельных компонентов
- Integration tests - тестирование взаимодействия
- API tests - тестирование endpoint'ов
- Postman коллекции - готовые тесты API
Запуск тестов с покрытием:
mvn test jacoco:reportОтчет о покрытии будет доступен в: target/site/jacoco/index.html
# Основной сервис
server.port=8080
spring.datasource.url=jdbc:postgresql://localhost:5432/ewm_main
stats-server.url=http://localhost:9090
# Сервис статистики
server.port=9090
spring.datasource.url=jdbc:postgresql://localhost:5432/ewm_statsenvironment:
- STATS_SERVER_URL=http://stats-server:9090
- spring.datasource.url=jdbc:postgresql://ewm-db:5432/ewm-main
- spring.datasource.username=postgres
- spring.datasource.password=12345- Аутентификация и авторизация - добавление JWT-based аутентификации
- Уведомления - email/SMS уведомления о событиях
- Геолокация - улучшенный поиск по местоположению
- Кэширование - добавление Redis для повышения производительности
- Мобильное приложение - React Native клиент
- Платежная система - интеграция с платежными шлюзами
- WebSocket уведомления - real-time оповещения
- Elasticsearch - улучшенный поиск по событиям
- Рекомендательная система - ML-based рекомендации событий
- Социальные функции - лайки, репосты, подписки
- Аналитика для организаторов - детальная статистика
- Мультиязычность - поддержка нескольких языков
Проект разработан Евгением Дмитриевым как учебный проект в рамках курса Java-разработки.