@@ -17,6 +17,7 @@ public class ProjectDuplicationService : IProjectDuplicationService
1717 private readonly IDiscreteProbabilityService _discreteProbabilityService ;
1818 private readonly IDiscreteUtilityService _discreteUtilityService ;
1919 private readonly IAssessmentService _assessmentService ;
20+ private readonly IObjectiveService _objectiveService ;
2021 private readonly IDecisionQualityAssessmentService _decisionQualityAssessmentService ;
2122 private readonly IBoardNodeService _boardNodeService ; private readonly IMemoryCache _cache ;
2223
@@ -31,7 +32,8 @@ public ProjectDuplicationService(
3132 IMemoryCache cache ,
3233 IAssessmentService assessmentService ,
3334 IDecisionQualityAssessmentService decisionQualityAssessmentService ,
34- IBoardNodeService boardNodeService )
35+ IBoardNodeService boardNodeService ,
36+ IObjectiveService objectiveService )
3537 {
3638 _duplicationRepo = duplicationRepo ;
3739 _projectService = projectService ;
@@ -43,6 +45,7 @@ public ProjectDuplicationService(
4345 _assessmentService = assessmentService ;
4446 _decisionQualityAssessmentService = decisionQualityAssessmentService ;
4547 _boardNodeService = boardNodeService ;
48+ _objectiveService = objectiveService ;
4649 _cache = cache ;
4750 }
4851
@@ -115,7 +118,7 @@ public async Task<ProjectOutgoingDto> DuplicateAsync(Guid projectId, UserOutgoin
115118 if ( discreteUtilityDtos . Count > 0 )
116119 await _discreteUtilityService . CreateAsync ( discreteUtilityDtos ) ;
117120
118- var strategyDtos = CreateStrategies ( fullProject . Strategies , s => s . Options , newProjectId , mappings ) ;
121+ var strategyDtos = CreateStrategies ( fullProject . strategies , s => s . Options , newProjectId , mappings ) ;
119122 if ( strategyDtos . Count > 0 )
120123 await _strategyService . CreateAsync ( strategyDtos , user ) ;
121124
@@ -130,7 +133,7 @@ public async Task<ProjectOutgoingDto> DuplicateAsync(Guid projectId, UserOutgoin
130133 if ( assessmentDtos . Count > 0 )
131134 await _assessmentService . CreateAsync ( assessmentDtos , user ) ;
132135
133- var decisionQualityAssessmentDtos = CreateDecisionQualityAssessments ( fullProject . Assessments . SelectMany ( a => a . DecisionQualityAssessments ?? [ ] ) , assessmentIdMap ) ;
136+ var decisionQualityAssessmentDtos = CreateDecisionQualityAssessments ( fullProject . Assessments . SelectMany ( a => a . DecisionQualityAssessments ?? [ ] ) , assessmentIdMap , newProjectId ) ;
134137 if ( decisionQualityAssessmentDtos . Count > 0 )
135138 await _decisionQualityAssessmentService . CreateAsync ( decisionQualityAssessmentDtos , user , ct ) ;
136139
@@ -214,8 +217,10 @@ public async Task<ProjectOutgoingDto> DuplicateAsync(Guid projectId, UserOutgoin
214217 if ( discreteUtilityDtos . Count > 0 )
215218 await _discreteUtilityService . CreateAsync ( discreteUtilityDtos ) ;
216219
217- var strategyDtos = CreateStrategies ( dto . Projects . Strategies , s => s . Options , newProjectId , mappings ) ;
218-
220+ var objectiveDtos = CreateObjectives ( dto . Objectives , newProjectId ) ;
221+ if ( objectiveDtos . Count > 0 )
222+ await _objectiveService . CreateAsync ( objectiveDtos , user ) ;
223+ var strategyDtos = CreateStrategies ( dto . Strategies , s => s . Options , newProjectId , mappings ) ;
219224 if ( strategyDtos . Count > 0 )
220225 await _strategyService . CreateAsync ( strategyDtos , user ) ;
221226
@@ -226,7 +231,7 @@ public async Task<ProjectOutgoingDto> DuplicateAsync(Guid projectId, UserOutgoin
226231 if ( assessmentDtos . Count > 0 )
227232 await _assessmentService . CreateAsync ( assessmentDtos , user ) ;
228233
229- var decisionQualityAssessmentDtos = CreateDecisionQualityAssessments ( dto . Assessments . SelectMany ( a => a . DecisionQualityAssessments ?? [ ] ) , assessmentIdMap ) ;
234+ var decisionQualityAssessmentDtos = CreateDecisionQualityAssessments ( dto . Assessments . SelectMany ( a => a . DecisionQualityAssessments ?? [ ] ) , assessmentIdMap , newProjectId ) ;
230235 if ( decisionQualityAssessmentDtos . Count > 0 )
231236 await _decisionQualityAssessmentService . CreateAsync ( decisionQualityAssessmentDtos , user , ct ) ;
232237
@@ -247,15 +252,6 @@ private static ProjectCreateDto CreateProjectDto(FullProjectForDuplicationDto fu
247252 OpportunityStatement = fullProject . OpportunityStatement ,
248253 Public = fullProject . Public ,
249254 EndDate = fullProject . EndDate ,
250- Objectives = fullProject . Objectives
251- . Select ( o => new ObjectiveViaProjectDto
252- {
253- Id = Guid . NewGuid ( ) ,
254- Name = o . Name ,
255- Description = o . Description ,
256- Type = o . Type
257- } )
258- . ToList ( ) ,
259255 Users = fullProject . Users
260256 . Select ( u => new ProjectRoleCreateDto
261257 {
@@ -279,15 +275,6 @@ private static ProjectCreateDto CreateProjectDtoFromImport(ProjectIncomingDto pr
279275 OpportunityStatement = project . OpportunityStatement ,
280276 Public = project . Public ,
281277 EndDate = project . EndDate ,
282- Objectives = project . Objectives
283- . Select ( o => new ObjectiveViaProjectDto
284- {
285- Id = Guid . NewGuid ( ) ,
286- Name = o . Name ,
287- Description = o . Description ,
288- Type = o . Type
289- } )
290- . ToList ( ) ,
291278 Users = project . Users
292279 . Select ( u => new ProjectRoleCreateDto
293280 {
@@ -453,6 +440,29 @@ private static (UtilityIncomingDto? Utility, List<DiscreteUtilityDto> DiscreteUt
453440 return ( utilityDto , mappedDiscreteUtilities ) ;
454441 }
455442
443+ private static List < ObjectiveIncomingDto > CreateObjectives ( IEnumerable < ObjectiveOutgoingDto > objectives , Guid newProjectId )
444+ {
445+ return objectives . Select ( o => new ObjectiveIncomingDto
446+ {
447+ Id = Guid . NewGuid ( ) ,
448+ Name = o . Name ,
449+ Description = o . Description ,
450+ Type = o . Type ,
451+ ProjectId = newProjectId
452+ } ) . ToList ( ) ;
453+ }
454+
455+ private static List < ObjectiveIncomingDto > CreateObjectives ( IEnumerable < ObjectiveIncomingDto > objectives , Guid newProjectId )
456+ {
457+ return objectives . Select ( o => new ObjectiveIncomingDto
458+ {
459+ Id = Guid . NewGuid ( ) ,
460+ Name = o . Name ,
461+ Description = o . Description ,
462+ Type = o . Type ,
463+ ProjectId = newProjectId
464+ } ) . ToList ( ) ;
465+ }
456466 private static List < StrategyIncomingDto > CreateStrategies < TStrategy > (
457467 IEnumerable < TStrategy > strategies ,
458468 Func < TStrategy , IEnumerable < OptionDto > > getOptions ,
@@ -498,12 +508,14 @@ private static (List<AssessmentIncomingDto> Dtos, Dictionary<Guid, Guid> IdMap)
498508 }
499509 private static List < DecisionQualityAssessmentIncomingDto > CreateDecisionQualityAssessments < TDecisionQualityAssessment > (
500510 IEnumerable < TDecisionQualityAssessment > decisionQualityAssessments ,
501- Dictionary < Guid , Guid > assessmentIdMap ) where TDecisionQualityAssessment : DecisionQualityAssessmentDto
511+ Dictionary < Guid , Guid > assessmentIdMap ,
512+ Guid newProjectId ) where TDecisionQualityAssessment : DecisionQualityAssessmentDto
502513 {
503514 return decisionQualityAssessments . Select ( decisionQualityAssessment => new DecisionQualityAssessmentIncomingDto
504515 {
505516 Id = Guid . NewGuid ( ) ,
506517 AssessmentId = assessmentIdMap . GetValueOrDefault ( decisionQualityAssessment . AssessmentId , decisionQualityAssessment . AssessmentId ) ,
518+ ProjectId = newProjectId ,
507519 AppropriateFrame = decisionQualityAssessment . AppropriateFrame ,
508520 TradeOffAnalysis = decisionQualityAssessment . TradeOffAnalysis ,
509521 ReasoningCorrectness = decisionQualityAssessment . ReasoningCorrectness ,
0 commit comments