diff --git a/opp/core/src/main/java/Operation.java b/opp/core/src/main/java/Operation.java index b0d376b0a41435a4dad33fc9ca4efaef2bb31af6..bc7c622bcd5ec018ee3cf6c09b63443c53d173d4 100644 --- a/opp/core/src/main/java/Operation.java +++ b/opp/core/src/main/java/Operation.java @@ -34,7 +34,7 @@ public record Operation( /** * Operation commands */ - public static sealed interface Command permits Create { } + public static sealed interface Command permits Create, Update, Delete { } /** * Create command to create a new Operation @@ -48,4 +48,15 @@ public record Operation( LocalTime endTime ) implements Command {} + public static record Update( + Id<Operation> id, + Optional<LocalDate> date, + Optional<LocalTime> startTime, + Optional<LocalTime> endTime + ) implements Command {} + + public static record Delete( + Id<Operation> id + ) implements Command {} + } diff --git a/opp/jdbc-repo-impl/src/main/java/OperationServiceImpl.java b/opp/core/src/main/java/OperationServiceImpl.java similarity index 56% rename from opp/jdbc-repo-impl/src/main/java/OperationServiceImpl.java rename to opp/core/src/main/java/OperationServiceImpl.java index 4e0f04d88c6cbda5e2e064f04ecad521295e2a58..264f96073bb34aebfd2cff0852d7860141dbd87b 100644 --- a/opp/jdbc-repo-impl/src/main/java/OperationServiceImpl.java +++ b/opp/core/src/main/java/OperationServiceImpl.java @@ -18,6 +18,8 @@ public class OperationServiceImpl implements OperationService { public Operation process(Operation.Command cmd) throws Exception { return switch (cmd){ case Operation.Create cr -> create(cr); + case Operation.Update up -> update(up); + case Operation.Delete del -> delete(del); }; } @@ -44,4 +46,30 @@ public class OperationServiceImpl implements OperationService { return operation; } + + public Operation update(Operation.Update up) throws Exception { + + Operation currentOperation = repo.findOperation(up.id()).get(); + + Operation operation = + new Operation( + currentOperation.id(), + up.date().orElse(currentOperation.date()), + up.startTime().orElse(currentOperation.startTime()), + up.endTime().orElse(currentOperation.endTime()), + Instant.now()); + + repo.save(operation); + + return operation; + } + + public Operation delete(Operation.Delete del) throws Exception { + + Operation operation = repo.findOperation(del.id()).get(); + + repo.deleteOperation(del.id()); + + return operation; + } } diff --git a/opp/core/src/main/java/Repository.java b/opp/core/src/main/java/Repository.java index b47dd815f98213039e560da3af7b40d0510529ee..70224cdd11b07f026a3ce883fdab86eb7de27a07 100644 --- a/opp/core/src/main/java/Repository.java +++ b/opp/core/src/main/java/Repository.java @@ -1,3 +1,4 @@ +import java.sql.SQLException; import java.util.List; import java.util.Optional; @@ -39,4 +40,10 @@ public interface Repository { * @return the matching entries */ List<Operation> findOperations(Operation.Filter filter); + + /** + * Deletes the Operation with the matching id. + * @param id the id of the Operation to delete + */ + void deleteOperation(Id<Operation> id) throws SQLException; } diff --git a/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java b/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java index 553d3670b2b4c871d64566aed68b30843cb5c1a0..6b1a5d1ac62cba3ef4aacd2a9f98a5fa788b31cf 100644 --- a/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java +++ b/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java @@ -259,7 +259,7 @@ class JDBCRepository implements Repository "UPDATE operations SET " + "date = " + sqlValue(operation.date()) + "," + "startTime = " + sqlValue(operation.startTime()) + "," + - "endTime = " + sqlValue(operation.endTime()) + " " + + "endTime = " + sqlValue(operation.endTime()) + "," + "lastUpdate = " + sqlValue(operation.lastUpdate()) + " " + "WHERE id = " + sqlValue(operation.id().value()) + ";"; } @@ -381,4 +381,14 @@ class JDBCRepository implements Repository rs.getTimestamp("lastUpdate").toInstant() ); } + + @Override + public void deleteOperation(Id<Operation> id) throws SQLException { + var operation = findOperation(id); + + if(operation.isPresent()) { + conn.createStatement() + .executeUpdate("DELETE FROM operations WHERE id = " + quoted(id.value()) + ";"); + } + } } diff --git a/opp/jdbc-repo-impl/src/test/java/Tests.java b/opp/jdbc-repo-impl/src/test/java/Tests.java index 4643f70efd303d8b78c9e4ceb344ccf6cd71143b..4e75e17564579421172053629ed5cf87f42be650 100644 --- a/opp/jdbc-repo-impl/src/test/java/Tests.java +++ b/opp/jdbc-repo-impl/src/test/java/Tests.java @@ -1,6 +1,7 @@ import org.junit.BeforeClass; import org.junit.Test; +import java.sql.SQLException; import java.time.Instant; import java.time.LocalDate; import java.time.LocalTime; @@ -16,12 +17,10 @@ public final class Tests private static Repository repo = null; - private static OperationService opService; - - //private static Patient testPatient = null; - private static Operation testOperation = null; + private static OperationService opService; + @BeforeClass public static void init() throws Exception { @@ -31,17 +30,6 @@ public final class Tests repo = JDBCRepository.instance(); - /* - testPatient = new Patient( - new Id<>("1111"), - Gender.MALE, - "Hans", - "Guenther", - LocalDate.of(1999, 01, 01), - new Address("Musterstraße", "12", "12345", "Beispielhausen"), - "AOK"); - */ - testOperation = new Operation( new Id<>("1111"), LocalDate.of(2024, 05, 24), @@ -52,68 +40,128 @@ public final class Tests opService = new OperationServiceImpl(repo); } - /* @Test - public void testPatientSave(){ + public void testRepoOperationSave(){ try { - repo.createPatient(testPatient); + repo.save(testOperation); } catch (Exception e){ e.printStackTrace(); } assertTrue( - repo.findPatient(testPatient.id()).isPresent() + repo.findOperation(testOperation.id()).isPresent() ); } - @Test - public void testPatientDelete(){ + public void testRepoOperationUpdate() { try { - repo.deletePatient(testPatient.id()); + repo.save(testOperation); } catch (Exception e){ e.printStackTrace(); } - assertTrue( - repo.findPatient(testPatient.id()).isEmpty() + Operation updatedTestOperation = new Operation( + testOperation.id(), + LocalDate.of(1999, 01, 01), + testOperation.startTime(), + testOperation.endTime(), + Instant.now() ); - } - */ - - @Test - public void testOperationSave(){ try { - repo.save(testOperation); + repo.save(updatedTestOperation); } catch (Exception e){ e.printStackTrace(); } - assertTrue( - repo.findOperation(testOperation.id()).isPresent() - ); + assertNotEquals(repo.findOperation(updatedTestOperation.id()).get().date(), testOperation.date()); + + assertNotEquals(repo.findOperation(updatedTestOperation.id()).get().lastUpdate(), testOperation.lastUpdate()); + } + + @Test + public void testRepoOperationDelete() { + try { + repo.save(testOperation); + } catch (Exception e){ + e.printStackTrace(); + } + + try { + repo.deleteOperation(testOperation.id()); + } catch (SQLException e) { + throw new RuntimeException(e); + } } @Test public void testCreateOperation() throws Exception { - Operation.Command createCommand = new Operation.Create( + Operation.Create createCommand = new Operation.Create( LocalDate.of(2025, 05, 11), LocalTime.of(10, 30, 00), - LocalTime.of(11, 00, 00)); + LocalTime.of(11, 00, 00) + ); Operation createOperation = opService.process(createCommand); - System.out.println(createOperation); - assertTrue( repo.findOperation(createOperation.id()).isPresent() ); } + @Test + public void testUpdateOperation() throws Exception { + + repo.save(testOperation); + + Operation.Update updateCommand = new Operation.Update( + testOperation.id(), + Optional.of(LocalDate.of(1999, 01, 01)), + Optional.empty(), + Optional.empty() + ); + + opService.getOperation(testOperation.id()); + + Operation updateOperation = opService.process(updateCommand); + + assertNotEquals( + repo.findOperation(updateOperation.id()).get().date(), testOperation.date() + ); + + assertEquals( + repo.findOperation(updateOperation.id()).get().startTime(), testOperation.startTime() + ); + + assertEquals( + repo.findOperation(updateOperation.id()).get().endTime(), testOperation.endTime() + ); + + assertNotEquals( + repo.findOperation(updateOperation.id()).get().lastUpdate(), testOperation.lastUpdate() + ); + } + + @Test + public void testDeleteOperation() throws Exception { + + repo.save(testOperation); + + Operation.Delete deleteCommand = new Operation.Delete( + testOperation.id() + ); + + Operation deleteOperation = opService.process(deleteCommand); + + assertFalse( + repo.findOperation(deleteOperation.id()).isPresent() + ); + } + @Test public void testGetOperations() { LocalDate testDate = LocalDate.of(2024, 05, 24); @@ -124,7 +172,7 @@ public final class Tests for (Operation operation : operations) { System.out.println(operation); - assertEquals(operation.date(), testDate); + assertEquals(operation.date(), testDate); } }