From 7e8534987765ec93033240da9d64b03495701ed8 Mon Sep 17 00:00:00 2001
From: Andre Hartig <andre.hartig@student.reutlingen-university.de>
Date: Sun, 2 Jun 2024 15:14:14 +0200
Subject: [PATCH] Added the remaining classes and a ObjectTimestamp to track
 object modifications.

---
 opp/core/src/main/java/OPStaff.java            |  7 +++++++
 opp/core/src/main/java/ObjectModification.java |  5 +++++
 opp/core/src/main/java/ObjectTimestamp.java    |  7 +++++++
 opp/core/src/main/java/Operation.java          |  3 ++-
 opp/core/src/main/java/OperationTeam.java      |  8 ++++++++
 opp/core/src/main/java/Patient.java            | 14 --------------
 opp/core/src/main/java/PreparationNote.java    |  9 +++++++++
 opp/core/src/main/java/Role.java               |  4 ++++
 opp/core/src/main/java/Room.java               |  6 ++++++
 .../src/main/java/JDBCRepository.java          | 17 ++++++++++++-----
 opp/jdbc-repo-impl/src/test/java/Tests.java    | 18 ++++++++++++++----
 11 files changed, 74 insertions(+), 24 deletions(-)
 create mode 100644 opp/core/src/main/java/OPStaff.java
 create mode 100644 opp/core/src/main/java/ObjectModification.java
 create mode 100644 opp/core/src/main/java/ObjectTimestamp.java
 create mode 100644 opp/core/src/main/java/OperationTeam.java
 create mode 100644 opp/core/src/main/java/PreparationNote.java
 create mode 100644 opp/core/src/main/java/Role.java
 create mode 100644 opp/core/src/main/java/Room.java

diff --git a/opp/core/src/main/java/OPStaff.java b/opp/core/src/main/java/OPStaff.java
new file mode 100644
index 0000000..4e94207
--- /dev/null
+++ b/opp/core/src/main/java/OPStaff.java
@@ -0,0 +1,7 @@
+public record OPStaff(
+        Id<OPStaff> opStaffId,
+        Role role,
+        String specialty,
+        ObjectTimestamp lastUpdate
+) {
+}
diff --git a/opp/core/src/main/java/ObjectModification.java b/opp/core/src/main/java/ObjectModification.java
new file mode 100644
index 0000000..98bf4a6
--- /dev/null
+++ b/opp/core/src/main/java/ObjectModification.java
@@ -0,0 +1,5 @@
+public enum ObjectModification {
+    CREATE,
+    UPDATE,
+    DELETE
+}
diff --git a/opp/core/src/main/java/ObjectTimestamp.java b/opp/core/src/main/java/ObjectTimestamp.java
new file mode 100644
index 0000000..d57a873
--- /dev/null
+++ b/opp/core/src/main/java/ObjectTimestamp.java
@@ -0,0 +1,7 @@
+import java.time.LocalDateTime;
+
+public record ObjectTimestamp(
+        LocalDateTime timestamp,
+        ObjectModification objectModification
+) {
+}
diff --git a/opp/core/src/main/java/Operation.java b/opp/core/src/main/java/Operation.java
index ffe0b18..20d548f 100644
--- a/opp/core/src/main/java/Operation.java
+++ b/opp/core/src/main/java/Operation.java
@@ -13,7 +13,8 @@ public record Operation(
         Id<Operation> id,
         LocalDate date,
         LocalTime startTime,
-        LocalTime endTime
+        LocalTime endTime,
+        ObjectTimestamp lastUpdate
 ) {
 
     /**
diff --git a/opp/core/src/main/java/OperationTeam.java b/opp/core/src/main/java/OperationTeam.java
new file mode 100644
index 0000000..95da2c0
--- /dev/null
+++ b/opp/core/src/main/java/OperationTeam.java
@@ -0,0 +1,8 @@
+import java.util.List;
+
+public record OperationTeam(
+        Id<OperationTeam> operationTeamId,
+        List<OPStaff> opStaffList,
+        ObjectTimestamp lastUpdate
+) {
+}
diff --git a/opp/core/src/main/java/Patient.java b/opp/core/src/main/java/Patient.java
index 28ad22a..71e747b 100644
--- a/opp/core/src/main/java/Patient.java
+++ b/opp/core/src/main/java/Patient.java
@@ -4,26 +4,12 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import java.time.LocalDate;
 
 public record Patient (
-        @JsonProperty
         Id<Patient> id,
-
-        @JsonProperty
         Gender gender,
-
-        @JsonProperty
         String givenName,
-
-        @JsonProperty
         String familyName,
-
-        @JsonProperty
-        @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
         LocalDate birthDate,
-
-        @JsonProperty
         Address address,
-
-        @JsonProperty
         String healthInsurance
 ) {
 }
diff --git a/opp/core/src/main/java/PreparationNote.java b/opp/core/src/main/java/PreparationNote.java
new file mode 100644
index 0000000..9c368d1
--- /dev/null
+++ b/opp/core/src/main/java/PreparationNote.java
@@ -0,0 +1,9 @@
+import java.time.LocalDateTime;
+
+public record PreparationNote(
+        Id<PreparationNote> preparationNoteId,
+        String text,
+        Operation operationId,
+        ObjectTimestamp lastUpdate
+) {
+}
diff --git a/opp/core/src/main/java/Role.java b/opp/core/src/main/java/Role.java
new file mode 100644
index 0000000..a18e09d
--- /dev/null
+++ b/opp/core/src/main/java/Role.java
@@ -0,0 +1,4 @@
+public enum Role {
+    SURGEON,
+    ASSISTANT
+}
diff --git a/opp/core/src/main/java/Room.java b/opp/core/src/main/java/Room.java
new file mode 100644
index 0000000..856b8f0
--- /dev/null
+++ b/opp/core/src/main/java/Room.java
@@ -0,0 +1,6 @@
+public record Room(
+        Id<Room> roomId,
+        String roomName,
+        ObjectTimestamp lastUpdate
+) {
+}
diff --git a/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java b/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java
index 7e3abea..02fb60f 100644
--- a/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java
+++ b/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java
@@ -331,11 +331,18 @@ class JDBCRepository implements Repository
   @Override
   public List<Operation> findOperations(Operation.Filter filter) {
 
-    var sql = "SELECT * FROM operations WHERE date = " +
-            sqlValue(filter.date()).
-                    replace("Optional", "").
-                    replace("[", "").
-                    replace("]", "") + ";";
+    var sql = "";
+
+    if(filter.equals(Operation.Filter.NONE)) {
+      sql = "SELECT * FROM operations;";
+
+    } else {
+      sql = "SELECT * FROM operations WHERE date = " +
+              sqlValue(filter.date()).
+                      replace("Optional", "").
+                      replace("[", "").
+                      replace("]", "") + ";";
+    }
 
     try (
             var resultSet =
diff --git a/opp/jdbc-repo-impl/src/test/java/Tests.java b/opp/jdbc-repo-impl/src/test/java/Tests.java
index 3a51047..1a7a662 100644
--- a/opp/jdbc-repo-impl/src/test/java/Tests.java
+++ b/opp/jdbc-repo-impl/src/test/java/Tests.java
@@ -97,23 +97,33 @@ public final class Tests
 
   @Test
   public void testCreateOperation() throws Exception {
+
     Operation.Command createCommand = new Operation.Create(
             LocalDate.of(2025, 05, 11),
             LocalTime.of(10, 30, 00),
             LocalTime.of(11, 00, 00));
 
-    Operation operation = opService.process(createCommand);
+    Operation createOperation = opService.process(createCommand);
+
+    System.out.println(createOperation);
 
-    System.out.println(operation);
+    assertTrue(
+            repo.findOperation(createOperation.id()).isPresent()
+    );
   }
 
   @Test
   public void testGetOperations() {
-    Operation.Filter filter = new Operation.Filter(Optional.of(LocalDate.of(2024, 05, 24)));
+    LocalDate testDate = LocalDate.of(2024, 05, 24);
+    Operation.Filter filter = new Operation.Filter(Optional.of(testDate));
+//    Operation.Filter filter = Operation.Filter.NONE;
 
     List<Operation> operations = opService.getOperations(filter);
 
-    for (Operation operation : operations)
+    for (Operation operation : operations) {
       System.out.println(operation);
+        assertEquals(operation.date(), testDate);
+    }
+
   }
 }
-- 
GitLab