Explore With Me — это микросервисное веб-приложение для организации и поиска событий. Пользователи могут создавать события, участвовать в них, оставлять комментарии и просматривать статистику посещений.
Проект состоит из двух основных микросервисов:
- Порт: 8080
- База данных: PostgreSQL (порт 7542)
- Функциональность:
- Управление пользователями
- Управление категориями событий
- Создание и управление событиями
- Система запросов на участие в событиях
- Подборки событий (компиляции)
- Система комментариев
- Управление локациями
- Порт: 9090
- База данных: PostgreSQL (порт 6542)
- Функциональность:
- Сбор статистики посещений эндпоинтов
- Анализ популярности событий
- Предоставление статистических данных
- Java 21
- Spring Boot 3.3.2
- Spring Data JPA
- Spring Web
- Spring Boot Actuator
- PostgreSQL 16.1
- H2 Database (для тестирования)
- Lombok
- Logbook (логирование HTTP запросов)
- Maven (система сборки)
- Checkstyle (проверка стиля кода)
- SpotBugs (анализ кода)
- JaCoCo (покрытие тестами)
- Docker (контейнеризация)
java-explore-with-me/
├── main-service/ # Основной сервис
│ ├── src/main/java/ewm/
│ │ ├── categories/ # Управление категориями
│ │ ├── comments/ # Система комментариев
│ │ ├── compilations/ # Подборки событий
│ │ ├── events/ # Управление событиями
│ │ ├── locations/ # Управление локациями
│ │ ├── requests/ # Запросы на участие
│ │ ├── user/ # Управление пользователями
│ │ └── exception/ # Обработка ошибок
│ └── src/main/resources/
│ ├── application.properties
│ └── schema.sql # Схема базы данных
├── stats/ # Сервис статистики
│ ├── stats-client/ # Клиент для работы со статистикой
│ ├── stats-dto/ # DTO для статистики
│ └── stats-server/ # Сервер статистики
├── docker-compose.yml # Конфигурация Docker
├── ewm-main-service-spec.json # OpenAPI спецификация основного сервиса
└── ewm-stats-service-spec.json # OpenAPI спецификация сервиса статистики
- ID, имя, email
- Создание и управление профилями
- Аннотация, описание, дата проведения
- Категория, локация, инициатор
- Статус (PENDING, PUBLISHED, CANCELED)
- Лимит участников, модерация запросов
- Название категории событий
- Статус (PENDING, CONFIRMED, REJECTED, CANCELED)
- Связь с событием и пользователем
- Текст комментария, автор, событие
- Время создания и редактирования
- Название, закрепление
- Связь с событиями
GET /events- Поиск событий с фильтрациейGET /events/{id}- Получение события по IDGET /categories- Получение списка категорийGET /compilations- Получение подборок событий
POST /users/{userId}/events- Создание событияGET /users/{userId}/events- События пользователяPOST /requests- Подача заявки на участиеGET /users/{userId}/requests- Заявки пользователя
POST /admin/categories- Создание категорииPATCH /admin/events/{eventId}- Модерация событияGET /admin/users- Управление пользователями
POST /hit- Сохранение информации о посещенииGET /stats- Получение статистики посещений
- Разделение ответственности между сервисами
- Независимое развертывание и масштабирование
- Асинхронная коммуникация через HTTP
- События проходят модерацию перед публикацией
- Администраторы могут отклонять или одобрять события
- Автоматическая публикация при одобрении
- Автоматический сбор статистики всех запросов
- Агрегация данных по событиям
- Подсчет уникальных и общих просмотров
- Пользователи могут комментировать события
- Возможность редактирования комментариев
- Отслеживание времени создания и изменения
- Слоистая архитектура (Controller → Service → Repository)
- Использование DTO для передачи данных
- Маппинг между сущностями и DTO
- Централизованная обработка ошибок
- Соблюдение стандартов Java
- Автоматическая проверка стиля кода
- Telegram - @sobolev_rs