Skip to content

KonneyJ/java-explore-with-me

Repository files navigation

Java-explore-with-me

Афиша мероприятий

Java, Spring Boot, Spring JPA, JDBC, PostgreSQL, REST API, Maven, Docker, JUnit, Mockito, Lombok

Бэкенд для многомодульного сервиса, который позволит пользователям делиться информацией об интересных событиях и находить компанию для участия в них. В этой афише можно предложить какое-либо событие от выставки до похода в кино и собрать компанию для участия в нём.

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

Приложение содержит 2 микросервиса

  • Main-service - содержит основную бизнес-логику
  • Stat-service - осуществляет сбор статистики просмотров событий

Сервис статистики в свою очередь состоит из 3 модулей:

  • Модуль клиента сервиса статистики
  • Модуль общих DTO
  • Модуль сервиса статистики

Каждый микросервис имеет свою базу данных. Микросервисы и БД запускаются в собственных Docker контейнерах.

Функционал приложения

API основного сервиса разделено на 3 части:

  • public - доступна без регистрации любому пользователю сети
  • private - доступна только авторизованным пользователям
  • admin — для администраторов сервиса

Public API:

  • Просмотр списка событий, категорий и подборок событий
  • Фиксация информации о просмотре события или списка событий сервисом статистики
  • Сортировка списка событий по количеству просмотров либо по датам событий

Private API:

  • Добавление в приложение новых мероприятий, редактирование их и просмотр после добавления
  • Подача заявок на участие в интересующих мероприятиях
  • Подтверждение/отклонение заявок на участие организатором мероприятия

Admin API:

  • Добавление, изменение и удаление категорий для событий
  • Добавление, удаление и закрепление на главной странице подборок мероприятий
  • Модерация событий, размещённых пользователями, — публикация или отклонение
  • Управление пользователями — добавление, просмотр и удаление

API сервиса статистики:

  • запись информации о том, что был обработан запрос к эндпоинту API
  • предоставление статистики за выбранные даты

REST API Endpoints

Main-service

User Admin Controller

Метод Endpoint Описание
GET /admin/users Просмотр списка всех пользователей
POST /admin/users Регистрация пользователя
DELETE /admin/users/{userId} Удаление профиля пользователя

Category Admin Controller

Метод Endpoint Описание
POST /admin/categories Создание категории
DELETE /admin/categories/{catId} Удаление категории
PATCH /admin/categories/{catId} Редактирование категории

Category Public Controller

Метод Endpoint Описание
GET /categories Просмотр всех категорий
GET /categories/{catId} Просмотр категории по идентификатору

Event Admin Controller

Метод Endpoint Описание
GET /admin/events Просмотр списка всех мероприятий
PATCH /admin/events/{eventId} Модерация события

Event Public Controller

Метод Endpoint Описание
GET /events Просмотр списка всех мероприятий
GET /events/{id} Просмотр мероприятия по идентификатору

Event Private Controller

Метод Endpoint Описание
GET /users/{userId}/events Просмотр списка всех мероприятий пользователя
GET /users/{userId}/events/{eventId} Просмотр события по идентификатору
POST /users/{userId}/events Добавление мероприятия
PATCH /users/{userId}/events/{eventId} Редактирование события
GET /users/{userId}/events/{eventId}/requests Просмотр всех заявок на мероприятие
PATCH /users/{userId}/events/{eventId}/requests Подтверждение/отклонение заявки на мероприятие

Compilation Admin Controller

Метод Endpoint Описание
POST /admin/compilations Создание подборки событий
PATCH /admin/compilations/{compId} Редактирование подборки событий
DELETE /admin/compilations/{compId} Удаление подборки событий

Compilation Public Controller

Метод Endpoint Описание
GET /compilations Просмотр всех подборок событий
GET /compilations/{compId} Просмотр подборки событий по идентификатору

Request Private Controller

Метод Endpoint Описание
POST /users/{userId}/requests Создание заявки на участие в мероприятии
GET /users/{userId}/requests Просмотр всех заявок пользователя
PATCH /users/{userId}/requests/{requestId}/cancel Отмена заявки на участие в мероприятии

Stat-service

Stats Controller

Метод Endpoint Описание
POST /hit Сохранение информации о просмотре события
GET /stats Получение статистики по просмотрам

Реализация дополнительной функциональности: likes

Like Private Controller

Метод Endpoint Описание
POST /users/{userId}/events/{eventId}/likes Добавление лайка событию
DELETE /users/{userId}/events/{eventId}/likes/{likeId} Удаление лайка
PATCH /users/{userId}/events/{eventId}/likes/{likeId} Редактирование лайка
GET /users/{userId}/events/{eventId}/likes/{likeId} Получение лайка по идентификатору
GET /users/{userId}/likes Получение всех лайков пользователя
GET /users/{userId}/events/{eventId}/likes Получение всех лайков события

Логика

  • Нельзя ставить лайк своему событию
  • Лайк можно поставить только посещенному мероприятию
  • Лайк можно поставить только через 3 часа после начала мероприятия
  • Лайк можно поставить только опубликованному событию
  • Удалять/обновлять лайки могут только пользователи, которые их поставили
  • Нет ограничений на время редактирования лайка
  • Лайк может посмотреть либо человек, который его поставил, либо владелец события
  • Посмотреть все лайки может только владелец события

About

Template repository for ExploreWithMe project.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published