@@ -493,12 +493,12 @@ public async Task<ActionResult> SaveWeblinkDetailAsync([FromBody] WebLinkViewMod
493493 public async Task < ActionResult > SaveCaseDetailAsync ( [ FromBody ] CaseViewModel request )
494494 {
495495 var existingResourceState = await this . resourceService . GetResourceVersionExtendedAsync ( request . ResourceVersionId ) ;
496- int resourceVersionId = await this . contributeService . SaveCaseDetailAsync ( request ) ;
497- if ( existingResourceState . CaseDetails ? . BlockCollection != null )
496+ if ( existingResourceState ? . CaseDetails ? . BlockCollection != null )
498497 {
499- this . RemoveBlockCollectionFiles ( existingResourceState . CaseDetails . BlockCollection , request . BlockCollection ) ;
498+ await this . RemoveBlockCollectionFiles ( request . ResourceVersionId , existingResourceState . CaseDetails . BlockCollection , request . BlockCollection ) ;
500499 }
501500
501+ int resourceVersionId = await this . contributeService . SaveCaseDetailAsync ( request ) ;
502502 return this . Ok ( resourceVersionId ) ;
503503 }
504504
@@ -512,12 +512,12 @@ public async Task<ActionResult> SaveCaseDetailAsync([FromBody] CaseViewModel req
512512 public async Task < ActionResult > SaveAssessmentDetailAsync ( [ FromBody ] AssessmentViewModel request )
513513 {
514514 var existingResourceState = await this . resourceService . GetResourceVersionExtendedAsync ( request . ResourceVersionId ) ;
515- int resourceVersionId = await this . contributeService . SaveAssessmentDetailAsync ( request ) ;
516515 if ( existingResourceState != null && existingResourceState . AssessmentDetails != null )
517516 {
518- this . RemoveBlockCollectionFiles ( existingResourceState . AssessmentDetails , request ) ;
517+ await this . RemoveBlockCollectionFiles ( request . ResourceVersionId , existingResourceState . AssessmentDetails , request ) ;
519518 }
520519
520+ int resourceVersionId = await this . contributeService . SaveAssessmentDetailAsync ( request ) ;
521521 return this . Ok ( resourceVersionId ) ;
522522 }
523523
@@ -638,23 +638,24 @@ private async Task<bool> UserCanEditCatalogue(int catalogueId)
638638 return await this . catalogueService . CanCurrentUserEditCatalogue ( catalogueId ) ;
639639 }
640640
641- private void RemoveBlockCollectionFiles ( AssessmentViewModel existingModel , AssessmentViewModel newModel )
641+ private async Task RemoveBlockCollectionFiles ( int resourceVersionId , AssessmentViewModel existingModel , AssessmentViewModel newModel )
642642 {
643643 if ( existingModel is { EndGuidance : { } } && existingModel . EndGuidance . Blocks != null )
644644 {
645- this . RemoveBlockCollectionFiles ( existingModel . EndGuidance , newModel . EndGuidance ) ;
645+ await this . RemoveBlockCollectionFiles ( resourceVersionId , existingModel . EndGuidance , newModel . EndGuidance ) ;
646646 }
647647
648648 if ( existingModel is { AssessmentContent : { } } && existingModel . AssessmentContent . Blocks != null )
649649 {
650- this . RemoveBlockCollectionFiles ( existingModel . AssessmentContent , newModel . AssessmentContent ) ;
650+ await this . RemoveBlockCollectionFiles ( resourceVersionId , existingModel . AssessmentContent , newModel . AssessmentContent ) ;
651651 }
652652 }
653653
654- private void RemoveBlockCollectionFiles ( BlockCollectionViewModel existingResource , BlockCollectionViewModel newResource )
654+ private async Task RemoveBlockCollectionFiles ( int resourceVersionId , BlockCollectionViewModel existingResource , BlockCollectionViewModel newResource )
655655 {
656656 try
657657 {
658+ var obsoleteFiles = await this . resourceService . GetObsoleteResourceFile ( resourceVersionId , true ) ;
658659 var filePaths = new List < string > ( ) ;
659660 if ( existingResource != null )
660661 {
@@ -706,8 +707,8 @@ private void RemoveBlockCollectionFiles(BlockCollectionViewModel existingResourc
706707 {
707708 foreach ( var oldblock in existingImages )
708709 {
709- var entry = newBlocks . FirstOrDefault ( x => x . BlockType == BlockType . Media && x . MediaBlock != null && x . MediaBlock . MediaType == MediaType . Image && x . MediaBlock . Image != null && x . MediaBlock ? . Image ? . File ? . FileId == oldblock . MediaBlock ? . Image ? . File ? . FileId ) ;
710- if ( entry == null )
710+ var entry = newBlocks . FirstOrDefault ( x => x . BlockType == BlockType . Media && x . MediaBlock != null && x . MediaBlock . MediaType == MediaType . Image && x . MediaBlock . Image != null && x . MediaBlock ? . Image ? . File ? . FileId == oldblock . MediaBlock ? . Image ? . File ? . FileId ) ;
711+ if ( entry == null )
711712 {
712713 filePaths . Add ( oldblock ? . MediaBlock ? . Image ? . File ? . FilePath ) ;
713714 }
@@ -771,7 +772,18 @@ private void RemoveBlockCollectionFiles(BlockCollectionViewModel existingResourc
771772
772773 if ( filePaths != null && filePaths . Any ( ) )
773774 {
774- _ = Task . Run ( async ( ) => { await this . fileService . PurgeResourceFile ( null , filePaths ) ; } ) ;
775+ var deleteList = new List < string > ( ) ;
776+ foreach ( var e in filePaths )
777+ {
778+ if ( ! obsoleteFiles . Contains ( e ) )
779+ {
780+ continue ;
781+ }
782+
783+ deleteList . Add ( e ) ;
784+ }
785+
786+ _ = Task . Run ( async ( ) => { await this . fileService . PurgeResourceFile ( null , deleteList ) ; } ) ;
775787 }
776788 }
777789 catch ( Exception ex )
@@ -838,12 +850,15 @@ private List<string> CheckQuestionBlock(BlockCollectionViewModel model)
838850 }
839851 else if ( questionBlock . BlockType == BlockType . WholeSlideImage && questionBlock . WholeSlideImageBlock != null )
840852 {
841- var existingWholeSlideImages = questionBlock . WholeSlideImageBlock . WholeSlideImageBlockItems . ToList ( ) ;
842- if ( existingWholeSlideImages . Any ( ) )
853+ var existingWholeSlideImages = questionBlock . WholeSlideImageBlock ? . WholeSlideImageBlockItems ;
854+ if ( existingWholeSlideImages != null && existingWholeSlideImages . Any ( ) )
843855 {
844856 foreach ( var wsi in existingWholeSlideImages )
845857 {
846- filePath . Add ( wsi . WholeSlideImage ? . File ? . FilePath ) ;
858+ if ( wsi . WholeSlideImage != null && wsi . WholeSlideImage . File != null )
859+ {
860+ filePath . Add ( wsi . WholeSlideImage . File . FilePath ) ;
861+ }
847862 }
848863 }
849864 }
@@ -888,7 +903,7 @@ private List<string> CheckQuestionBlock(BlockCollectionViewModel model)
888903 }
889904 }
890905
891- return filePath ;
906+ return filePath . Where ( x => x != null ) . ToList ( ) ;
892907 }
893908 }
894909}
0 commit comments