D
D
Dmitry Volokitin2021-03-05 10:03:57
Java
Dmitry Volokitin, 2021-03-05 10:03:57

How to create a booking service in java?

Guys, I'm writing an application for booking hotel rooms. Now I am writing the service part, and I understand that I do not have enough imagination for this. There is a class of rooms and a class with a reservation, as well as DTOs for them, now I need to write something like this code: if the collection has a room X, check if there is a date interval (timestamp) from A1 to A2.
The trick is that I roughly understand what to do and at the same time I don’t know how to write it. You do not need to write code for me, explain how I should write it

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;

}

Answer the question

In order to leave comments, you need to log in

1 answer(s)
Орхан Гасанлы, 2021-03-05
@azerphoenix Куратор тега Java

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

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

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question