Skip to content

About

Explore With Me - event-платформа для организации и поиска мероприятий. Полнофункциональный бэкенд на Java/Spring Boot с микросервисной архитектурой, статистикой просмотров, системой комментариев и модерацией событий.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Explore With Me 🎯

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/   # Сервис статистики

🛠 Технологический стек

Backend

  • 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)

Способ 1: Запуск через Docker Compose (рекомендуемый)

  1. Клонируйте репозиторий:
git clone <your-repository-url>
cd explore-with-me
  1. Соберите и запустите приложение:
docker-compose up --build

Сервисы будут доступны по адресам:

Способ 2: Локальный запуск

Настройте базы данных 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

Способ 3: Запуск тестов

# Все тесты
mvn test

# С проверкой покрытия
mvn test jacoco:report

# Со статическим анализом
mvn checkstyle:check spotbugs:check

📚 API Документация

Проект включает полную OpenAPI документацию:

  • Основной сервис: OpenAPI спецификация
  • Сервис статистики: OpenAPI спецификация

Основные endpoint'ы:

События

  • 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_stats

Docker окружение:

environment:
  - 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

📈 Планы по доработке

Краткосрочные улучшения:

  1. Аутентификация и авторизация - добавление JWT-based аутентификации
  2. Уведомления - email/SMS уведомления о событиях
  3. Геолокация - улучшенный поиск по местоположению
  4. Кэширование - добавление Redis для повышения производительности

Среднесрочные улучшения:

  1. Мобильное приложение - React Native клиент
  2. Платежная система - интеграция с платежными шлюзами
  3. WebSocket уведомления - real-time оповещения
  4. Elasticsearch - улучшенный поиск по событиям

Долгосрочные улучшения:

  1. Рекомендательная система - ML-based рекомендации событий
  2. Социальные функции - лайки, репосты, подписки
  3. Аналитика для организаторов - детальная статистика
  4. Мультиязычность - поддержка нескольких языков

👥 Разработчики

Проект разработан Евгением Дмитриевым как учебный проект в рамках курса Java-разработки.

About

Explore With Me - event-платформа для организации и поиска мероприятий. Полнофункциональный бэкенд на Java/Spring Boot с микросервисной архитектурой, статистикой просмотров, системой комментариев и модерацией событий.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages