• Как создать сервис бронирования на java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Я как-то раз писал сервис по бронированию номеров отелей. Это реальный проект или учебный?
    Если реальный проект, то посмотрите в сторону использования 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);


    Несколько аспектов, на которые вам нужно обратить внимание:
    - также нужно проверить номер на занятость. Т.е. если у вас есть резервация на указанную дату, то не бронировать номер.
    - Если номер не найдет, то выбросить исключение и т.д.
    Ответ написан
    Комментировать