From 57774b1c3260102176fbf5dc9076e13f0cfb399f Mon Sep 17 00:00:00 2001 From: Tom Zhao <tom.zhao@dsv.su.se> Date: Wed, 2 Apr 2025 13:18:06 +0200 Subject: [PATCH] 87: Save cloned RoughDraftApproval --- .../java/se/su/dsv/scipro/CoreConfig.java | 5 ++-- .../SplitOrRestartProjectServiceImpl.java | 30 +++++++++++++------ .../reviewing/RoughDraftApprovalService.java | 4 ++- .../RoughDraftApprovalServiceImpl.java | 6 ++++ 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/core/src/main/java/se/su/dsv/scipro/CoreConfig.java b/core/src/main/java/se/su/dsv/scipro/CoreConfig.java index b0f924f458..16a400668c 100644 --- a/core/src/main/java/se/su/dsv/scipro/CoreConfig.java +++ b/core/src/main/java/se/su/dsv/scipro/CoreConfig.java @@ -817,9 +817,10 @@ public class CoreConfig { public SplitOrRestartProjectServiceImpl SplitOrRestartProjectService( ProjectService projectService, FinalSeminarService finalSeminarService, - RoughDraftApprovalService roughDraftApprovalService + RoughDraftApprovalService roughDraftApprovalService, + EventBus eventBus ) { - return new SplitOrRestartProjectServiceImpl(projectService, finalSeminarService, roughDraftApprovalService); + return new SplitOrRestartProjectServiceImpl(projectService, finalSeminarService, roughDraftApprovalService, eventBus); } @Bean diff --git a/core/src/main/java/se/su/dsv/scipro/project/split/SplitOrRestartProjectServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/project/split/SplitOrRestartProjectServiceImpl.java index 5f52b113c3..877274f46e 100644 --- a/core/src/main/java/se/su/dsv/scipro/project/split/SplitOrRestartProjectServiceImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/project/split/SplitOrRestartProjectServiceImpl.java @@ -1,35 +1,41 @@ package se.su.dsv.scipro.project.split; -import com.querydsl.core.types.dsl.BooleanExpression; +import com.google.common.eventbus.EventBus; import jakarta.inject.Inject; import jakarta.transaction.Transactional; -import java.util.List; -import java.util.Optional; import se.su.dsv.scipro.finalseminar.FinalSeminarService; import se.su.dsv.scipro.project.Project; import se.su.dsv.scipro.project.ProjectService; import se.su.dsv.scipro.project.ProjectStatus; import se.su.dsv.scipro.project.QProject; import se.su.dsv.scipro.reviewing.RoughDraftApproval; +import se.su.dsv.scipro.reviewing.RoughDraftApprovalApprovedEvent; import se.su.dsv.scipro.reviewing.RoughDraftApprovalService; import se.su.dsv.scipro.system.User; -import se.su.dsv.scipro.util.Pair; + +import java.time.Instant; +import java.util.Date; +import java.util.List; +import java.util.Optional; public class SplitOrRestartProjectServiceImpl implements SplitOrRestartProjectService { private final ProjectService projectService; private final FinalSeminarService finalSeminarService; private final RoughDraftApprovalService roughDraftApprovalService; + private final EventBus eventBus; @Inject public SplitOrRestartProjectServiceImpl( ProjectService projectService, FinalSeminarService finalSeminarService, - RoughDraftApprovalService roughDraftApprovalService + RoughDraftApprovalService roughDraftApprovalService, + EventBus eventBus ) { this.projectService = projectService; this.finalSeminarService = finalSeminarService; this.roughDraftApprovalService = roughDraftApprovalService; + this.eventBus = eventBus; } @Override @@ -95,12 +101,18 @@ public class SplitOrRestartProjectServiceImpl implements SplitOrRestartProjectSe childProject.setRootProjectId( project.getRootProjectId() != null ? project.getRootProjectId() : project.getId() ); - - // Todo: add RoughDraftApproval if it's 'APPROVED' - if (result.roughDraftApproval() != null) {} + childProject.setCloneTimestamp(Date.from(Instant.now())); childProject = projectService.save(childProject); - // Todo: Send event to eventBus to synchronize eventual Phase Two Approval with MileStone + + // Add cloned RoughDraftApproval if it's 'APPROVED' + RoughDraftApproval rda = result.roughDraftApproval(); + if (rda != null && rda.isApproved()) { + RoughDraftApproval clonedRda = roughDraftApprovalService.saveCloned(rda.cloneToProject(childProject)); + + // Send event to eventBus to synchronize eventual Phase Two Approval with MileStone + eventBus.post(new RoughDraftApprovalApprovedEvent(clonedRda)); + } } // Parent project will set as inactive diff --git a/core/src/main/java/se/su/dsv/scipro/reviewing/RoughDraftApprovalService.java b/core/src/main/java/se/su/dsv/scipro/reviewing/RoughDraftApprovalService.java index a4e41dfa40..308ff71d00 100644 --- a/core/src/main/java/se/su/dsv/scipro/reviewing/RoughDraftApprovalService.java +++ b/core/src/main/java/se/su/dsv/scipro/reviewing/RoughDraftApprovalService.java @@ -1,3 +1,5 @@ package se.su.dsv.scipro.reviewing; -public interface RoughDraftApprovalService extends ReviewerApprovalService<RoughDraftApproval> {} +public interface RoughDraftApprovalService extends ReviewerApprovalService<RoughDraftApproval> { + RoughDraftApproval saveCloned(RoughDraftApproval approval); +} diff --git a/core/src/main/java/se/su/dsv/scipro/reviewing/RoughDraftApprovalServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/reviewing/RoughDraftApprovalServiceImpl.java index e0bb356aad..413444cd07 100644 --- a/core/src/main/java/se/su/dsv/scipro/reviewing/RoughDraftApprovalServiceImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/reviewing/RoughDraftApprovalServiceImpl.java @@ -71,4 +71,10 @@ public class RoughDraftApprovalServiceImpl public Optional<RoughDraftApproval> findBy(Project project) { return Optional.ofNullable(findOne(QRoughDraftApproval.roughDraftApproval.project.eq(project))); } + + @Override + @Transactional + public RoughDraftApproval saveCloned(RoughDraftApproval approval) { + return save(approval); + } }