diff --git a/dao/src/main/java/com/iluwatar/dao/module-info.java b/dao/src/main/java/module-info.java
similarity index 100%
rename from dao/src/main/java/com/iluwatar/dao/module-info.java
rename to dao/src/main/java/module-info.java
diff --git a/transaction-script/pom.xml b/transaction-script/pom.xml
index 3fc06ca51..bf2811994 100644
--- a/transaction-script/pom.xml
+++ b/transaction-script/pom.xml
@@ -1,6 +1,6 @@
-
java-design-patterns
@@ -15,14 +15,14 @@
com.h2database
h2
- 1.4.200
- test
+
com.h2database
h2
+ 1.4.200
+ test
-
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 17a9512a9..c459c32d5 100644
--- a/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/Hotel.java
+++ b/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/Hotel.java
@@ -1,51 +1,66 @@
package com.ashishtrivedi16.transactionscript;
-import com.ashishtrivedi16.transactionscript.db.HotelDAOImpl;
+import com.ashishtrivedi16.transactionscript.db.HotelDaoImpl;
+import java.util.Optional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.Optional;
-
public class Hotel {
- private static final Logger LOGGER = LoggerFactory.getLogger(TransactionScriptApp.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(TransactionScriptApp.class);
- private HotelDAOImpl hotelDAO;
+ private HotelDaoImpl hotelDao;
- public Hotel(HotelDAOImpl hotelDAO) {
- this.hotelDAO = 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()) {
+ 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 bookRoom(int roomNumber) throws Exception {
- /*
- TODO
- -> Check if room is available
- -> Book the room
- -> Commit transaction
- */
+ /**
+ * 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);
+ 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) {
- /*
-
- TODO
- -> Check if room is booked
- -> Calculate refund price
- -> Cancel the room booking
- -> Commit transaction
- */
+ if (room.isEmpty()) {
+ LOGGER.info("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 {
+ LOGGER.info("No booking for the room exists");
+ }
}
+ }
}
diff --git a/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/Room.java b/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/Room.java
index bf8b1ccf7..55a93ddec 100644
--- a/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/Room.java
+++ b/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/Room.java
@@ -1,80 +1,100 @@
package com.ashishtrivedi16.transactionscript;
+/**
+ * A room POJO that represents the data that will be read from the data source.
+ */
public class Room {
- private int id;
- private String roomType;
- private int price;
- private boolean booked;
+ private int id;
+ private String roomType;
+ private int price;
+ private boolean booked;
- public Room(int id, String roomType, int price, boolean booked) {
- this.id = id;
- this.roomType = roomType;
- this.price = price;
- this.booked = booked;
+ /**
+ * Create an instance of room.
+ * @param id room id
+ * @param roomType room type
+ * @param price room price
+ * @param booked room booking status
+ */
+ public Room(int id, String roomType, int price, boolean booked) {
+ this.id = id;
+ this.roomType = roomType;
+ this.price = price;
+ this.booked = booked;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getRoomType() {
+ return roomType;
+ }
+
+ public void setRoomType(String roomType) {
+ this.roomType = roomType;
+ }
+
+ public int getPrice() {
+ return price;
+ }
+
+ public void setPrice(int price) {
+ this.price = price;
+ }
+
+ public boolean isBooked() {
+ return booked;
+ }
+
+ public void setBooked(boolean booked) {
+ this.booked = booked;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
}
- public int getId() {
- return id;
+ Room room = (Room) o;
+
+ if (id != room.id) {
+ return false;
}
-
- public void setId(int id) {
- this.id = id;
+ if (price != room.price) {
+ return false;
}
-
- public String getRoomType() {
- return roomType;
+ if (booked != room.booked) {
+ return false;
}
+ return roomType.equals(room.roomType);
+ }
- public void setRoomType(String roomType) {
- this.roomType = roomType;
- }
+ @Override
+ public int hashCode() {
+ int result = id;
+ result = 31 * result + roomType.hashCode();
+ result = 31 * result + price;
+ result = 31 * result + (booked ? 1 : 0);
+ return result;
+ }
- public int getPrice() {
- return price;
- }
-
- public void setPrice(int price) {
- this.price = price;
- }
-
- public boolean isBooked() {
- return booked;
- }
-
- public void setBooked(boolean booked) {
- this.booked = booked;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- Room room = (Room) o;
-
- if (id != room.id) return false;
- if (price != room.price) return false;
- if (booked != room.booked) return false;
- return roomType == room.roomType;
- }
-
- @Override
- public int hashCode() {
- int result = id;
- result = 31 * result + roomType.hashCode();
- result = 31 * result + price;
- result = 31 * result + (booked ? 1 : 0);
- return result;
- }
-
- @Override
- public String toString() {
- return "Room{" +
- "id=" + id +
- ", roomType=" + roomType +
- ", price=" + price +
- ", booked=" + booked +
- '}';
- }
+ @Override
+ public String toString() {
+ return "Room{"
+ + "id=" + id
+ + ", roomType=" + roomType
+ + ", price=" + price
+ + ", booked=" + booked
+ + '}';
+ }
}
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 d218da078..c04306a18 100644
--- a/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/TransactionScriptApp.java
+++ b/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/TransactionScriptApp.java
@@ -1,13 +1,11 @@
package com.ashishtrivedi16.transactionscript;
import com.ashishtrivedi16.transactionscript.db.CustomException;
-import com.ashishtrivedi16.transactionscript.db.HotelDAOImpl;
+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;
@@ -15,76 +13,96 @@ import org.slf4j.LoggerFactory;
public class TransactionScriptApp {
- private static final String H2_DB_URL = "jdbc:h2:~/test";
- private static final Logger LOGGER = LoggerFactory.getLogger(TransactionScriptApp.class);
- private static final String ALL_ROOMS = "customerDao.getAllRooms(): ";
+ private static final String H2_DB_URL = "jdbc:h2:~/test";
+ private static final Logger LOGGER = LoggerFactory.getLogger(TransactionScriptApp.class);
+ private static final String ALL_ROOMS = "customerDao.getAllRooms(): ";
- public static void main(String[] args) throws Exception {
+ /**
+ * Program entry point.
+ *
+ * @param args command line arguments
+ * @throws Exception if any error occurs
+ */
+ public static void main(String[] args) throws Exception {
- /*
- TODO
- -> Create in memory database and some sample tables for demo
- */
- final var dataSource = createDataSource();
- createSchema(dataSource);
- final var DAO = new HotelDAOImpl(dataSource);
+ final var dataSource = createDataSource();
+ deleteSchema(dataSource);
+ createSchema(dataSource);
+ final var dao = new HotelDaoImpl(dataSource);
+ addRooms(dao);
- addRooms(DAO);
- try (var customerStream = DAO.getAll()) {
- customerStream.forEach((customer) -> LOGGER.info(customer.toString()));
- }
+ getRoomStatus(dao);
- Hotel hotel = new Hotel(DAO);
+ Hotel hotel = new Hotel(dao);
- hotel.bookRoom(1);
- hotel.bookRoom(2);
- hotel.bookRoom(3);
- hotel.bookRoom(4);
- hotel.bookRoom(5);
- hotel.bookRoom(6);
+ hotel.bookRoom(1);
+ hotel.bookRoom(2);
+ hotel.bookRoom(3);
+ hotel.bookRoom(4);
+ hotel.bookRoom(5);
+ hotel.bookRoom(6);
- hotel.cancelRoomBooking(3);
- hotel.cancelRoomBooking(4);
+ hotel.cancelRoomBooking(1);
+ hotel.cancelRoomBooking(3);
+ hotel.cancelRoomBooking(5);
- deleteSchema(dataSource);
+ getRoomStatus(dao);
+ deleteSchema(dataSource);
+
+ }
+
+ private static void getRoomStatus(HotelDaoImpl dao) throws Exception {
+ try (var customerStream = dao.getAll()) {
+ customerStream.forEach((customer) -> LOGGER.info(customer.toString()));
}
+ }
- private static void deleteSchema(DataSource dataSource) throws SQLException {
- try (var connection = dataSource.getConnection();
- var statement = connection.createStatement()) {
- statement.execute(RoomSchemaSql.DELETE_SCHEMA_SQL);
- }
+ private static void deleteSchema(DataSource dataSource) throws SQLException {
+ try (var connection = dataSource.getConnection();
+ var statement = connection.createStatement()) {
+ statement.execute(RoomSchemaSql.DELETE_SCHEMA_SQL);
}
+ }
- 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);
- }
+ 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);
}
+ }
- public static DataSource createDataSource() {
- JdbcDataSource dataSource = new JdbcDataSource();
- dataSource.setUrl(H2_DB_URL);
- return dataSource;
- }
+ /**
+ * Get database.
+ *
+ * @return h2 datasource
+ */
+ public static DataSource createDataSource() {
+ JdbcDataSource dataSource = new JdbcDataSource();
+ dataSource.setUrl(H2_DB_URL);
+ return dataSource;
+ }
- private static void addRooms(HotelDAOImpl hotelDAO) throws Exception {
- for (var room : generateSampleRooms()) {
- hotelDAO.add(room);
- }
+ private static void addRooms(HotelDaoImpl hotelDao) throws Exception {
+ for (var room : generateSampleRooms()) {
+ hotelDao.add(room);
}
+ }
- public static List generateSampleRooms() {
- final var room1 = new Room(1, "Single", 50, false);
- final var room2 = new Room(2, "Double", 80, false);
- final var room3 = new Room(3, "Queen", 120, false);
- final var room4 = new Room(4, "King", 150, false);
- final var room5 = new Room(5, "Single", 50, false);
- final var room6 = new Room(6, "Double", 80, false);
- return List.of(room1, room2, room3, room4, room5, room6);
- }
+ /**
+ * Generate rooms.
+ *
+ * @return list of rooms
+ */
+ public static List generateSampleRooms() {
+ final var room1 = new Room(1, "Single", 50, false);
+ final var room2 = new Room(2, "Double", 80, false);
+ final var room3 = new Room(3, "Queen", 120, false);
+ final var room4 = new Room(4, "King", 150, false);
+ final var room5 = new Room(5, "Single", 50, false);
+ final var room6 = new Room(6, "Double", 80, false);
+ return List.of(room1, room2, room3, room4, room5, room6);
+ }
}
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
deleted file mode 100644
index d7a763862..000000000
--- a/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/db/HotelDAO.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.ashishtrivedi16.transactionscript.db;
-
-import com.ashishtrivedi16.transactionscript.Room;
-
-import java.util.Optional;
-import java.util.stream.Stream;
-
-public interface HotelDAO {
-
- public Stream getAll() throws Exception;
-
- public Optional getById(int id) throws Exception;
-
- public Boolean add(Room room) throws Exception;
-
- public Boolean update(Room room) throws Exception;
-
- public Boolean delete(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
deleted file mode 100644
index c4a18633c..000000000
--- a/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/db/HotelDAOImpl.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package com.ashishtrivedi16.transactionscript.db;
-
-import com.ashishtrivedi16.transactionscript.Room;
-
-import javax.sql.DataSource;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Optional;
-import java.util.Spliterator;
-import java.util.Spliterators;
-import java.util.function.Consumer;
-import java.util.stream.Stream;
-import java.util.stream.StreamSupport;
-
-public class HotelDAOImpl implements HotelDAO {
-
- private final DataSource dataSource;
-
- public HotelDAOImpl(DataSource dataSource) {
- this.dataSource = dataSource;
- }
-
- @Override
- public Stream getAll() throws Exception {
- try {
- var connection = getConnection();
- var statement = connection.prepareStatement("SELECT * FROM ROOMS");
- ResultSet resultSet = statement.executeQuery(); // NOSONAR
- return StreamSupport.stream(new Spliterators.AbstractSpliterator(Long.MAX_VALUE,
- Spliterator.ORDERED) {
-
- @Override
- public boolean tryAdvance(Consumer super Room> action) {
- try {
- if (!resultSet.next()) {
- return false;
- }
- action.accept(createRoom(resultSet));
- return true;
- } catch (SQLException e) {
- throw new RuntimeException(e); // NOSONAR
- }
- }
- }, false).onClose(() -> {
- try {
- mutedClose(connection, statement, resultSet);
- } catch (Exception e) {
- e.printStackTrace();
- }
- });
- } catch (SQLException e) {
- throw new CustomException(e.getMessage(), e);
- }
- }
-
- @Override
- public Optional getById(int id) throws Exception {
- ResultSet resultSet = null;
-
- try (var connection = getConnection();
- var statement = connection.prepareStatement("SELECT * FROM ROOMS WHERE ID = ?")) {
-
- statement.setInt(1, id);
- resultSet = statement.executeQuery();
- if (resultSet.next()) {
- return Optional.of(createRoom(resultSet));
- } else {
- return Optional.empty();
- }
- } catch (SQLException ex) {
- throw new CustomException(ex.getMessage(), ex);
- } finally {
- if (resultSet != null) {
- resultSet.close();
- }
- }
- }
-
- @Override
- public Boolean add(Room room) throws Exception {
- if (getById(room.getId()).isPresent()) {
- return false;
- }
-
- try (var connection = getConnection();
- var statement = connection.prepareStatement("INSERT INTO ROOMS VALUES (?,?,?,?)")) {
- statement.setInt(1, room.getId());
- statement.setString(2, room.getRoomType());
- statement.setInt(3, room.getPrice());
- statement.setBoolean(4, room.isBooked());
- statement.execute();
- return true;
- } catch (SQLException ex) {
- throw new CustomException(ex.getMessage(), ex);
- }
- }
-
- @Override
- public Boolean update(Room room) throws Exception {
- try (var connection = getConnection();
- var statement =
- connection
- .prepareStatement("UPDATE ROOMS SET ROOM_TYPE = ?, PRICE = ?, BOOKED = ? WHERE ID = ?")) {
- statement.setInt(1, room.getId());
- statement.setString(2, room.getRoomType());
- statement.setBoolean(3, room.isBooked());
- statement.setInt(4, room.getId());
- return statement.executeUpdate() > 0;
- } catch (SQLException ex) {
- throw new CustomException(ex.getMessage(), ex);
- }
- }
-
- @Override
- public Boolean delete(Room room) throws Exception {
- try (var connection = getConnection();
- var statement = connection.prepareStatement("DELETE FROM CUSTOMERS WHERE ID = ?")) {
- statement.setInt(1, room.getId());
- return statement.executeUpdate() > 0;
- } catch (SQLException ex) {
- throw new CustomException(ex.getMessage(), ex);
- }
- }
-
- private Connection getConnection() throws SQLException {
- return dataSource.getConnection();
- }
-
- private void mutedClose(Connection connection, PreparedStatement statement, ResultSet resultSet) throws Exception {
- try {
- resultSet.close();
- statement.close();
- connection.close();
- } catch (SQLException e) {
- throw new CustomException(e.getMessage(), e);
- }
- }
-
- private Room createRoom(ResultSet resultSet) throws SQLException {
- return new Room(resultSet.getInt("ID"),
- resultSet.getString("ROOM_TYPE"),
- resultSet.getInt("PRICE"),
- resultSet.getBoolean("BOOKED"));
- }
-}
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
new file mode 100644
index 000000000..ee2b6de7e
--- /dev/null
+++ b/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/db/HotelDao.java
@@ -0,0 +1,19 @@
+package com.ashishtrivedi16.transactionscript.db;
+
+import com.ashishtrivedi16.transactionscript.Room;
+
+import java.util.Optional;
+import java.util.stream.Stream;
+
+public interface HotelDao {
+
+ Stream getAll() throws Exception;
+
+ Optional getById(int id) throws Exception;
+
+ Boolean add(Room room) throws Exception;
+
+ Boolean update(Room room) throws Exception;
+
+ Boolean delete(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
new file mode 100644
index 000000000..4124a4bcf
--- /dev/null
+++ b/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/db/HotelDaoImpl.java
@@ -0,0 +1,148 @@
+package com.ashishtrivedi16.transactionscript.db;
+
+import com.ashishtrivedi16.transactionscript.Room;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Optional;
+import java.util.Spliterator;
+import java.util.Spliterators;
+import java.util.function.Consumer;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+import javax.sql.DataSource;
+
+public class HotelDaoImpl implements HotelDao {
+
+ private final DataSource dataSource;
+
+ public HotelDaoImpl(DataSource dataSource) {
+ this.dataSource = dataSource;
+ }
+
+ @Override
+ public Stream getAll() throws Exception {
+ try {
+ var connection = getConnection();
+ var statement = connection.prepareStatement("SELECT * FROM ROOMS");
+ ResultSet resultSet = statement.executeQuery(); // NOSONAR
+ return StreamSupport.stream(new Spliterators.AbstractSpliterator(Long.MAX_VALUE,
+ Spliterator.ORDERED) {
+
+ @Override
+ public boolean tryAdvance(Consumer super Room> action) {
+ try {
+ if (!resultSet.next()) {
+ return false;
+ }
+ action.accept(createRoom(resultSet));
+ return true;
+ } catch (SQLException e) {
+ throw new RuntimeException(e); // NOSONAR
+ }
+ }
+ }, false).onClose(() -> {
+ try {
+ mutedClose(connection, statement, resultSet);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ });
+ } catch (SQLException e) {
+ throw new CustomException(e.getMessage(), e);
+ }
+ }
+
+ @Override
+ public Optional getById(int id) throws Exception {
+ ResultSet resultSet = null;
+
+ try (var connection = getConnection();
+ var statement = connection.prepareStatement("SELECT * FROM ROOMS WHERE ID = ?")) {
+
+ statement.setInt(1, id);
+ resultSet = statement.executeQuery();
+ if (resultSet.next()) {
+ return Optional.of(createRoom(resultSet));
+ } else {
+ return Optional.empty();
+ }
+ } catch (SQLException ex) {
+ throw new CustomException(ex.getMessage(), ex);
+ } finally {
+ if (resultSet != null) {
+ resultSet.close();
+ }
+ }
+ }
+
+ @Override
+ public Boolean add(Room room) throws Exception {
+ if (getById(room.getId()).isPresent()) {
+ return false;
+ }
+
+ try (var connection = getConnection();
+ var statement = connection.prepareStatement("INSERT INTO ROOMS VALUES (?,?,?,?)")) {
+ statement.setInt(1, room.getId());
+ statement.setString(2, room.getRoomType());
+ statement.setInt(3, room.getPrice());
+ statement.setBoolean(4, room.isBooked());
+ statement.execute();
+ return true;
+ } catch (SQLException ex) {
+ throw new CustomException(ex.getMessage(), ex);
+ }
+ }
+
+ @Override
+ public Boolean update(Room room) throws Exception {
+ try (var connection = getConnection();
+ var statement =
+ connection
+ .prepareStatement("UPDATE ROOMS SET ROOM_TYPE = ?, PRICE = ?, BOOKED = ?"
+ + " WHERE ID = ?")) {
+ statement.setString(1, room.getRoomType());
+ statement.setInt(2, room.getPrice());
+ statement.setBoolean(3, room.isBooked());
+ statement.setInt(4, room.getId());
+ return statement.executeUpdate() > 0;
+ } catch (SQLException ex) {
+ throw new CustomException(ex.getMessage(), ex);
+ }
+ }
+
+ @Override
+ public Boolean delete(Room room) throws Exception {
+ try (var connection = getConnection();
+ var statement = connection.prepareStatement("DELETE FROM CUSTOMERS WHERE ID = ?")) {
+ statement.setInt(1, room.getId());
+ return statement.executeUpdate() > 0;
+ } catch (SQLException ex) {
+ throw new CustomException(ex.getMessage(), ex);
+ }
+ }
+
+ private Connection getConnection() throws SQLException {
+ return dataSource.getConnection();
+ }
+
+ private void mutedClose(Connection connection, PreparedStatement statement, ResultSet resultSet)
+ throws Exception {
+ try {
+ resultSet.close();
+ statement.close();
+ connection.close();
+ } catch (SQLException e) {
+ throw new CustomException(e.getMessage(), e);
+ }
+ }
+
+ private Room createRoom(ResultSet resultSet) throws SQLException {
+ return new Room(resultSet.getInt("ID"),
+ resultSet.getString("ROOM_TYPE"),
+ resultSet.getInt("PRICE"),
+ resultSet.getBoolean("BOOKED"));
+ }
+}
diff --git a/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/db/RoomSchemaSql.java b/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/db/RoomSchemaSql.java
index e883e50b9..3ac8fed06 100644
--- a/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/db/RoomSchemaSql.java
+++ b/transaction-script/src/main/java/com/ashishtrivedi16/transactionscript/db/RoomSchemaSql.java
@@ -28,12 +28,11 @@ package com.ashishtrivedi16.transactionscript.db;
*/
public final class RoomSchemaSql {
+ public static final String CREATE_SCHEMA_SQL =
+ "CREATE TABLE ROOMS (ID NUMBER, ROOM_TYPE VARCHAR(100), PRICE INT(100), BOOKED VARCHAR(100))";
+ public static final String DELETE_SCHEMA_SQL = "DROP TABLE ROOMS IF EXISTS";
+
private RoomSchemaSql() {
}
- public static final String CREATE_SCHEMA_SQL =
- "CREATE TABLE ROOMS (ID NUMBER, ROOM_TYPE VARCHAR(100), PRICE INT(100), BOOKED VARCHAR(100))";
-
- public static final String DELETE_SCHEMA_SQL = "DROP TABLE ROOMS";
-
}