Приложение использует слудющие технологии:
- Java version 11
- Spring Boot (web, validation, data-jpa)
- Maven
- используемая БД - PostgreSQL
- Docker
- Lombok
- Json-Simple
- тестирование Postman коллекцией
Приложение разделено на 2 сервера, общающихся между собой по API:
- main (обрабатывает запросы от пользователя и все бизнес логика)
- stats (собирает статистику http запросов к main сервису)
Так же приложение обращается к внешему серверу (Яндекс.Карты) посредствам API для получение информации о локации мероприятия по ее координатам (!) Если данный функциона не работает, необходимо обновить подписку API Яндекс.Карты
Инструкция по развертыванию приложения:
Так как проект разработан для развертывания на удаленном сервере, запуск его настроен через Docker. В файле docker-compose.yml прописаны инструкции для приложения по развертыванию и запуску как серверов, так и необходим БД к ним. Перед запуском убедится что Maven собрал необходимые компоненты, если нет, то произвести clean - package. Дале сформировать Image в Docker, можно как при помощи средств IDEA (перейти в файл docker-compose.yml и запустить) или через командную строку, переместившись в нужную директорию и выполнить команды docker-compose build и docker-compose up. После чего будут собраны Image, на их основе созданы и запущены соответствующие контейнеры.
Ниже приведены эндпоинты и кратное описаних их функционала:
- создания пользователем учетной записи от имини администратора. (POST "/admin/users")
- получение списка всех зарегистрированных пользователей администратиором. (GET "/admin/users?from&size")
- удаление пользователя администратором по его id (DELETE "/admin/users/{userId}")
- добавление новой категории мероприятия от имени администратора (POST "/admin/categories")
- удаление категории мероприятия по ее id от имени администратора (DELETE "/admin/categories/{catId}")
- обновления данных о категории мероприятия от имени администратора (PATCH "/admin/categories/{catId}")
- получение списка доступных категорий мероприятий от пользователя (GET "/categories?from&size")
- получение данных о конкретной категории пероприятия по ее id от пользователя (GET "/categories/{catId}")
- поиск мероприятий по заданным параметрам GET "/events?text&categories&paid&rangeStart&rangeEnd&onlyAvailable&sort&from&size"), таким как:
- описание мероприятия, по ключевым слова (text)
- по категориям мероприятий (categoriesId)
- плата за вход (paid)
- временной интервал поиска мероприятия (rangeStart, rangeEnd)
- доступно ли мероприятия, не исчерпан ли лимит заявок на участие (onlyAvailable)
- пагинация, вывод количества удовлетворяющий параметрам поиска мероприятий (from, size)
- получение информации о конкретном мероприятии по его id (GET "/events/{id}")
- получение списка мероприятий, созданных конкретным пользователем (GET "/users/{userId}/events?from&size")
- запрос на создание мероприятия от пользователя, требующее подтверждения администратором (POST "/users/{userId}/events")
- получение подробной информации о мероприятии по ее id от ползьмователя (GET "/users/{userId}/events/{eventId}")
- запрос на обновлене информации о мероприятии от пользователя (PATCH "/users/{userId}/events/{eventId}")
- получение информации о запросах пользователя на участие в мероприятии (GET "/users/{userId}/events/{eventId}/requests")
- запрос на обновление информации о заявке на участие в событии (PATCH "/users/{userId}/events/{eventId}/requests")
- получение списка мероприятий от администратора по параметрам (GET "/admin/events?users&states&categories&rangeStart&rangeEnd&from&size")
- обновление информации о мероприятии от имени администратора (PATCH "/admin/events/{eventId}")
- создание локации администратором по ее координатам (POST "/admin/location?lat&lon")
- получение информации о всех созданных локациях от администратора (GET "/admin/location")
- поиск мероприя по ее местопроведению и дате (GET "/events/location?locationText&rangeStart&rangeEnd&from&size")
- получение подборки мероприятий (GET "/compilations?pinned&from&size")
- получение подборки мероприятий по id (GET "/compilations/{compId}")
- создание подборки мероприятий администратором (POST "/admin/compilations")
- удаление подборки мероприятий администратором (DELETE "/admin/compilations/{compId}")
- обновление информации о подборке от администратора (PATCH "/admin/compilations/{compId}")
- получение информации о заявказ пользователя на участие в чужых событиях (GET "/users/{userId}/requests")
- создание запроса от пользователя на участие в событии (POST "/users/{userId}/requests?userId&eventId")
- отмена запроса на участие в событии от пользователя (PATCH "/users/{userId}/requests/{requestId}/cancel")
Для тестирования данного приложения к корневой папке проекта имееста Postman коллекция.txt
