diff --git a/opp/core/src/main/java/Repository.java b/opp/core/src/main/java/Repository.java index 85053f7b13e188408695ae0da9db7ca6c710fb87..0ed87a3d80a9bbd0bd333c761d2bbcdf8d6c3803 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 0000000000000000000000000000000000000000..7055ac5c2caf3c0e0ee41051dc2c02749a67b497 --- /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 0000000000000000000000000000000000000000..d4ea4062d3a46a872ecce7c866a039a8dce6dcdb --- /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 0000000000000000000000000000000000000000..faa401bdeaf0af240dd633a5c07195297be73a8a --- /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 f5361dbc9274bf87f44b138c4a32a10ca29595b4..83ee348b6c6cccff5f8da5b303de725a128689b0 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 0a0deaede551a43ffea2917e660ef7e510c03f72..29eb524d10ba85770a33bad1e99fd7d13aedd874 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(); + } + }