/java-explore-with-me

Template repository for ExploreWithMe project.

Primary LanguageJava

java-explore-with-me

Это репозиторий проекта ExploreWithMe.

Приложение это два сервиса:

  1. Основной сервис содержит всё необходимое для работы продукта.
    • API основного сервиса разделено на три части:
      1. публичная будет доступна без регистрации любому пользователю сети;
      2. закрытая будет доступна только авторизованным пользователям;
      3. административная — для администраторов сервиса.
  2. Сервис статистики будет хранить количество просмотров и позволит делать различные выборки для анализа работы приложения.
    • Функционал сервиса статистики содержит:
      1. запись информации о том, что был обработан запрос к эндпоинту API;
      2. предоставление статистики за выбранные даты по выбранному эндпоинту

Публичный API предоставляет возможность поиска и фильтрации событий:

  1. Поиск событий выдаёт только опубликованные события, возможности поиска:
    • сортировка списка событий организована по датам событий или по количеству просмотров;
    • в запросе пользователь может указать:
      1. диапазон дат rangeStart-rangeEnd, если он не указан, то выгружаются события, которые произойдут позже текущей даты и времени;
      2. возможен текстовый поиск по аннотациям или подробному описанию;
    • при просмотре списка событий показывается только краткая информация о мероприятиях включающая в себя: количество просмотров и количество уже одобренных заявок на участие;
    • возможен поиск событий по их рейтингу с сортировкой по количеству лайков/дизлайков;
    • если по заданным фильтрам не найдено ни одного события, возвращает пустой список.
  2. Поиск подробной информации об опубликованном событии по его идентификатору;
  3. Получение всех категорий;
  4. Получение подборок событий.

Описание закрытого API для авторизованных пользователей:

  1. пользователи могут добавлять в приложение новые мероприятия, редактировать их и просматривать после добавления;
  2. пользователи могут подавать заявки на участия в интересующих мероприятиях;
  3. создатель мероприятия может подтвердить или отклонить заявки, которые отправили другие пользователи сервиса;
  4. пользователи могут оценивать прошедшие события, создатель события не может оценивать созданное события, каждый пользователь может оценить событие только один раз;
  5. пользователь может удалить свою оценку;
  6. пользователь может запросить рейтинг прошедшего события или рейтинг пользователя создавшего мероприятие.

Описание административного API:

  1. администраторы могут добавлять, изменять и удалять категории для событий;
  2. администраторы могут добавлять, удалять и закреплять на главной странице подборки мероприятий;
  3. администраторы осуществляют модерацию событий, размещённых пользователями, — публикация или отклонение;
  4. администраторы управляют пользователями — добавляют, активируют, просматривают и удаляют.

Жизненный цикл события включает в себя несколько этапов:

  1. Создание.
  2. Ожидание публикации. В статус ожидания публикации событие переходит сразу после создания.
  3. Публикация. В это состояние событие переводит администратор.
  4. Отмена публикации. В это состояние событие переходит в двух случаях. Первый — если администратор решил, что его нельзя публиковать. Второй — когда инициатор события решил отменить его на этапе ожидания публикации.

Для хранения данных приложение использует базу данных PostgreSQL, каждый сервис использует свою БД.

Приложение написано на Java. Пример кода:

@SpringBootApplication
public class EwmService {
   public static void main(String[] args) {
      SpringApplication.run(EwmService.class, args);
   }
}

@SpringBootApplication
public class StatsServer {
   public static void main(String[] args) {
      SpringApplication.run(StatsServer.class, args);
   }
}

Пример внешнего вида приложения "ExploreWithMe" Пример внешнего вида приложения "ExploreWithMe"

Pull requests: https://github.com/BezuglovMikhail/java-explore-with-me/pulls


О том, как научиться создавать такие приложения, можно узнать в Яндекс-Практикуме