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( public SplitOrRestartProjectServiceImpl SplitOrRestartProjectService(
ProjectService projectService, ProjectService projectService,
FinalSeminarService finalSeminarService, FinalSeminarService finalSeminarService,
RoughDraftApprovalService roughDraftApprovalService RoughDraftApprovalService roughDraftApprovalService,
EventBus eventBus
) { ) {
return new SplitOrRestartProjectServiceImpl(projectService, finalSeminarService, roughDraftApprovalService); return new SplitOrRestartProjectServiceImpl(projectService, finalSeminarService, roughDraftApprovalService, eventBus);
} }
@Bean @Bean

@ -1,35 +1,41 @@
package se.su.dsv.scipro.project.split; 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.inject.Inject;
import jakarta.transaction.Transactional; import jakarta.transaction.Transactional;
import java.util.List;
import java.util.Optional;
import se.su.dsv.scipro.finalseminar.FinalSeminarService; import se.su.dsv.scipro.finalseminar.FinalSeminarService;
import se.su.dsv.scipro.project.Project; import se.su.dsv.scipro.project.Project;
import se.su.dsv.scipro.project.ProjectService; import se.su.dsv.scipro.project.ProjectService;
import se.su.dsv.scipro.project.ProjectStatus; import se.su.dsv.scipro.project.ProjectStatus;
import se.su.dsv.scipro.project.QProject; import se.su.dsv.scipro.project.QProject;
import se.su.dsv.scipro.reviewing.RoughDraftApproval; 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.reviewing.RoughDraftApprovalService;
import se.su.dsv.scipro.system.User; 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 { public class SplitOrRestartProjectServiceImpl implements SplitOrRestartProjectService {
private final ProjectService projectService; private final ProjectService projectService;
private final FinalSeminarService finalSeminarService; private final FinalSeminarService finalSeminarService;
private final RoughDraftApprovalService roughDraftApprovalService; private final RoughDraftApprovalService roughDraftApprovalService;
private final EventBus eventBus;
@Inject @Inject
public SplitOrRestartProjectServiceImpl( public SplitOrRestartProjectServiceImpl(
ProjectService projectService, ProjectService projectService,
FinalSeminarService finalSeminarService, FinalSeminarService finalSeminarService,
RoughDraftApprovalService roughDraftApprovalService RoughDraftApprovalService roughDraftApprovalService,
EventBus eventBus
) { ) {
this.projectService = projectService; this.projectService = projectService;
this.finalSeminarService = finalSeminarService; this.finalSeminarService = finalSeminarService;
this.roughDraftApprovalService = roughDraftApprovalService; this.roughDraftApprovalService = roughDraftApprovalService;
this.eventBus = eventBus;
} }
@Override @Override
@ -95,12 +101,18 @@ public class SplitOrRestartProjectServiceImpl implements SplitOrRestartProjectSe
childProject.setRootProjectId( childProject.setRootProjectId(
project.getRootProjectId() != null ? project.getRootProjectId() : project.getId() project.getRootProjectId() != null ? project.getRootProjectId() : project.getId()
); );
childProject.setCloneTimestamp(Date.from(Instant.now()));
// Todo: add RoughDraftApproval if it's 'APPROVED'
if (result.roughDraftApproval() != null) {}
childProject = projectService.save(childProject); 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 // Parent project will set as inactive

@ -1,3 +1,5 @@
package se.su.dsv.scipro.reviewing; 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) { public Optional<RoughDraftApproval> findBy(Project project) {
return Optional.ofNullable(findOne(QRoughDraftApproval.roughDraftApproval.project.eq(project))); return Optional.ofNullable(findOne(QRoughDraftApproval.roughDraftApproval.project.eq(project)));
} }
@Override
@Transactional
public RoughDraftApproval saveCloned(RoughDraftApproval approval) {
return save(approval);
}
} }