Skip to content

Микросервисное веб-приложение для организации и поиска событий. Пользователи могут создавать события, участвовать в них, оставлять комментарии и просматривать статистику посещений.

Notifications You must be signed in to change notification settings

Just-Roman/java-explore-with-me

Repository files navigation

Описание проекта

Explore With Me — это микросервисное веб-приложение для организации и поиска событий. Пользователи могут создавать события, участвовать в них, оставлять комментарии и просматривать статистику посещений.

Архитектура

Проект состоит из двух основных микросервисов:

1. Main Service (Основной сервис)

  • Порт: 8080
  • База данных: PostgreSQL (порт 7542)
  • Функциональность:
    • Управление пользователями
    • Управление категориями событий
    • Создание и управление событиями
    • Система запросов на участие в событиях
    • Подборки событий (компиляции)
    • Система комментариев
    • Управление локациями

2. Stats Service (Сервис статистики)

  • Порт: 9090
  • База данных: PostgreSQL (порт 6542)
  • Функциональность:
    • Сбор статистики посещений эндпоинтов
    • Анализ популярности событий
    • Предоставление статистических данных

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

Backend

  • 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 спецификация сервиса статистики

Основные сущности

Пользователи (Users)

  • ID, имя, email
  • Создание и управление профилями

События (Events)

  • Аннотация, описание, дата проведения
  • Категория, локация, инициатор
  • Статус (PENDING, PUBLISHED, CANCELED)
  • Лимит участников, модерация запросов

Категории (Categories)

  • Название категории событий

Запросы на участие (Requests)

  • Статус (PENDING, CONFIRMED, REJECTED, CANCELED)
  • Связь с событием и пользователем

Комментарии (Comments)

  • Текст комментария, автор, событие
  • Время создания и редактирования

Подборки (Compilations)

  • Название, закрепление
  • Связь с событиями

API Endpoints

Основной сервис (Main Service)

Публичные эндпоинты

  • GET /events - Поиск событий с фильтрацией
  • GET /events/{id} - Получение события по ID
  • GET /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 - Управление пользователями

Сервис статистики (Stats Service)

  • POST /hit - Сохранение информации о посещении
  • GET /stats - Получение статистики посещений

Особенности реализации

Микросервисная архитектура

  • Разделение ответственности между сервисами
  • Независимое развертывание и масштабирование
  • Асинхронная коммуникация через HTTP

Система модерации

  • События проходят модерацию перед публикацией
  • Администраторы могут отклонять или одобрять события
  • Автоматическая публикация при одобрении

Статистика посещений

  • Автоматический сбор статистики всех запросов
  • Агрегация данных по событиям
  • Подсчет уникальных и общих просмотров

Система комментариев

  • Пользователи могут комментировать события
  • Возможность редактирования комментариев
  • Отслеживание времени создания и изменения

Разработка

Структура кода

  • Слоистая архитектура (Controller → Service → Repository)
  • Использование DTO для передачи данных
  • Маппинг между сущностями и DTO
  • Централизованная обработка ошибок

Качество кода

  • Соблюдение стандартов Java
  • Автоматическая проверка стиля кода

Контакты

  • Telegram - @sobolev_rs

About

Микросервисное веб-приложение для организации и поиска событий. Пользователи могут создавать события, участвовать в них, оставлять комментарии и просматривать статистику посещений.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published