From 3f4896349a9f6861129cd790bb6c377dae9cbe01 Mon Sep 17 00:00:00 2001 From: KKlochko Date: Mon, 6 Nov 2023 21:41:04 +0200 Subject: [PATCH] Migrate the model repositories. --- .../db/repositories/DepartmentRepository.java | 146 ------------------ .../db/repositories/IndicatorRepository.java | 146 ------------------ .../db/repositories/PatientRepository.java | 146 ------------------ .../db/repositories/blocks/CreateTable.java | 19 --- .../db/repositories/blocks/CreateTables.java | 23 --- .../blocks/TransactionalInsert.java | 21 --- .../blocks/TransactionalUpdate.java | 21 --- .../repositories/blocks/TurnOnUUIDPlugin.java | 19 --- .../db/repositories/DepartmentRepository.java | 47 ++++++ .../db/repositories/IndicatorRepository.java | 47 ++++++ .../db/repositories/PatientRepository.java | 47 ++++++ .../blocks/TransactionalInsert.java | 29 ++++ .../blocks/TransactionalRemove.java | 23 +++ .../blocks/TransactionalUpdate.java | 20 +++ 14 files changed, 213 insertions(+), 541 deletions(-) delete mode 100644 src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/DepartmentRepository.java delete mode 100644 src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/IndicatorRepository.java delete mode 100644 src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/PatientRepository.java delete mode 100644 src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/CreateTable.java delete mode 100644 src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/CreateTables.java delete mode 100644 src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/TransactionalInsert.java delete mode 100644 src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/TransactionalUpdate.java delete mode 100644 src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/TurnOnUUIDPlugin.java create mode 100644 src/main/java/space/kklochko/jpa_hospital_example/db/repositories/DepartmentRepository.java create mode 100644 src/main/java/space/kklochko/jpa_hospital_example/db/repositories/IndicatorRepository.java create mode 100644 src/main/java/space/kklochko/jpa_hospital_example/db/repositories/PatientRepository.java create mode 100644 src/main/java/space/kklochko/jpa_hospital_example/db/repositories/blocks/TransactionalInsert.java create mode 100644 src/main/java/space/kklochko/jpa_hospital_example/db/repositories/blocks/TransactionalRemove.java create mode 100644 src/main/java/space/kklochko/jpa_hospital_example/db/repositories/blocks/TransactionalUpdate.java diff --git a/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/DepartmentRepository.java b/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/DepartmentRepository.java deleted file mode 100644 index b7f8f30..0000000 --- a/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/DepartmentRepository.java +++ /dev/null @@ -1,146 +0,0 @@ -package space.kklochko.jdbc_hospital_example.db.repositories; - -import space.kklochko.jdbc_hospital_example.db.factories.DataBaseConnection; -import space.kklochko.jdbc_hospital_example.db.repositories.blocks.TransactionalInsert; -import space.kklochko.jdbc_hospital_example.db.repositories.blocks.TransactionalUpdate; -import space.kklochko.jdbc_hospital_example.db.repositories.blocks.CreateTable; -import space.kklochko.jdbc_hospital_example.models.Department; - -import java.sql.*; -import java.util.ArrayList; -import java.util.UUID; - -public class DepartmentRepository extends AbstractRepository { - private final String createTableStatement = "create table if not exists departments (" - + "id uuid default uuid_generate_v1()," - + "name varchar(100) not null," - + "location varchar(100) not null," - + "phone varchar(25) not null)"; - - public DepartmentRepository(DataBaseConnection db){ - super(db); - } - - public boolean createTable() { - CreateTable createTable = new CreateTable(); - return createTable.create(db, createTableStatement); - } - - public boolean create(Department object) { - try (Connection connection = db.connect()) { - connection.setAutoCommit(false); - - String sql = "insert into departments (name, location, phone) values (?, ?, ?) returning id;"; - - if(object.getId() != null) { - sql = "insert into departments (id, name, location, phone) values (?, ?, ?, ?) returning id;"; - } - - PreparedStatement preparedStatement = connection.prepareStatement(sql); - - if(object.getId() == null) { - preparedStatement.setString(1, object.getName()); - preparedStatement.setString(2, object.getLocation()); - preparedStatement.setString(3, object.getPhone()); - } else { - preparedStatement.setObject(1, object.getId()); - preparedStatement.setString(2, object.getName()); - preparedStatement.setString(3, object.getLocation()); - preparedStatement.setString(4, object.getPhone()); - } - - ResultSet resultSet = (new TransactionalInsert()).run(connection, preparedStatement); - - if (resultSet.next()) { - UUID uuid = (UUID) resultSet.getObject("id"); - object.setId(uuid); - return true; - } - - return false; - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - public Department read(UUID id) { - try (Connection connection = db.connect()) { - String sql = "select id, name, location, phone from departments where id = ?;"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - preparedStatement.setObject(1, id); - ResultSet resultSet = preparedStatement.executeQuery(); - - if (resultSet.next()) { - UUID uuid = (UUID) resultSet.getObject("id"); - String name = resultSet.getString("name"); - String location = resultSet.getString("location"); - String phone = resultSet.getString("phone"); - - return new Department(uuid, name, location, phone); - } - - return null; - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - public ArrayList readAll() { - try (Connection connection = db.connect()) { - String sql = "select id, name, location, phone from departments;"; - Statement statement = connection.createStatement(); - ResultSet resultSet = statement.executeQuery(sql); - - ArrayList patients = new ArrayList<>(); - - while (resultSet.next()) { - UUID uuid = (UUID) resultSet.getObject("id"); - String name = resultSet.getString("name"); - String location = resultSet.getString("location"); - String phone = resultSet.getString("phone"); - - patients.add(new Department(uuid, name, location, phone)); - } - - return patients; - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - public boolean update(Department object) { - try (Connection connection = db.connect()) { - connection.setAutoCommit(false); - - String sql = "update departments set name = ?, location = ?, phone = ? where id = ?;"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - - preparedStatement.setString(1, object.getName()); - preparedStatement.setString(2, object.getLocation()); - preparedStatement.setString(3, object.getPhone()); - preparedStatement.setObject(4, object.getId()); - - int rowCount = (new TransactionalUpdate()).run(connection, preparedStatement); - - return rowCount > 0; - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - public boolean delete(UUID id) { - try (Connection connection = db.connect()) { - connection.setAutoCommit(false); - - String sql = "delete from departments where id = ?;"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - preparedStatement.setObject(1, id); - - int rowCount = (new TransactionalUpdate()).run(connection, preparedStatement); - - return rowCount > 0; - } catch (SQLException e) { - throw new RuntimeException(e); - } - } -} diff --git a/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/IndicatorRepository.java b/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/IndicatorRepository.java deleted file mode 100644 index 70bb0a0..0000000 --- a/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/IndicatorRepository.java +++ /dev/null @@ -1,146 +0,0 @@ -package space.kklochko.jdbc_hospital_example.db.repositories; - -import space.kklochko.jdbc_hospital_example.db.factories.DataBaseConnection; -import space.kklochko.jdbc_hospital_example.db.repositories.blocks.CreateTable; -import space.kklochko.jdbc_hospital_example.db.repositories.blocks.TransactionalInsert; -import space.kklochko.jdbc_hospital_example.db.repositories.blocks.TransactionalUpdate; -import space.kklochko.jdbc_hospital_example.models.Indicator; - -import java.sql.*; -import java.util.ArrayList; -import java.util.UUID; - -public class IndicatorRepository extends AbstractRepository { - private final String createTableStatement = "create table if not exists indicators (" - + "id uuid default uuid_generate_v1()," - + "type varchar(100) NOT NULL," - + "values varchar(100) NOT NULL," - + "timestamp timestamp NOT NULL)"; - - public IndicatorRepository(DataBaseConnection db){ - super(db); - } - - public boolean createTable() { - CreateTable createTable = new CreateTable(); - return createTable.create(db, createTableStatement); - } - - public boolean create(Indicator object) { - try (Connection connection = db.connect()) { - connection.setAutoCommit(false); - - String sql = "insert into indicators (type, values, timestamp) values (?, ?, ?) returning id;"; - - if(object.getId() != null) { - sql = "insert into indicators (id, type, values, timestamp) values (?, ?, ?, ?) returning id;"; - } - - PreparedStatement preparedStatement = connection.prepareStatement(sql); - - if(object.getId() == null) { - preparedStatement.setString(1, object.getType()); - preparedStatement.setString(2, object.getValues()); - preparedStatement.setTimestamp(3, object.getTimestamp()); - }else { - preparedStatement.setObject(1, object.getId()); - preparedStatement.setString(2, object.getType()); - preparedStatement.setString(3, object.getValues()); - preparedStatement.setTimestamp(4, object.getTimestamp()); - } - - ResultSet resultSet = (new TransactionalInsert()).run(connection, preparedStatement); - - if (resultSet.next()) { - UUID uuid = (UUID) resultSet.getObject("id"); - object.setId(uuid); - return true; - } - - return false; - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - public Indicator read(UUID id) { - try (Connection connection = db.connect()) { - String sql = "select id, type, values, timestamp from indicators where id = ?;"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - preparedStatement.setObject(1, id); - ResultSet resultSet = preparedStatement.executeQuery(); - - if (resultSet.next()) { - UUID uuid = (UUID) resultSet.getObject("id"); - String type = resultSet.getString("type"); - String values = resultSet.getString("values"); - Timestamp timestamp = resultSet.getTimestamp("timestamp"); - - return new Indicator(uuid, type, values, timestamp); - } - - return null; - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - public ArrayList readAll() { - try (Connection connection = db.connect()) { - String sql = "select id, type, values, timestamp from indicators;"; - Statement statement = connection.createStatement(); - ResultSet resultSet = statement.executeQuery(sql); - - ArrayList indicators = new ArrayList<>(); - - while (resultSet.next()) { - UUID uuid = (UUID) resultSet.getObject("id"); - String type = resultSet.getString("type"); - String values = resultSet.getString("values"); - Timestamp timestamp = resultSet.getTimestamp("timestamp"); - - indicators.add(new Indicator(uuid, type, values, timestamp)); - } - - return indicators; - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - public boolean update(Indicator object) { - try (Connection connection = db.connect()) { - connection.setAutoCommit(false); - - String sql = "update indicators set type = ?, values = ?, timestamp = ? where id = ?;"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - - preparedStatement.setString(1, object.getType()); - preparedStatement.setString(2, object.getValues()); - preparedStatement.setTimestamp(3, object.getTimestamp()); - preparedStatement.setObject(4, object.getId()); - - int rowCount = (new TransactionalUpdate()).run(connection, preparedStatement); - - return rowCount > 0; - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - public boolean delete(UUID id) { - try (Connection connection = db.connect()) { - connection.setAutoCommit(false); - - String sql = "delete from indicators where id = ?;"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - preparedStatement.setObject(1, id); - - int rowCount = (new TransactionalUpdate()).run(connection, preparedStatement); - - return rowCount > 0; - } catch (SQLException e) { - throw new RuntimeException(e); - } - } -} diff --git a/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/PatientRepository.java b/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/PatientRepository.java deleted file mode 100644 index d6f2baa..0000000 --- a/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/PatientRepository.java +++ /dev/null @@ -1,146 +0,0 @@ -package space.kklochko.jdbc_hospital_example.db.repositories; - -import space.kklochko.jdbc_hospital_example.db.factories.DataBaseConnection; -import space.kklochko.jdbc_hospital_example.db.repositories.blocks.CreateTable; -import space.kklochko.jdbc_hospital_example.db.repositories.blocks.TransactionalInsert; -import space.kklochko.jdbc_hospital_example.db.repositories.blocks.TransactionalUpdate; -import space.kklochko.jdbc_hospital_example.models.Patient; - -import java.sql.*; -import java.util.ArrayList; -import java.util.UUID; - -public class PatientRepository extends AbstractRepository { - private final String createTableStatement = "create table if not exists patients (" - + "id uuid default uuid_generate_v1()," - + "name varchar(100) NOT NULL," - + "age smallint NOT NULL," - + "phone varchar(25) NOT NULL)"; - - public PatientRepository(DataBaseConnection db){ - super(db); - } - - public boolean createTable() { - CreateTable createTable = new CreateTable(); - return createTable.create(db, createTableStatement); - } - - public boolean create(Patient object) { - try (Connection connection = db.connect()) { - connection.setAutoCommit(false); - - String sql = "insert into patients (name, age, phone) values (?, ?, ?) returning id;"; - - if(object.getId() != null) { - sql = "insert into patients (id, name, age, phone) values (?, ?, ?, ?) returning id;"; - } - - PreparedStatement preparedStatement = connection.prepareStatement(sql); - - if(object.getId() == null) { - preparedStatement.setString(1, object.getName()); - preparedStatement.setShort(2, object.getAge()); - preparedStatement.setString(3, object.getPhone()); - } else { - preparedStatement.setObject(1, object.getId()); - preparedStatement.setString(2, object.getName()); - preparedStatement.setShort(3, object.getAge()); - preparedStatement.setString(4, object.getPhone()); - } - - ResultSet resultSet = (new TransactionalInsert()).run(connection, preparedStatement); - - if (resultSet.next()) { - UUID uuid = (UUID) resultSet.getObject("id"); - object.setId(uuid); - return true; - } - - return false; - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - public Patient read(UUID id) { - try (Connection connection = db.connect()) { - String sql = "select id, name, age, phone from patients where id = ?;"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - preparedStatement.setObject(1, id); - ResultSet resultSet = preparedStatement.executeQuery(); - - if (resultSet.next()) { - UUID uuid = (UUID) resultSet.getObject("id"); - String name = resultSet.getString("name"); - short age = resultSet.getShort("age"); - String phone = resultSet.getString("phone"); - - return new Patient(uuid, name, age, phone); - } - - return null; - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - public ArrayList readAll() { - try (Connection connection = db.connect()) { - String sql = "select id, name, age, phone from patients;"; - Statement statement = connection.createStatement(); - ResultSet resultSet = statement.executeQuery(sql); - - ArrayList patients = new ArrayList<>(); - - while (resultSet.next()) { - UUID uuid = (UUID) resultSet.getObject("id"); - String name = resultSet.getString("name"); - short age = resultSet.getShort("age"); - String phone = resultSet.getString("phone"); - - patients.add(new Patient(uuid, name, age, phone)); - } - - return patients; - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - public boolean update(Patient object) { - try (Connection connection = db.connect()) { - connection.setAutoCommit(false); - - String sql = "update patients set name = ?, age = ?, phone = ? where id = ?;"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - - preparedStatement.setString(1, object.getName()); - preparedStatement.setShort(2, object.getAge()); - preparedStatement.setString(3, object.getPhone()); - preparedStatement.setObject(4, object.getId()); - - int rowCount = (new TransactionalUpdate()).run(connection, preparedStatement); - - return rowCount > 0; - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - public boolean delete(UUID id) { - try (Connection connection = db.connect()) { - connection.setAutoCommit(false); - - String sql = "delete from patients where id = ?;"; - PreparedStatement preparedStatement = connection.prepareStatement(sql); - preparedStatement.setObject(1, id); - - int rowCount = (new TransactionalUpdate()).run(connection, preparedStatement); - - return rowCount > 0; - } catch (SQLException e) { - throw new RuntimeException(e); - } - } -} diff --git a/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/CreateTable.java b/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/CreateTable.java deleted file mode 100644 index 48ec60f..0000000 --- a/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/CreateTable.java +++ /dev/null @@ -1,19 +0,0 @@ -package space.kklochko.jdbc_hospital_example.db.repositories.blocks; - -import space.kklochko.jdbc_hospital_example.db.factories.DataBaseConnection; - -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; - -public class CreateTable { - public boolean create(DataBaseConnection db, String createTableStatement) { - try (Connection connection = db.connect()) { - Statement statement = connection.createStatement(); - statement.execute(createTableStatement); - return true; - } catch (SQLException e) { - throw new RuntimeException(e); - } - } -} diff --git a/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/CreateTables.java b/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/CreateTables.java deleted file mode 100644 index 1bdebe6..0000000 --- a/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/CreateTables.java +++ /dev/null @@ -1,23 +0,0 @@ -package space.kklochko.jdbc_hospital_example.db.repositories.blocks; - -import space.kklochko.jdbc_hospital_example.db.factories.DataBaseConnection; -import space.kklochko.jdbc_hospital_example.db.repositories.AbstractRepository; -import space.kklochko.jdbc_hospital_example.db.repositories.DepartmentRepository; -import space.kklochko.jdbc_hospital_example.db.repositories.IndicatorRepository; -import space.kklochko.jdbc_hospital_example.db.repositories.PatientRepository; - -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; - -public class CreateTables { - public boolean create(DataBaseConnection dbc) { - ArrayList tables = new ArrayList<>(); - tables.add(new IndicatorRepository(dbc)); - tables.add(new PatientRepository(dbc)); - tables.add(new DepartmentRepository(dbc)); - tables.forEach(repo -> repo.createTable()); - return true; - } -} diff --git a/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/TransactionalInsert.java b/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/TransactionalInsert.java deleted file mode 100644 index e12fa11..0000000 --- a/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/TransactionalInsert.java +++ /dev/null @@ -1,21 +0,0 @@ -package space.kklochko.jdbc_hospital_example.db.repositories.blocks; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; - -public class TransactionalInsert { - public ResultSet run(Connection connection, PreparedStatement insertStatement) throws SQLException { - try { - ResultSet result = insertStatement.executeQuery(); - connection.commit(); - - return result; - } catch (SQLException e) { - connection.rollback(); - } - - return null; - } -} diff --git a/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/TransactionalUpdate.java b/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/TransactionalUpdate.java deleted file mode 100644 index 70b139d..0000000 --- a/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/TransactionalUpdate.java +++ /dev/null @@ -1,21 +0,0 @@ -package space.kklochko.jdbc_hospital_example.db.repositories.blocks; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; - -public class TransactionalUpdate { - public int run(Connection connection, PreparedStatement updateStatement) throws SQLException { - try { - int rowCount = updateStatement.executeUpdate(); - connection.commit(); - - return rowCount; - } catch (SQLException e) { - connection.rollback(); - } - - return -1; - } -} diff --git a/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/TurnOnUUIDPlugin.java b/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/TurnOnUUIDPlugin.java deleted file mode 100644 index a7f96be..0000000 --- a/src/main/java/space/kklochko/jdbc_hospital_example/db/repositories/blocks/TurnOnUUIDPlugin.java +++ /dev/null @@ -1,19 +0,0 @@ -package space.kklochko.jdbc_hospital_example.db.repositories.blocks; - -import space.kklochko.jdbc_hospital_example.db.factories.DataBaseConnection; - -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; - -public class TurnOnUUIDPlugin { - public boolean create(DataBaseConnection db) { - try (Connection connection = db.connect()) { - Statement statement = connection.createStatement(); - statement.execute("CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";"); - return true; - } catch (SQLException e) { - throw new RuntimeException(e); - } - } -} diff --git a/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/DepartmentRepository.java b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/DepartmentRepository.java new file mode 100644 index 0000000..9a9ba5e --- /dev/null +++ b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/DepartmentRepository.java @@ -0,0 +1,47 @@ +package space.kklochko.jpa_hospital_example.db.repositories; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.TypedQuery; +import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalInsert; +import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalRemove; +import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalUpdate; +import space.kklochko.jpa_hospital_example.models.Department; + +import java.util.ArrayList; +import java.util.UUID; + +public class DepartmentRepository extends AbstractRepository { + public DepartmentRepository(EntityManager manager){ + super(manager); + } + + public boolean create(Department object) { + TransactionalInsert insert = new TransactionalInsert(); + + return insert.run(manager, object); + } + + public Department read(UUID id) { + return manager.find(Department.class, id); + } + + public ArrayList readAll() { + TypedQuery query = manager.createQuery("SELECT d FROM Department d", Department.class); + + return (ArrayList) query.getResultList(); + } + + public boolean update(Department object) { + TransactionalUpdate update = new TransactionalUpdate(); + + return update.run(manager, object); + } + + public boolean delete(UUID id) { + Department object = read(id); + + TransactionalRemove remove = new TransactionalRemove(); + + return remove.run(manager, object); + } +} diff --git a/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/IndicatorRepository.java b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/IndicatorRepository.java new file mode 100644 index 0000000..9cd6772 --- /dev/null +++ b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/IndicatorRepository.java @@ -0,0 +1,47 @@ +package space.kklochko.jpa_hospital_example.db.repositories; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.TypedQuery; +import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalInsert; +import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalRemove; +import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalUpdate; +import space.kklochko.jpa_hospital_example.models.Indicator; + +import java.util.ArrayList; +import java.util.UUID; + +public class IndicatorRepository extends AbstractRepository { + public IndicatorRepository(EntityManager manager){ + super(manager); + } + + public boolean create(Indicator object) { + TransactionalInsert insert = new TransactionalInsert(); + + return insert.run(manager, object); + } + + public Indicator read(UUID id) { + return manager.find(Indicator.class, id); + } + + public ArrayList readAll() { + TypedQuery query = manager.createQuery("SELECT i FROM Indicator i", Indicator.class); + + return (ArrayList) query.getResultList(); + } + + public boolean update(Indicator object) { + TransactionalUpdate update = new TransactionalUpdate(); + + return update.run(manager, object); + } + + public boolean delete(UUID id) { + Indicator object = read(id); + + TransactionalRemove remove = new TransactionalRemove(); + + return remove.run(manager, object); + } +} diff --git a/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/PatientRepository.java b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/PatientRepository.java new file mode 100644 index 0000000..1bb5efe --- /dev/null +++ b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/PatientRepository.java @@ -0,0 +1,47 @@ +package space.kklochko.jpa_hospital_example.db.repositories; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.TypedQuery; +import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalInsert; +import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalRemove; +import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalUpdate; +import space.kklochko.jpa_hospital_example.models.Patient; + +import java.util.ArrayList; +import java.util.UUID; + +public class PatientRepository extends AbstractRepository { + public PatientRepository(EntityManager manager) { + super(manager); + } + + public boolean create(Patient object) { + TransactionalInsert insert = new TransactionalInsert(); + + return insert.run(manager, object); + } + + public Patient read(UUID id) { + return manager.find(Patient.class, id); + } + + public ArrayList readAll() { + TypedQuery query = manager.createQuery("SELECT p FROM Patient p", Patient.class); + + return (ArrayList) query.getResultList(); + } + + public boolean update(Patient object) { + TransactionalUpdate update = new TransactionalUpdate(); + + return update.run(manager, object); + } + + public boolean delete(UUID id) { + Patient object = read(id); + + TransactionalRemove remove = new TransactionalRemove(); + + return remove.run(manager, object); + } +} diff --git a/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/blocks/TransactionalInsert.java b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/blocks/TransactionalInsert.java new file mode 100644 index 0000000..8715a65 --- /dev/null +++ b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/blocks/TransactionalInsert.java @@ -0,0 +1,29 @@ +package space.kklochko.jpa_hospital_example.db.repositories.blocks; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceException; +import jakarta.persistence.RollbackException; +import space.kklochko.jpa_hospital_example.models.Department; +import space.kklochko.jpa_hospital_example.models.Indicator; +import space.kklochko.jpa_hospital_example.models.Patient; + +import java.util.UUID; + +public class TransactionalInsert { + public boolean run(EntityManager manager, T object) { + try { + if (!manager.getTransaction().isActive()) + manager.getTransaction().begin(); + + manager.persist(object); + manager.getTransaction().commit(); + return true; + } catch (PersistenceException e){ + if (manager.getTransaction().isActive()) { + manager.getTransaction().rollback(); + } + + return (new TransactionalUpdate()).run(manager, object); + } + } +} diff --git a/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/blocks/TransactionalRemove.java b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/blocks/TransactionalRemove.java new file mode 100644 index 0000000..70de606 --- /dev/null +++ b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/blocks/TransactionalRemove.java @@ -0,0 +1,23 @@ +package space.kklochko.jpa_hospital_example.db.repositories.blocks; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.RollbackException; + +public class TransactionalRemove { + public boolean run(EntityManager manager, T object) { + if(object == null) + return false; + + try { + manager.getTransaction().begin(); + manager.remove(object); + manager.getTransaction().commit(); + return true; + } catch (RollbackException e) { + if (manager.getTransaction().isActive()) { + manager.getTransaction().rollback(); + } + return false; + } + } +} diff --git a/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/blocks/TransactionalUpdate.java b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/blocks/TransactionalUpdate.java new file mode 100644 index 0000000..eabc542 --- /dev/null +++ b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/blocks/TransactionalUpdate.java @@ -0,0 +1,20 @@ +package space.kklochko.jpa_hospital_example.db.repositories.blocks; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.RollbackException; + +public class TransactionalUpdate { + public boolean run(EntityManager manager, T object) { + try { + manager.getTransaction().begin(); + manager.merge(object); + manager.getTransaction().commit(); + return true; + } catch (RollbackException e) { + if (manager.getTransaction().isActive()) { + manager.getTransaction().rollback(); + } + return false; + } + } +}