87: Save cloned RoughDraftApproval

This commit is contained in:
Tom Zhao 2025-04-02 13:18:06 +02:00
parent 8a050491f9
commit 57774b1c32
4 changed files with 33 additions and 12 deletions

@ -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

@ -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

@ -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);
}

@ -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);
}
}