@Dima_gogi_ya
Начинающий гений-программист

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

Ребят, пишу значит приложение по бронированию номеров в отеле. Сейчас пишу сервисную часть, и понимаю, что мне на это не хватает фантазии. Есть класс комнат и класс с резервацией, а так-же DTOшки к ним, теперь мне нужно написать примерно такой код: если в коллекции есть комната X, проверить, есть ли промежуток дат (timestamp) от A1 до A2.
Фишка в том, что я приблизительно понимаю что делать и в то же время не знаю, как это написать. За меня не нужно писать код, объясните как я должен его написать
import lombok.Data;

import javax.persistence.*;
import java.util.Date;
import java.util.List;
import java.util.Set;

@Entity
@Table(name = "room")
@Data
public class RoomEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;
    String number;
    int persons;

    @OneToMany(mappedBy = "roomEntity", fetch = FetchType.LAZY)
    List<ReservationEntity> reservationEntitySet;


    @ManyToMany(mappedBy = "roomEntityList", fetch = FetchType.EAGER)
    List<FacilitiesEntity>facilitiesEntityList;
}

import lombok.Data;

import javax.persistence.*;
import java.sql.Timestamp;

@Entity
@Table(name = "reserved")
@Data
public class ReservationEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;
    Timestamp checkFrom;
    Timestamp checkTo;
    int persons;

    @ManyToOne(targetEntity = RoomEntity.class, fetch = FetchType.LAZY)
    RoomEntity roomEntity;

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    UserEntity userEntity;

}
  • Вопрос задан
  • 1490 просмотров
Пригласить эксперта
Ответы на вопрос 1
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);


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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы