Skip to content

About

Template repository for ExploreWithMe project.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

🚀 Explore With Me

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

⏳ Свободное время — ценный ресурс. Ежедневно мы планируем, как его потратить — куда и с кем сходить. Сложнее всего в таком планировании поиск информации и переговоры. Нужно учесть много деталей: какие намечаются мероприятия, свободны ли в этот момент друзья, как всех пригласить и где собраться.

✨ Explore With Me — это приложение-афиша, в котором пользователи могут:

  • 🎭 Предлагать различные события (от выставок до походов в кино)
  • 👥 Собирать компании для участия в этих событиях
  • 🔍 Находить интересные мероприятия для посещения

🏗️ Архитектура приложения

Приложение построено на микросервисной архитектуре и состоит из двух основных сервисов:

  • 🏠 Основной сервис (main-service)
  • 📊 Сервис статистики (stats-service)

🔄 Взаимодействие между сервисами осуществляется через REST API.

📈 Сервис статистики (stats-service)

Сервис отвечает за сбор и анализ статистики посещений различных эндпоинтов основного сервиса.

🧩 Структура сервиса

Модуль Описание
stats-server Серверная часть, обрабатывающая запросы и хранящая статистику
stats-client Клиентская библиотека для взаимодействия с сервером статистики
stats-dto Модуль с объектами передачи данных (DTO)

⚙️ Функционал

  • 💾 Сохранение информации о посещениях эндпоинтов (хит)
  • 📅 Получение статистики по посещениям за указанный период
  • 🔎 Возможность фильтрации статистики по URI
  • 👤 Подсчет уникальных посещений (по IP-адресам)

🏠 Основной сервис (main-service)

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

🌐 Структура API

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

🔓 Публичный API

При каждом вызове публичного API собираются статистические данные и отправляются в сервис статистики.

🎫 События (Events)

  • 🔍 Получение событий с возможностью фильтрации
  • ℹ️ Получение подробной информации об опубликованном событии по его идентификатору
  • 🔎 Поиск событий по различным параметрам (дата, категория и т.д.)

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

  • 📋 Получение всех категорий
  • 🔍 Получение информации о категории по ее идентификатору

📌 Подборки событий (Compilations)

  • 🗂️ Получение подборок событий
  • 🔎 Получение подборки событий по ее идентификатору

🔐 Административный API

Предоставляет функциональность для управления всеми аспектами приложения.

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

  • 🔍 Получение информации о пользователях с возможностью фильтрации
  • ➕ Добавление нового пользователя
  • ❌ Удаление пользователя

📌 Подборки событий (Compilations)

  • ➕ Добавление новой подборки
  • ❌ Удаление подборки
  • ✏️ Обновление информации о подборке (добавление/удаление событий, изменение статуса закрепления)

События (Events)

  • 🔍 Поиск событий по различным параметрам
  • ✏️ Редактирование данных события
  • ✅ Публикация или отклонение события

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

  • ➕ Добавление новой категории
  • ❌ Удаление категории
  • ✏️ Изменение названия категории

🔒 Закрытый API (Private API)

Доступен только авторизованным пользователям для управления своими событиями и запросами на участие.

🎫 События (Events)

  • 📋 Получение событий, добавленных текущим пользователем
  • ➕ Добавление нового события
  • ℹ️ Получение полной информации о событии, добавленном текущим пользователем
  • ✏️ Изменение события, добавленного текущим пользователем
  • ❌ Отмена события, добавленного текущим пользователем

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

  • 📋 Получение информации о заявках пользователя на участие в чужих событиях
  • ℹ️ Получение информации о запросах на участие в событии текущего пользователя
  • ✅ Подтверждение чужой заявки на участие в событии текущего пользователя
  • ❌ Отклонение чужой заявки на участие в событии текущего пользователя
  • ❌ Отмена своего запроса на участие в событии

🎯 Дополнительный функционал (feature_rating_events)

⭐ Рейтинг событий и комментарии

Расширяет основную функциональность приложения, позволяя пользователям:

  • ⭐ Оценивать события по 5-бальной шкале
  • 💬 Оставлять комментарии к событиям (опционально)
  • ❌ Удалять свои оценки
  • 📋 Получать оценки, поставленные одним пользователем (с сортировкой по актуальности)
  • 🔍 Получать оценки по событию с различными вариантами сортировки (новые и полезные, высокий рейтинг, низкий рейтинг)
  • ℹ️ Получать подробную информацию об оценке

⚙️ Техническая реализация

🛠️ Стек технологий

  • Java 21
  • Spring Boot 3.3.0
  • Spring Data JPA
  • PostgreSQL
  • Docker
  • Maven

🏗️ Архитектура

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

  1. Main Service - основной сервис приложения, отвечающий за бизнес-логику работы с событиями, пользователями, категориями и подборками.

  2. Statistics Service - сервис для сбора и анализа статистики посещений, состоящий из трех модулей:

    • stats-server - серверная часть для сохранения и обработки статистики
    • stats-client - клиентская библиотека для взаимодействия с сервером статистики
    • stats-dto - модуль с объектами передачи данных

💾 Модель данных

Основной сервис оперирует следующими сущностями:

  • 👥 Пользователи (Users)
  • 🎫 События (Events)
  • 📚 Категории (Categories)
  • 📌 Подборки событий (Compilations)
  • ✋ Запросы на участие (Participation Requests)
  • ⭐ Оценки и комментарии (Ratings)

Сервис статистики хранит:

  • 📊 Информацию о посещениях эндпоинтов (Endpoint Hits)

🚀 Запуск приложения

Проект упакован в Docker-контейнеры и может быть запущен с помощью Docker Compose:

docker-compose up

После запуска:

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

Подробная документация API доступна в файлах спецификации:

About

Template repository for ExploreWithMe project.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages