From f75d827a26ed6eb58d15855ec03b15d8a3aab523 Mon Sep 17 00:00:00 2001 From: agoer <alexander.goerlitz@student.reutlingen-university.de> Date: Tue, 18 Jun 2024 13:05:33 +0200 Subject: [PATCH] Implemented Teammember with Reference to OPstaff and OperationTeam and added the method assignStaff() --- opp/core/src/main/java/Repository.java | 7 +++ opp/core/src/main/java/TeamMember.java | 26 ++++++++ opp/core/src/main/java/TeamMemberImpl.java | 39 ++++++++++++ opp/core/src/main/java/TeamMemberService.java | 4 ++ .../src/main/java/JDBCRepository.java | 61 +++++++++++++++++++ opp/jdbc-repo-impl/src/test/java/Tests.java | 30 +++++++-- 6 files changed, 163 insertions(+), 4 deletions(-) create mode 100644 opp/core/src/main/java/TeamMember.java create mode 100644 opp/core/src/main/java/TeamMemberImpl.java create mode 100644 opp/core/src/main/java/TeamMemberService.java diff --git a/opp/core/src/main/java/Repository.java b/opp/core/src/main/java/Repository.java index 85053f7..0ed87a3 100644 --- a/opp/core/src/main/java/Repository.java +++ b/opp/core/src/main/java/Repository.java @@ -83,4 +83,11 @@ public interface Repository { void saveOperationTeam(OperationTeam operationTeam) throws Exception; OperationTeam deleteOperationTeam(Id<OperationTeam> id) throws SQLException; + + + + + Id<TeamMember> teamMemberId(); + + void saveTeamMember(TeamMember teamMember) throws Exception; } diff --git a/opp/core/src/main/java/TeamMember.java b/opp/core/src/main/java/TeamMember.java new file mode 100644 index 0000000..7055ac5 --- /dev/null +++ b/opp/core/src/main/java/TeamMember.java @@ -0,0 +1,26 @@ +import java.time.Instant; + +public record TeamMember ( + + Id<TeamMember> teamMemberId, + + Id<OperationTeam> operationTeamId, + + Id<OPStaff> opStaffId, + + Instant lastUpdate +) { + + public sealed interface Command permits TeamMember.AssignStaff, TeamMember.RemoveStaff{} + + public static record AssignStaff( + Id<OperationTeam> operationTeamId, + Id<OPStaff> opStaffId + ) implements TeamMember.Command {} + + public static record RemoveStaff( + Id<OperationTeam> operationTeamId, + Id<OPStaff> opStaffId + ) implements TeamMember.Command {} + +} diff --git a/opp/core/src/main/java/TeamMemberImpl.java b/opp/core/src/main/java/TeamMemberImpl.java new file mode 100644 index 0000000..d4ea406 --- /dev/null +++ b/opp/core/src/main/java/TeamMemberImpl.java @@ -0,0 +1,39 @@ +import java.time.Instant; + +public class TeamMemberImpl implements TeamMemberService{ + + private final Repository repo; + + public TeamMemberImpl(Repository repo) { + this.repo = repo; + } + + public TeamMember process(TeamMember.Command cmd) throws Exception { + return switch(cmd){ + case TeamMember.AssignStaff as -> assignStaffimpl(as); + case TeamMember.RemoveStaff rs -> removeStaffimpl(rs); + }; + } + + private TeamMember assignStaffimpl(TeamMember.AssignStaff as) { + TeamMember teammember = + new TeamMember( + repo.teamMemberId(), + as.operationTeamId(), + as.opStaffId(), + Instant.now() + ); + return teammember; + } + + private TeamMember removeStaffimpl(TeamMember.RemoveStaff rs) { + TeamMember teammember = + new TeamMember( + repo.teamMemberId(), + rs.operationTeamId(), + rs.opStaffId(), + Instant.now() + ); + return teammember; + } +} diff --git a/opp/core/src/main/java/TeamMemberService.java b/opp/core/src/main/java/TeamMemberService.java new file mode 100644 index 0000000..faa401b --- /dev/null +++ b/opp/core/src/main/java/TeamMemberService.java @@ -0,0 +1,4 @@ +public interface TeamMemberService { + + public TeamMember process(TeamMember.Command cmd) throws Exception; +} diff --git a/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java b/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java index f5361db..83ee348 100644 --- a/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java +++ b/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java @@ -52,6 +52,7 @@ class JDBCRepository implements Repository stmt.execute(CREATE_OPERATION_TABLE); stmt.execute(CREATE_OPSTAFF_TABLE); stmt.execute(CREATE_OPERATIONTEAM_TABLE); + stmt.execute(CREATE_TEAMMEMBER_TABLE); } catch (SQLException e){ throw new RuntimeException(e); @@ -622,6 +623,66 @@ class JDBCRepository implements Repository ); """; + + + + + /** + * Returns a new generated ID in the teammember-SQLTable + * If the generated ID is already used, generate another one. + * @return teammemberID + */ + @Override + public Id<TeamMember> teamMemberId() { + + var id = new Id<TeamMember>(randomUUID().toString()); + + return id; //TODO + // findOperation(id).isEmpty() ? id : operationId(); + } + + public void saveTeamMember(TeamMember teamMember) throws Exception{ + + try( + var stmt = conn.createStatement() + ){ + //TODO + /*var sql = + findOPStaff(opStaff.id()).isPresent() ? + updateOPStaffSQL(opStaff) : + insertOPStaffSQL(opStaff);*/ + var sql = saveTeamMemberSQL(teamMember); + + stmt.executeUpdate(sql); + + }catch(SQLException e){ + throw new RuntimeException(e); + } + } + + private static String saveTeamMemberSQL(TeamMember teamMember){ + return + "INSERT INTO teammember(" + + "id,operationteamid,opstaffid,lastUpdate" + + ") VALUES (" + + sqlValue(teamMember.teamMemberId().value()) + "," + + sqlValue(teamMember.operationTeamId()) + "," + + sqlValue(teamMember.opStaffId()) + "," + + sqlValue(teamMember.lastUpdate()) + + ");"; + } + + private static final String CREATE_TEAMMEMBER_TABLE = """ + CREATE TABLE IF NOT EXISTS teammember( + id VARCHAR(50) PRIMARY KEY, + operationteamid VARCHAR(50), + opstaffid VARCHAR(50), + lastUpdate TIMESTAMP NOT NULL, + FOREIGN KEY (operationteamid) REFERENCES operationteam(id), + FOREIGN KEY (opstaffid) REFERENCES opstaff(id) + ); + """; + } diff --git a/opp/jdbc-repo-impl/src/test/java/Tests.java b/opp/jdbc-repo-impl/src/test/java/Tests.java index 0a0deae..29eb524 100644 --- a/opp/jdbc-repo-impl/src/test/java/Tests.java +++ b/opp/jdbc-repo-impl/src/test/java/Tests.java @@ -29,6 +29,10 @@ public final class Tests private static OperationTeamService operationTeamService; + private static TeamMember testTeamMember = null; + + private static TeamMemberService teamMemberService; + @BeforeClass public static void init() throws Exception { @@ -57,14 +61,21 @@ public final class Tests testOperationTeam = new OperationTeam( - new Id<>("1212121212121"), - ("Cooles Team"), + new Id<>("31313131"), + ("NochCooler"), Instant.now() ); operationTeamService = new OperationTeamImpl(repo) { }; + testTeamMember = new TeamMember( + new Id<>("newTeamMember1"), + testOperationTeam.operationTeamId(), + testOPStaff.id(), + Instant.now() + ); + } //@Test @@ -282,7 +293,7 @@ public final class Tests } - @Test + //@Test public void testCreateOperationTeam() throws Exception{ try { @@ -292,7 +303,7 @@ public final class Tests } } - @Test + //@Test public void testDeleteOperationTeam() throws Exception{ var id = new Id<OperationTeam>("1212"); @@ -302,6 +313,17 @@ public final class Tests ); OperationTeam deleteOperationTeam = operationTeamService.process(deleteCommand); + } + + @Test + public void testInsertTeamMember1() throws Exception{ + + try { + repo.saveTeamMember(testTeamMember); + } catch (Exception e){ + e.printStackTrace(); + } + } -- GitLab