From c4b1b89f1ff3ad15d06dfad9a0e0575c22ae032f Mon Sep 17 00:00:00 2001 From: Ashish Trivedi Date: Sun, 19 Jul 2020 22:20:15 +0530 Subject: [PATCH] #1321 --- .../transactionscript/Hotel.java | 32 ++++++++++-- .../TransactionScriptApp.java | 50 +++++++++---------- .../transactionscript/db/HotelDAO.java | 3 +- .../transactionscript/db/HotelDAOImpl.java | 6 +-- 4 files changed, 55 insertions(+), 36 deletions(-) diff --git a/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/Hotel.java b/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/Hotel.java index d991f0f42..17a9512a9 100644 --- a/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/Hotel.java +++ b/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/Hotel.java @@ -1,15 +1,41 @@ package com.ashishtrivedi16.transactionscript; -public class Hotel { +import com.ashishtrivedi16.transactionscript.db.HotelDAOImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; - public void bookRoom(int roomNumber) { +import java.util.Optional; + +public class Hotel { + private static final Logger LOGGER = LoggerFactory.getLogger(TransactionScriptApp.class); + + private HotelDAOImpl hotelDAO; + + public Hotel(HotelDAOImpl hotelDAO) { + this.hotelDAO = hotelDAO; + } + + public void bookRoom(int roomNumber) throws Exception { /* TODO -> Check if room is available - -> Calculate price -> Book the room -> Commit transaction */ + + Optional room = hotelDAO.getById(roomNumber); + + if (!room.isPresent()) { + LOGGER.info(roomNumber + " does not exist"); + } else { + if (room.get().isBooked()) { + LOGGER.info("Room already booked!"); + } else { + Room updateRoomBooking = room.get(); + updateRoomBooking.setBooked(true); + hotelDAO.update(updateRoomBooking); + } + } } public void cancelRoomBooking(int roomNumber) { diff --git a/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/TransactionScriptApp.java b/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/TransactionScriptApp.java index df29c6d09..d218da078 100644 --- a/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/TransactionScriptApp.java +++ b/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/TransactionScriptApp.java @@ -1,15 +1,18 @@ package com.ashishtrivedi16.transactionscript; +import com.ashishtrivedi16.transactionscript.db.CustomException; import com.ashishtrivedi16.transactionscript.db.HotelDAOImpl; import com.ashishtrivedi16.transactionscript.db.RoomSchemaSql; + +import java.sql.SQLException; +import java.util.List; +import javax.sql.DataSource; + +import org.h2.jdbc.JdbcSQLException; import org.h2.jdbcx.JdbcDataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.sql.DataSource; -import java.sql.SQLException; -import java.util.List; - public class TransactionScriptApp { private static final String H2_DB_URL = "jdbc:h2:~/test"; @@ -25,10 +28,24 @@ public class TransactionScriptApp { final var dataSource = createDataSource(); createSchema(dataSource); final var DAO = new HotelDAOImpl(dataSource); + + addRooms(DAO); try (var customerStream = DAO.getAll()) { customerStream.forEach((customer) -> LOGGER.info(customer.toString())); } + Hotel hotel = new Hotel(DAO); + + hotel.bookRoom(1); + hotel.bookRoom(2); + hotel.bookRoom(3); + hotel.bookRoom(4); + hotel.bookRoom(5); + hotel.bookRoom(6); + + hotel.cancelRoomBooking(3); + hotel.cancelRoomBooking(4); + deleteSchema(dataSource); } @@ -40,10 +57,12 @@ public class TransactionScriptApp { } } - private static void createSchema(DataSource dataSource) throws SQLException { + private static void createSchema(DataSource dataSource) throws Exception { try (var connection = dataSource.getConnection(); var statement = connection.createStatement()) { statement.execute(RoomSchemaSql.CREATE_SCHEMA_SQL); + } catch (JdbcSQLException e) { + throw new CustomException(e.getMessage(), e); } } @@ -68,25 +87,4 @@ public class TransactionScriptApp { final var room6 = new Room(6, "Double", 80, false); return List.of(room1, room2, room3, room4, room5, room6); } - - private static void generate(final HotelDAOImpl hotelDAO) throws Exception { -// addRooms(hotelDAO); -// LOGGER.info(ALL_ROOMS); -// try (var customerStream = hotelDAO.getAll()) { -// customerStream.forEach((customer) -> LOGGER.info(customer.toString())); -// } -// LOGGER.info("hotelDAO.getCustomerById(2): " + hotelDAO.getById(2)); -// final var customer = new Room(4, "Dan", "Danson"); -// hotelDAO.add(customer); -// LOGGER.info(ALL_ROOMS + hotelDAO.getAll()); -// customer.setFirstName("Daniel"); -// customer.setLastName("Danielson"); -// hotelDAO.update(customer); -// LOGGER.info(ALL_ROOMS); -// try (var customerStream = hotelDAO.getAll()) { -// customerStream.forEach((cust) -> LOGGER.info(cust.toString())); -// } -// hotelDAO.delete(customer); -// LOGGER.info(ALL_ROOMS + hotelDAO.getAll()); - } } diff --git a/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/db/HotelDAO.java b/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/db/HotelDAO.java index 76b577f72..d7a763862 100644 --- a/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/db/HotelDAO.java +++ b/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/db/HotelDAO.java @@ -2,7 +2,6 @@ package com.ashishtrivedi16.transactionscript.db; import com.ashishtrivedi16.transactionscript.Room; -import java.sql.SQLException; import java.util.Optional; import java.util.stream.Stream; @@ -12,7 +11,7 @@ public interface HotelDAO { public Optional getById(int id) throws Exception; - public Boolean add(Room room) throws SQLException, Exception; + public Boolean add(Room room) throws Exception; public Boolean update(Room room) throws Exception; diff --git a/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/db/HotelDAOImpl.java b/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/db/HotelDAOImpl.java index f4cfcc276..c4a18633c 100644 --- a/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/db/HotelDAOImpl.java +++ b/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/db/HotelDAOImpl.java @@ -1,9 +1,6 @@ package com.ashishtrivedi16.transactionscript.db; import com.ashishtrivedi16.transactionscript.Room; -import com.ashishtrivedi16.transactionscript.TransactionScriptApp; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import javax.sql.DataSource; import java.sql.Connection; @@ -19,7 +16,6 @@ import java.util.stream.StreamSupport; public class HotelDAOImpl implements HotelDAO { - private static final Logger LOGGER = LoggerFactory.getLogger(TransactionScriptApp.class); private final DataSource dataSource; public HotelDAOImpl(DataSource dataSource) { @@ -89,7 +85,7 @@ public class HotelDAOImpl implements HotelDAO { } try (var connection = getConnection(); - var statement = connection.prepareStatement("INSERT INTO ROOMS VALUES (?,?,?)")) { + var statement = connection.prepareStatement("INSERT INTO ROOMS VALUES (?,?,?,?)")) { statement.setInt(1, room.getId()); statement.setString(2, room.getRoomType()); statement.setInt(3, room.getPrice());