java-explore-with-me
📌 Языки и инструменты:
Свободное время — ценный ресурс. Ежедневно мы планируем, как его потратить — куда и с кем сходить. Сложнее всего в таком планировании поиск информации и переговоры. Нужно учесть много деталей: какие намечаются мероприятия, свободны ли в этот момент друзья, как всех пригласить и где собраться.
Разработанное приложение — афиша. В этой афише можно предложить какое-либо событие от выставки до похода в кино и собрать компанию для участия в нём.
Два сервиса: Основной сервис содержит всё необходимое для работы продукта; сервис статистики будет хранить количество просмотров и позволит делать различные выборки для анализа работы приложения.
Основной сервис
API основного сервиса разделите на три части:
- публичная будет доступна без регистрации любому пользователю сети;
- закрытая будет доступна только авторизованным пользователям;
- административная — для администраторов сервиса.
К каждой из частей есть свои требования. Рассмотрим их.
Публичный API
Публичный предоставляет возможности поиска и фильтрации событий:
- Сортировка списка событий организована либо по количеству просмотров, которое будет запрашиваться в сервисе статистики, либо по датам событий;
- при просмотре списка событий возвращается только краткая информация о мероприятиях;
- просмотр подробной информации о конкретном событии можно просмотреть отдельно (через отдельный эндпоинт);
- каждое событие относится к какой-то из закреплённых в приложении категорий;
- также есть возможность получения всех имеющихся категорий и подборок событий (такие подборки будут составлять администраторы ресурса);
- каждый публичный запрос для получения списка событий или полной информации о мероприятии фиксируется сервисом статистики.
API для авторизованных пользователей
Закрытая часть API реализует возможности зарегистрированных пользователей продукта.
- авторизованные пользователи имеют возможность добавлять в приложение новые мероприятия, редактировать их и просматривать после добавления;
- настроена подача заявок на участие в интересующих мероприятиях;
- создатель мероприятия имеет возможность подтверждать заявки, которые отправили другие пользователи сервиса.
- участник мероприятия может оставлять комментарии к событию, организатор событий может отвечать.
API для администратора
Административная часть API предоставляет возможности настройки и поддержки работы сервиса.
- настроено добавление, изменение и удаление категорий для событий;
- есть возможность добавлять, удалять и закреплять на главной странице подборки мероприятий;
- налажена модерацию событий, размещённых пользователями, — публикация или отклонение;
- также настроено управление пользователями — добавление, активация, просмотр и удаление.
- модерация комментариев.
Сервис статистики
Второй сервис — сервис статистики. Он будет собирать информацию. Во-первых, о количестве обращений пользователей к спискам событий и, во-вторых, о количестве запросов к подробной информации о событии. На основе этой информации должна формироваться статистика о работе приложения.
Функционал сервиса статистики содержат:
- запись информации о том, что был обработан запрос к эндпоинту API;
- предоставление статистики за выбранные даты по выбранному эндпоинту. Чтобы можно было использовать сервис статистики, разработан HTTP-клиент. Он отправляет запросы и обрабатывает ответы.
Спецификация API
Для обоих сервисов разработана подробная спецификация API:
- спецификация основного сервиса: ewm-main-service-spec.json;
- спецификация сервиса статистики: ewm-stats-service.json
Хранение данных
Хранение данных организованно по сервисам с использованием базы данных PostgreSQL.
StatsService
Таблица ENDPOINT_HIT:
- id - PRIMARY KEY AUTO INCREMENT
- app
- uri
- ip
- time_stamp
EwmService + Feature_Comments
Таблица USERS
- id - PRIMARY KEY AUTO INCREMENT
- name
Таблица CATEGORIES
- id - PRIMARY KEY AUTO INCREMENT
- name
Таблица EVENTS
- id - PRIMARY KEY AUTO INCREMENT
- annotation
- category_id - FOREIGN KEY (CATEGORIES)
- confirmed_requests
- created_on
- description
- event_date
- initiator_id - FOREIGN KEY (USERS)
- lat
- lon
- paid
- participant_limit
- published_on
- request_moderation
- state
- title
- views
- state_action
Таблица REQUESTS
- id - PRIMARY KEY AUTO INCREMENT
- created
- event_id - FOREIGN KEY (EVENTS)
- requester_id - FOREIGN KEY (USERS)
- status
Таблица COMPILATIONS
- id - PRIMARY KEY AUTO INCREMENT
- pinned
- title
Таблица EVENTS_COMPILATIONS
- id - PRIMARY KEY AUTO INCREMENT
- compilation_id - FOREIGN KEY (COMPILATIONS)
- event_id - FOREIGN KEY (EVENTS)
Таблица COMMENTS
- id - PRIMARY KEY AUTO INCREMENT
- comment_line
- user_id - FOREIGN KEY (USERS)
- event_id - FOREIGN KEY (EVENTS)
- created