From 040d00d73009ef0ef7b262b6a49262690749dac6 Mon Sep 17 00:00:00 2001
From: agoer <alexander.goerlitz@student.reutlingen-university.de>
Date: Wed, 26 Jun 2024 00:10:11 +0200
Subject: [PATCH] Updated opStaffsInOperationTeams and created the testMethods

---
 opp/core/src/main/java/Repository.java        |  6 ++-
 .../src/main/java/JDBCRepository.java         | 39 ++++++++++++++++---
 opp/jdbc-repo-impl/src/test/java/Tests.java   | 22 +++++++++++
 3 files changed, 59 insertions(+), 8 deletions(-)

diff --git a/opp/core/src/main/java/Repository.java b/opp/core/src/main/java/Repository.java
index 97e8e39..054da27 100644
--- a/opp/core/src/main/java/Repository.java
+++ b/opp/core/src/main/java/Repository.java
@@ -90,11 +90,13 @@ public interface Repository {
     OperationTeam deleteOperationTeam(Id<OperationTeam> id) throws SQLException;
 
 
-    Id<String> opStaffsInOperationTeamsId();
+    //Id<String> opStaffsInOperationTeamsId();
 
-    Optional<Map<OperationTeam, OPStaff>> findOPStaffsInOperationTeam(Id<String> id);
+    //Optional<Map<OperationTeam, OPStaff>> findOPStaffsInOperationTeam(Id<String> id);
     Boolean assignOPStaffToOperationTeam(Id<OperationTeam> operationTeamId, Id<OPStaff> opStaffId);
 
+    Boolean findOperationTeamOPStaffImpl(Id<OperationTeam> operationTeamId, Id<OPStaff> opStaffId);
+
 
 
 
diff --git a/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java b/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java
index acacacb..daf3079 100644
--- a/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java
+++ b/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java
@@ -88,12 +88,12 @@ class JDBCRepository implements Repository
    */
   private static final String CREATE_OP_STAFF_IN_OPERATION_TEAM_TABLE = """
     CREATE TABLE IF NOT EXISTS opStaffsInOperationTeams(
-      id VARCHAR(50) PRIMARY KEY,
       operationTeamId VARCHAR(50),
       opStaffId VARCHAR(50),
       lastUpdate TIMESTAMP NOT NULL,
       FOREIGN KEY (operationTeamId) REFERENCES operationTeams(id),
-      FOREIGN KEY (opStaffId) REFERENCES opStaffs(id)
+      FOREIGN KEY (opStaffId) REFERENCES opStaffs(id),
+      PRIMARY KEY (operationTeamId, opStaffId)
     );
   """;
 
@@ -245,9 +245,8 @@ class JDBCRepository implements Repository
   private String insertSQL(Id<OperationTeam> operationTeamId, Id<OPStaff> opStaffId) {
     return
             "INSERT INTO opStaffsInOperationTeams(" +
-                    "id,operationTeamId,opStaffId,lastUpdate" +
+                    "operationTeamId,opStaffId,lastUpdate" +
                     ") VALUES (" +
-                    sqlValue(opStaffsInOperationTeamsId()) + "," +
                     sqlValue(operationTeamId.value()) + "," +
                     sqlValue(opStaffId.value()) + "," +
                     sqlValue(Instant.now()) +
@@ -659,13 +658,15 @@ class JDBCRepository implements Repository
     return null;
   }
 
+  /*
   @Override
   public Id<String> opStaffsInOperationTeamsId() {
     var id = new Id<String>(randomUUID().toString());
 
     return findOPStaffsInOperationTeam(id).isEmpty() ? id : opStaffsInOperationTeamsId();
   }
-
+*/
+  /*
   @Override
   public Optional<Map<OperationTeam, OPStaff>> findOPStaffsInOperationTeam(Id<String> id) {
     try (
@@ -698,7 +699,7 @@ class JDBCRepository implements Repository
     } catch (SQLException e){
       throw new RuntimeException(e);
     }
-  }
+  }*/
 
   @Override
   public Boolean assignOPStaffToOperationTeam(Id<OperationTeam> operationTeamId, Id<OPStaff> opStaffId) {
@@ -799,6 +800,32 @@ class JDBCRepository implements Repository
     }
   }
 
+
+  public Boolean findOperationTeamOPStaffImpl(Id<OperationTeam> operationTeamId, Id<OPStaff> opStaffId){
+
+    try(
+            var result =
+                    conn.createStatement()
+                            .executeQuery("SELECT DISTINCT opStaffs.id, opStaffs.role, opStaffs.specialty, opStaffs.lastupdate " +
+                                    "FROM opStaffs " +
+                                    "JOIN opStaffsInOperationTeams " +
+                                    "ON (opStaffs.id = opStaffsInOperationTeams.opstaffid) " +
+                                    "WHERE opStaffsInOperationTeams.operationteamid = '"+operationTeamId.value()+"'" +
+                                    "AND opStaffsInOperationTeams.opStaffId = '"+opStaffId.value()+"';");
+            //SELECT DISTINCT opStaffs.id, opStaffs.role, opStaffs.specialty, opStaffs.lastupdate FROM opStaffs JOIN opStaffsInOperationTeams ON (opStaffs.id = '4444') WHERE opStaffsInOperationTeams.operationteamid = '31';S
+    ) {
+      //SELECT DISTINCT opstaff.id, opstaff.role, opstaff.specialty, opstaff.lastupdate, teammember.operationteamid FROM opstaff JOIN teammember ON (opstaff.id = teammember.opstaffid);
+      //SELECT DISTINCT opstaff.id, opstaff.role, opstaff.specialty, opstaff.lastupdate, teammember.operationteamid FROM opstaff JOIN teammember ON (opstaff.id = teammember.opstaffid) WHERE teammember.operationteamid= '31313131';
+
+      while (result.next()) {
+        return true;
+      }
+      return false;
+    }catch(SQLException e){
+      throw new RuntimeException(e);
+    }
+  }
+
   //endregion
 
 
diff --git a/opp/jdbc-repo-impl/src/test/java/Tests.java b/opp/jdbc-repo-impl/src/test/java/Tests.java
index 8d9464a..4fd5d28 100644
--- a/opp/jdbc-repo-impl/src/test/java/Tests.java
+++ b/opp/jdbc-repo-impl/src/test/java/Tests.java
@@ -267,6 +267,28 @@ public final class Tests
     assertTrue(result);
   }
 
+  @Test
+  public void testAssignStaffToOperationTeamProcess() throws Exception {
+
+    OPStaff.CreateOPStaff createOPStaffCommand = new OPStaff.CreateOPStaff(
+            Role.SURGEON,
+            Specialty.Gastroenterology
+    );
+
+    OPStaff createdOPStaff = opStaffService.process(createOPStaffCommand);
+
+    OperationTeam.AssignStaff operationTeamCommand = new OperationTeam.AssignStaff(
+            testOperationTeam.id(),
+            createdOPStaff
+    );
+
+    OperationTeam returnedOperationTeam = operationTeamService.process(operationTeamCommand);
+
+    Boolean result = repo.findOperationTeamOPStaffImpl(returnedOperationTeam.id(),createdOPStaff.id());
+
+    assertTrue(result);
+  }
+
 
 
   //@Test
-- 
GitLab