package com.ashishtrivedi16.transactionscript; import java.util.Optional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Hotel { private static final Logger LOGGER = LoggerFactory.getLogger(TransactionScriptApp.class); private HotelDaoImpl hotelDao; public Hotel(HotelDaoImpl hotelDao) { this.hotelDao = hotelDao; } /** * Book a room. * * @param roomNumber room to book * @throws Exception if any error */ public void bookRoom(int roomNumber) throws Exception { Optional room = hotelDao.getById(roomNumber); if (room.isEmpty()) { throw new Exception("Room number: " + roomNumber + " does not exist"); } else { if (room.get().isBooked()) { throw new Exception("Room already booked!"); } else { Room updateRoomBooking = room.get(); updateRoomBooking.setBooked(true); hotelDao.update(updateRoomBooking); } } } /** * Cancel a room booking. * * @param roomNumber room to cancel booking * @throws Exception if any error */ public void cancelRoomBooking(int roomNumber) throws Exception { Optional room = hotelDao.getById(roomNumber); if (room.isEmpty()) { throw new Exception("Room number: " + roomNumber + " does not exist"); } else { if (room.get().isBooked()) { Room updateRoomBooking = room.get(); updateRoomBooking.setBooked(false); int refundAmount = updateRoomBooking.getPrice(); hotelDao.update(updateRoomBooking); LOGGER.info("Booking cancelled for room number: " + roomNumber); LOGGER.info(refundAmount + " is refunded"); } else { throw new Exception("No booking for the room exists"); } } } }