Добрый день!
Я как-то раз писал сервис по бронированию номеров отелей. Это реальный проект или учебный?
Если реальный проект, то посмотрите в сторону использования API Hotelbeds или GoGlobal.
Рекомендую Hotelbeds. У них в тестовом режиме доступно до 50 запросов в сутки, а в препродакшн неограниченное кол-во запросов. Правда, нужно заплатить сумму 3-4К у.е. и рассказать про деятельность (b2b, b2c) и т.д.
Если учебный проект, то тут зависит от того в каком объеме вы хотите реализовать вашу задачу.
Например, для поиска можно подключить Hibernate Search или ElasticSearch, а можно обойтись простым sql запросом.
Есть класс комнат и класс с резервацией, а так-же DTOшки к ним, теперь мне нужно написать примерно такой код: если в коллекции есть комната X, проверить, есть ли промежуток дат (timestamp) от A1 до A2.
Фишка в том, что я приблизительно понимаю что делать и в то же время не знаю, как это написать.
Как вы и сказали, код писать не буду, но расскажу примерно, как это можно сделать. Предположим, что есть некий контроллер, метод которого принимает некий DTO состоящий из: номера комнаты (roomNum), а также 2-х дат (from & to).
Далее вы передаете этот DTO на уровень сервисного слоя и обрабатываете. Далее вам необходимо на уровне репозитория написать метод, который ищет по вхождению даты.
Вот, похожий вопрос:
https://stackoverflow.com/questions/39784344/check...
Вот, примеры кода:
findAllByStartDateLessThanEqualAndEndDateGreaterThanEqual(OffsetDateTime endDate, OffsetDateTime startDate);
или:
@Query(value = "from EntityClassTable t where yourDate BETWEEN :startDate AND :endDate")
public List<EntityClassTable> getAllBetweenDates(@Param("startDate")Date startDate,@Param("endDate")Date endDate);
Несколько аспектов, на которые вам нужно обратить внимание:
- также нужно проверить номер на занятость. Т.е. если у вас есть резервация на указанную дату, то не бронировать номер.
- Если номер не найдет, то выбросить исключение и т.д.