Skip to content

Latest commit

 

History

23 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Хотелось бы озвучить пару моментов

Ветка master содержит проект, в котором выполнена адаптация под SQL и NOSQL базы данных. (быстрое переключение из конфига)

Основной проект, который ориентирован только на реляционные базы данных -> в ветке standalone.

Для переключение между бд, необходимо настроить данные для подключения в application.properties, а также выбрать профиль: spring.profiles.active=nosql/sql.

Пожалуйста, смотрите на даты коммитов, ибо много клонов и уник.просмотров, судя по статистике гита :D.


Решена проблема 1+n для GET /hotels (через JPQL) и GET /hotels/search (через CriteriaApi, следующий пункт).


Для поиска отелей/гостиниц был использован CriteriaApi, что позволяет выполнять поиск по одному или сразу по нескольким параметрам: /search?city=minsk&country=Belarus. Также можно искать по множеству Amenities /search?amenities=Free_WIFI,Free_PARKING.

Исключение -> MongoDB реализация, где CriteriaApi позволяет использовать только 1 критерий для каждого поля. Но он все еще поддерживает поиск по разным параметрам одновременно.


Для /histogram/{param} в HistogramDAO был написан кастомный запрос. (для SQL это запросы на HQL, для NOSQL - запросы с использованием CriteriaApi).


При GET /hotels/{id} с неверным id возвращается пустой результат (в связи с введенным замечанием), изначально такое действие пробрасывало ошибку с сообщением (закомментированно).


Чтобы избежать нагруженности кода, часть аннатоций контроллера была вынесена в интерфейсы. Там же описаны и аннотации к Swagger.


Конвертация сущностей в DTO объекты (и обратно) происходит с помощью класса HotelMapper, которому с конвертацией помогает ModelMapper.


Судя по примеру телу ответа в ТЗ, в роли entity существуют Address, Contacts и ArravalTime. Поэтому в проекте они реализованы как сущности.

Amenities - просто массив/список строк. Также по своей логике, Amenities, или "Теги", будут "стандартизированы" (т.к. мы планируем делать групповую статистику, то очевидно что пользователь не сможет "вручную" вводить имена Amenities ), поэтому в проекте они представлены в виде Enum. (enum в бд - зло, поэтому делаем колонку amenity типа varchar, а не enum)


При запросе списка всех отелей/гостиниц GET /hotels и в поиске GET /hotels/search отсутствует пагинация (следуя ТЗ), хотя полученный список может быть достаточно объемным.


По ТЗ, список Amenities можно только заменить, но не изменить. В перспективе я бы добавил возможность удалять\добавлять теги.


About

REST Api app with adaptive DB selection (sql/nosql fast switch)

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages