diff --git a/opp/core/src/main/java/OPStaff.java b/opp/core/src/main/java/OPStaff.java index 352781c35f676ad56749cab77548fc95b2f28b6a..c7d085115a10f71837071a3a7ebf936789816dc4 100644 --- a/opp/core/src/main/java/OPStaff.java +++ b/opp/core/src/main/java/OPStaff.java @@ -1,6 +1,7 @@ import java.time.Instant; import java.time.LocalDate; import java.time.LocalTime; +import java.util.Optional; public record OPStaff( Id<OPStaff> id, @@ -12,7 +13,7 @@ public record OPStaff( /** * OPStaff commands */ - public static sealed interface Command permits OPStaff.CreateOPStaff { } //, OPStaff.UpdateOPStaff, OPStaff.DeleteOPStaff + public static sealed interface Command permits OPStaff.CreateOPStaff, OPStaff.UpdateOPStaff { } //OPStaff.DeleteOPStaff /** * Create command to create a new Operation @@ -24,5 +25,11 @@ public record OPStaff( Specialty specialty ) implements Command {} + public static record UpdateOPStaff( + Id<OPStaff> id, + Optional<Role> role, + Optional<Specialty> specialty + ) implements Command {} + } diff --git a/opp/core/src/main/java/OPStaffServiceImpl.java b/opp/core/src/main/java/OPStaffServiceImpl.java index b20454256b092ac8d4eaef0a3e71e30fc4d8397c..51d90a53d4991c6023fbd64082ad6f14295f7b33 100644 --- a/opp/core/src/main/java/OPStaffServiceImpl.java +++ b/opp/core/src/main/java/OPStaffServiceImpl.java @@ -14,7 +14,7 @@ public class OPStaffServiceImpl implements OPStaffService{ public OPStaff process(OPStaff.Command cmd) throws Exception { return switch (cmd){ case OPStaff.CreateOPStaff cr -> createOPStaffimpl(cr); - //case OPStaff.Update up -> update(up); + case OPStaff.UpdateOPStaff up -> updateOPStaffimpl(up); //case OPStaff.Delete del -> delete(del); }; } @@ -32,6 +32,21 @@ public class OPStaffServiceImpl implements OPStaffService{ return opStaff; } + public OPStaff updateOPStaffimpl(OPStaff.UpdateOPStaff up) throws Exception{ + OPStaff currentOPStaff = repo.findOPStaff(up.id()).get(); + + OPStaff opStaff = + new OPStaff( + currentOPStaff.id(), + up.role().orElse(currentOPStaff.role()), + up.specialty().orElse((currentOPStaff.specialty())), + Instant.now() + ); + repo.saveOPStaff(opStaff); + + return opStaff; + } + public Optional<OPStaff> getOPStaff(Id<OPStaff> id) { return repo.findOPStaff(id); diff --git a/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java b/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java index c5676800989217ddc05076451f51a33516ff4fb6..0253e0f3e8376dc122d1b44180faff3aada37237 100644 --- a/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java +++ b/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java @@ -431,11 +431,11 @@ class JDBCRepository implements Repository var stmt = conn.createStatement() ){ //TODO - /*var sql = - findOperation(operation.id()).isPresent() ? - updateSQL(operation) : - insertSQL(operation);*/ - var sql = insertOPStaffSQL(opStaff); + var sql = + findOPStaff(opStaff.id()).isPresent() ? + updateOPStaffSQL(opStaff) : + insertOPStaffSQL(opStaff); + //var sql = insertOPStaffSQL(opStaff); stmt.executeUpdate(sql); @@ -522,6 +522,20 @@ class JDBCRepository implements Repository ); } + /** + * Creates the update statement of the given OPStaff for SQL. + * @param opStaff the opStaff to turn into an update SQL statement + * @return the SQL statement + */ + private static String updateOPStaffSQL(OPStaff opStaff){ + return + "UPDATE opstaff SET " + + "role = " + sqlValue(opStaff.role()) + "," + + "specialty = " + sqlValue(opStaff.specialty()) + "," + + "lastUpdate = " + sqlValue(opStaff.lastUpdate()) + " " + + "WHERE id = " + sqlValue(opStaff.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 48b190b9af6177e681ad7df96268665bb7ea4db9..651a2a861181ea8ba33a77934cc8a28020cb1d54 100644 --- a/opp/jdbc-repo-impl/src/test/java/Tests.java +++ b/opp/jdbc-repo-impl/src/test/java/Tests.java @@ -226,7 +226,7 @@ public final class Tests //assertEquals(operation.date(), testDate); } - @Test + //@Test public void testGetOPStaffs() { try{ @@ -241,6 +241,19 @@ public final class Tests } //assertEquals(operation.date(), testDate); } + + @Test + public void testUpdateOPStaff() throws Exception{ + + OPStaff.UpdateOPStaff updateCommand = new OPStaff.UpdateOPStaff( + testOPStaff.id(), + Optional.empty(), + Optional.of(Specialty.Orthopedics) + ); + + OPStaff updateOPStaff = opStaffService.process(updateCommand); + + } }