⏳ Свободное время — ценный ресурс. Ежедневно мы планируем, как его потратить — куда и с кем сходить. Сложнее всего в таком планировании поиск информации и переговоры. Нужно учесть много деталей: какие намечаются мероприятия, свободны ли в этот момент друзья, как всех пригласить и где собраться.
✨ Explore With Me — это приложение-афиша, в котором пользователи могут:
- 🎭 Предлагать различные события (от выставок до походов в кино)
- 👥 Собирать компании для участия в этих событиях
- 🔍 Находить интересные мероприятия для посещения
Приложение построено на микросервисной архитектуре и состоит из двух основных сервисов:
- 🏠 Основной сервис (
main-service) - 📊 Сервис статистики (
stats-service)
🔄 Взаимодействие между сервисами осуществляется через REST API.
Сервис отвечает за сбор и анализ статистики посещений различных эндпоинтов основного сервиса.
| Модуль | Описание |
|---|---|
| stats-server | Серверная часть, обрабатывающая запросы и хранящая статистику |
| stats-client | Клиентская библиотека для взаимодействия с сервером статистики |
| stats-dto | Модуль с объектами передачи данных (DTO) |
- 💾 Сохранение информации о посещениях эндпоинтов (хит)
- 📅 Получение статистики по посещениям за указанный период
- 🔎 Возможность фильтрации статистики по URI
- 👤 Подсчет уникальных посещений (по IP-адресам)
Основной сервис предоставляет функциональность для работы с событиями, пользователями, категориями и подборками событий. При обращении к публичным эндпоинтам информация о запросе передается в сервис статистики.
| Тип API | Доступность |
|---|---|
| Публичный API | Доступен без регистрации |
| Закрытый API | Только для авторизованных пользователей |
| Административный API | Только для администраторов сервиса |
При каждом вызове публичного API собираются статистические данные и отправляются в сервис статистики.
- 🔍 Получение событий с возможностью фильтрации
- ℹ️ Получение подробной информации об опубликованном событии по его идентификатору
- 🔎 Поиск событий по различным параметрам (дата, категория и т.д.)
- 📋 Получение всех категорий
- 🔍 Получение информации о категории по ее идентификатору
- 🗂️ Получение подборок событий
- 🔎 Получение подборки событий по ее идентификатору
Предоставляет функциональность для управления всеми аспектами приложения.
- 🔍 Получение информации о пользователях с возможностью фильтрации
- ➕ Добавление нового пользователя
- ❌ Удаление пользователя
- ➕ Добавление новой подборки
- ❌ Удаление подборки
- ✏️ Обновление информации о подборке (добавление/удаление событий, изменение статуса закрепления)
- 🔍 Поиск событий по различным параметрам
- ✏️ Редактирование данных события
- ✅ Публикация или отклонение события
- ➕ Добавление новой категории
- ❌ Удаление категории
- ✏️ Изменение названия категории
Доступен только авторизованным пользователям для управления своими событиями и запросами на участие.
- 📋 Получение событий, добавленных текущим пользователем
- ➕ Добавление нового события
- ℹ️ Получение полной информации о событии, добавленном текущим пользователем
- ✏️ Изменение события, добавленного текущим пользователем
- ❌ Отмена события, добавленного текущим пользователем
- 📋 Получение информации о заявках пользователя на участие в чужих событиях
- ℹ️ Получение информации о запросах на участие в событии текущего пользователя
- ✅ Подтверждение чужой заявки на участие в событии текущего пользователя
- ❌ Отклонение чужой заявки на участие в событии текущего пользователя
- ❌ Отмена своего запроса на участие в событии
Расширяет основную функциональность приложения, позволяя пользователям:
- ⭐ Оценивать события по 5-бальной шкале
- 💬 Оставлять комментарии к событиям (опционально)
- ❌ Удалять свои оценки
- 📋 Получать оценки, поставленные одним пользователем (с сортировкой по актуальности)
- 🔍 Получать оценки по событию с различными вариантами сортировки (новые и полезные, высокий рейтинг, низкий рейтинг)
- ℹ️ Получать подробную информацию об оценке
- Java 21
- Spring Boot 3.3.0
- Spring Data JPA
- PostgreSQL
- Docker
- Maven
Проект реализован в виде микросервисной архитектуры:
-
Main Service - основной сервис приложения, отвечающий за бизнес-логику работы с событиями, пользователями, категориями и подборками.
-
Statistics Service - сервис для сбора и анализа статистики посещений, состоящий из трех модулей:
stats-server- серверная часть для сохранения и обработки статистикиstats-client- клиентская библиотека для взаимодействия с сервером статистикиstats-dto- модуль с объектами передачи данных
Основной сервис оперирует следующими сущностями:
- 👥 Пользователи (Users)
- 🎫 События (Events)
- 📚 Категории (Categories)
- 📌 Подборки событий (Compilations)
- ✋ Запросы на участие (Participation Requests)
- ⭐ Оценки и комментарии (Ratings)
Сервис статистики хранит:
- 📊 Информацию о посещениях эндпоинтов (Endpoint Hits)
Проект упакован в Docker-контейнеры и может быть запущен с помощью Docker Compose:
docker-compose upПосле запуска:
- 🌐 Main Service будет доступен по адресу: http://localhost:8080
- 📈 Statistics Service будет доступен по адресу: http://localhost:9090
Подробная документация API доступна в файлах спецификации:
- Main Service API: ewm-main-service-spec.json
- Statistics Service API: ewm-stats-service-spec.json