Skip to content

Commit c3a2983

Browse files
committed
TD-3023 unpublished and deleted draft resource file refactor
1 parent de73449 commit c3a2983

File tree

9 files changed

+227
-18
lines changed

9 files changed

+227
-18
lines changed

LearningHub.Nhs.WebUI/Controllers/Api/ContributeController.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,11 +224,14 @@ public async Task<ActionResult> DeleteResourceKeywordAsync([FromBody] KeywordDel
224224
[Route("DeleteResourceVersion/{resourceversionId}")]
225225
public async Task<ActionResult> DeleteResourceVersion(int resourceVersionId)
226226
{
227-
var associatedFile = await this.resourceService.GetResourceVersionExtendedAsync(resourceVersionId);
227+
var associatedFile = await this.resourceService.GetObsoleteResourceFile(resourceVersionId, true);
228228
var validationResult = await this.contributeService.DeleteResourceVersionAsync(resourceVersionId);
229229
if (validationResult.IsValid)
230230
{
231-
_ = Task.Run(async () => { await this.fileService.PurgeResourceFile(associatedFile); });
231+
if (associatedFile.Any())
232+
{
233+
_ = Task.Run(async () => { await this.fileService.PurgeResourceFile(null, associatedFile); });
234+
}
232235
}
233236

234237
return this.Ok(validationResult);
@@ -338,7 +341,19 @@ public ActionResult GetSettings()
338341
[Route("PublishResourceVersion")]
339342
public async Task<ActionResult> PublishResourceVersionAsync([FromBody] PublishViewModel publishViewModel)
340343
{
344+
var associatedResource = await this.resourceService.GetResourceVersionExtendedAsync(publishViewModel.ResourceVersionId);
341345
var validationResult = await this.contributeService.SubmitResourceVersionForPublishAsync(publishViewModel);
346+
if (validationResult.IsValid)
347+
{
348+
if (associatedResource.ResourceTypeEnum != ResourceTypeEnum.Scorm && associatedResource.ResourceTypeEnum != ResourceTypeEnum.Html)
349+
{
350+
var obsoleteFiles = await this.resourceService.GetObsoleteResourceFile(publishViewModel.ResourceVersionId);
351+
if (obsoleteFiles.Any())
352+
{
353+
await this.fileService.PurgeResourceFile(null, obsoleteFiles);
354+
}
355+
}
356+
}
342357

343358
return this.Ok(validationResult);
344359
}

LearningHub.Nhs.WebUI/Controllers/ResourceController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ public async Task<IActionResult> UnpublishConfirm(ResourceUnpublishConfirmViewMo
413413

414414
if (validationResult.IsValid)
415415
{
416-
_ = Task.Run(async () => { await this.fileService.PurgeResourceFile(associatedFile); });
416+
_ = Task.Run(async () => { await this.fileService.PurgeResourceFile(associatedFile, null); });
417417
if (viewModel.CatalogueNodeVersionId == 1)
418418
{
419419
return this.Redirect("/my-contributions/unpublished");

LearningHub.Nhs.WebUI/Interfaces/IFileService.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ public interface IFileService
4848
/// The PurgeResourceFile.
4949
/// </summary>
5050
/// <param name="vm">The vm.<see cref="ResourceVersionExtendedViewModel"/>.</param>
51+
/// <param name="filePaths">.</param>
5152
/// <returns>The <see cref="Task"/>.</returns>
52-
Task PurgeResourceFile(ResourceVersionExtendedViewModel vm);
53+
Task PurgeResourceFile(ResourceVersionExtendedViewModel vm = null, List<string> filePaths = null);
5354
}
5455
}

LearningHub.Nhs.WebUI/Interfaces/IResourceService.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,5 +282,13 @@ public interface IResourceService
282282
/// <param name="resourceVersionId">resource version id.</param>
283283
/// <returns>The <see cref="Task"/>.</returns>
284284
Task<LearningHubValidationResult> DeleteAllResourceVersionProviderAsync(int resourceVersionId);
285+
286+
/// <summary>
287+
/// The GetObsoleteResourceFile.
288+
/// </summary>
289+
/// <param name="resourceVersionId">The resourceVersionId.</param>
290+
/// <param name="deletedResource">.</param>
291+
/// <returns>The <see cref="T:Task{List{FileTypeViewModel}}"/>.</returns>
292+
Task<List<string>> GetObsoleteResourceFile(int resourceVersionId, bool deletedResource = false);
285293
}
286294
}

LearningHub.Nhs.WebUI/Services/FileService.cs

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.Threading.Tasks;
88
using Azure.Storage.Files.Shares;
99
using Azure.Storage.Files.Shares.Models;
10+
using LearningHub.Nhs.Models.Enums;
1011
using LearningHub.Nhs.Models.Resource;
1112
using LearningHub.Nhs.WebUI.Configuration;
1213
using LearningHub.Nhs.WebUI.Interfaces;
@@ -94,7 +95,7 @@ private ShareClient InputArchiveShareClient
9495
}
9596
}
9697

97-
return this.shareClient;
98+
return this.archiveShareClient;
9899
}
99100
}
100101

@@ -201,9 +202,17 @@ public async Task<string> ProcessFile(Stream fileBytes, string fileName, string
201202
/// The PurgeResourceFile.
202203
/// </summary>
203204
/// <param name="vm">The vm.<see cref="ResourceVersionExtendedViewModel"/>.</param>
205+
/// <param name="filePaths">.</param>
204206
/// <returns>The <see cref="Task"/>.</returns>
205-
public async Task PurgeResourceFile(ResourceVersionExtendedViewModel vm)
207+
public async Task PurgeResourceFile(ResourceVersionExtendedViewModel vm = null, List<string> filePaths = null)
206208
{
209+
if (filePaths != null
210+
&& filePaths.Any())
211+
{
212+
await this.MoveInPutDirectoryToArchive(filePaths);
213+
return;
214+
}
215+
207216
if (vm != null)
208217
{
209218
var allContentPath = new List<string>();
@@ -235,7 +244,29 @@ public async Task PurgeResourceFile(ResourceVersionExtendedViewModel vm)
235244
}
236245
}
237246
}
247+
else if (vm.CaseDetails != null)
248+
{
249+
var blockCollection = vm.CaseDetails.BlockCollection;
250+
foreach (var entry in blockCollection.Blocks)
251+
{
252+
if (entry.ImageCarouselBlock != null)
253+
{
254+
foreach (var item in entry.ImageCarouselBlock?.ImageBlockCollection?.Blocks)
255+
{
256+
allFilePath.Add(item?.MediaBlock?.Image?.File.FilePath);
257+
}
258+
}
259+
else if (entry.WholeSlideImageBlock != null)
260+
{
261+
foreach (var item in entry.WholeSlideImageBlock.WholeSlideImageBlockItems)
262+
{
263+
allFilePath.Add(item?.WholeSlideImage?.File.FilePath);
264+
}
265+
}
266+
}
267+
}
238268

269+
// audio and video to be added
239270
await this.MoveInPutDirectoryToArchive(allFilePath);
240271
await this.MoveOutPutDirectoryToArchive(allContentPath);
241272
}

LearningHub.Nhs.WebUI/Services/ResourceService.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1274,5 +1274,35 @@ public async Task<LearningHubValidationResult> DeleteAllResourceVersionProviderA
12741274

12751275
return apiResponse.ValidationResult;
12761276
}
1277+
1278+
/// <summary>
1279+
/// The GetObsoleteResourceFile.
1280+
/// </summary>
1281+
/// <param name="resourceVersionId">The resourceVersionId.</param>
1282+
/// <param name="deletedResource">.</param>
1283+
/// <returns>The <see cref="T:Task{List{FileTypeViewModel}}"/>.</returns>
1284+
public async Task<List<string>> GetObsoleteResourceFile(int resourceVersionId, bool deletedResource = false)
1285+
{
1286+
List<string> filePaths = null;
1287+
1288+
var client = await this.LearningHubHttpClient.GetClientAsync();
1289+
1290+
var request = $"Resource/GetObsoleteResourceFile/{resourceVersionId}/{deletedResource}";
1291+
var response = await client.GetAsync(request).ConfigureAwait(false);
1292+
1293+
if (response.IsSuccessStatusCode)
1294+
{
1295+
var result = response.Content.ReadAsStringAsync().Result;
1296+
filePaths = JsonConvert.DeserializeObject<List<string>>(result);
1297+
}
1298+
else if (response.StatusCode == System.Net.HttpStatusCode.Unauthorized
1299+
||
1300+
response.StatusCode == System.Net.HttpStatusCode.Forbidden)
1301+
{
1302+
throw new Exception("AccessDenied");
1303+
}
1304+
1305+
return filePaths;
1306+
}
12771307
}
12781308
}

WebAPI/LearningHub.Nhs.API/Controllers/ResourceController.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -447,12 +447,14 @@ public async Task<ActionResult> GetResourceVersionsAsync(int resourceId)
447447
/// Get file directory for unpublished or deleted versions.
448448
/// </summary>
449449
/// <param name="resourceVersionId">The resourceVersionId<see cref="int"/>.</param>
450+
/// <param name="deletedResource">.</param>
450451
/// <returns>The <see cref="Task{String}"/>.</returns>
451452
[HttpGet]
452453
[Route("GetObsoleteResourceFile/{resourceVersionId}")]
453-
public async Task<List<string>> GetObsoleteResourceFile(int resourceVersionId)
454+
[Route("GetObsoleteResourceFile/{resourceVersionId}/{deletedResource}")]
455+
public async Task<List<string>> GetObsoleteResourceFile(int resourceVersionId, bool deletedResource = false)
454456
{
455-
return await this.resourceService.GetObsoleteResourceFile(resourceVersionId);
457+
return await this.resourceService.GetObsoleteResourceFile(resourceVersionId, deletedResource);
456458
}
457459

458460
/// <summary>

WebAPI/LearningHub.Nhs.Services.Interface/IResourceService.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,8 +233,9 @@ public interface IResourceService
233233
/// Get file directory for unpublished or deleted versions.
234234
/// </summary>
235235
/// <param name="resourceVersionId">The resourceVersionId<see cref="int"/>.</param>
236+
/// <param name="deletedResource">.</param>
236237
/// <returns>The <see cref="List{String}"/>.</returns>
237-
Task<List<string>> GetObsoleteResourceFile(int resourceVersionId);
238+
Task<List<string>> GetObsoleteResourceFile(int resourceVersionId, bool deletedResource = false);
238239

239240
/// <summary>
240241
/// Delete resource version async.

WebAPI/LearningHub.Nhs.Services/ResourceService.cs

Lines changed: 130 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1320,12 +1320,12 @@ public async Task<List<ResourceVersionViewModel>> GetResourceVersionsAsync(int r
13201320
/// Get file directory for unpublished or deleted versions.
13211321
/// </summary>
13221322
/// <param name="resourceVersionId">The resourceVersionId<see cref="int"/>.</param>
1323+
/// <param name="deletedResource">.</param>
13231324
/// <returns>The <see cref="List{String}"/>.</returns>
1324-
public async Task<List<string>> GetObsoleteResourceFile(int resourceVersionId)
1325+
public async Task<List<string>> GetObsoleteResourceFile(int resourceVersionId, bool deletedResource = false)
13251326
{
13261327
var retVal = new List<string>();
1327-
File fileDetails = null;
1328-
var resource = await this.GetResourceVersionByIdAsync(resourceVersionId);
1328+
var resource = await this.GetResourceVersionExtendedViewModelAsync(resourceVersionId);
13291329
var rvs = await this.resourceVersionRepository.GetResourceVersionsAsync(resource.ResourceId);
13301330
rvs = rvs.Where(x => x.Id != resourceVersionId && x.PublicationId > 0).OrderByDescending(x => x.PublicationId).ToList();
13311331
var rv = rvs.FirstOrDefault();
@@ -1334,21 +1334,142 @@ public async Task<List<string>> GetObsoleteResourceFile(int resourceVersionId)
13341334
var extendedResourceVersion = await this.GetResourceVersionExtendedViewModelAsync(rv.Id);
13351335
if (extendedResourceVersion.ResourceTypeEnum == ResourceTypeEnum.Scorm)
13361336
{
1337-
retVal.Add(extendedResourceVersion.ScormDetails.ContentFilePath);
1337+
if (resource.ScormDetails?.ContentFilePath != extendedResourceVersion.ScormDetails.ContentFilePath)
1338+
{
1339+
if (!deletedResource)
1340+
{
1341+
retVal.Add(extendedResourceVersion.ScormDetails.ContentFilePath);
1342+
}
1343+
else
1344+
{
1345+
retVal.Add(resource.ScormDetails?.File?.FilePath);
1346+
}
1347+
}
13381348
}
13391349
else if (extendedResourceVersion.ResourceTypeEnum == ResourceTypeEnum.Html)
13401350
{
1341-
retVal.Add(extendedResourceVersion.HtmlDetails.ContentFilePath);
1351+
if (resource.HtmlDetails?.ContentFilePath != extendedResourceVersion.HtmlDetails.ContentFilePath)
1352+
{
1353+
if (!deletedResource)
1354+
{
1355+
retVal.Add(extendedResourceVersion.HtmlDetails.ContentFilePath);
1356+
}
1357+
else
1358+
{
1359+
retVal.Add(resource.HtmlDetails?.File?.FilePath);
1360+
}
1361+
}
1362+
}
1363+
else if (extendedResourceVersion.ResourceTypeEnum == ResourceTypeEnum.GenericFile)
1364+
{
1365+
if (resource.GenericFileDetails.File.FilePath != extendedResourceVersion.GenericFileDetails.File.FilePath)
1366+
{
1367+
if (!deletedResource)
1368+
{
1369+
retVal.Add(extendedResourceVersion.GenericFileDetails.File.FilePath);
1370+
}
1371+
else
1372+
{
1373+
retVal.Add(resource.GenericFileDetails.File.FilePath);
1374+
}
1375+
}
1376+
}
1377+
else if (extendedResourceVersion.ResourceTypeEnum == ResourceTypeEnum.Image)
1378+
{
1379+
if (resource.ImageDetails.File.FilePath != extendedResourceVersion.ImageDetails.File.FilePath)
1380+
{
1381+
if (!deletedResource)
1382+
{
1383+
retVal.Add(extendedResourceVersion.ImageDetails.File.FilePath);
1384+
}
1385+
else
1386+
{
1387+
retVal.Add(resource.ImageDetails.File.FilePath);
1388+
}
1389+
}
13421390
}
13431391
else if (extendedResourceVersion.ResourceTypeEnum == ResourceTypeEnum.Audio)
13441392
{
1345-
retVal.Add(extendedResourceVersion.AudioDetails.File.FilePath);
1346-
retVal.Add(extendedResourceVersion.AudioDetails.ResourceAzureMediaAsset.FilePath);
1393+
if (resource.AudioDetails.File.FilePath != extendedResourceVersion.AudioDetails.File.FilePath)
1394+
{
1395+
if (!deletedResource)
1396+
{
1397+
retVal.Add(extendedResourceVersion.AudioDetails.File.FilePath);
1398+
}
1399+
else
1400+
{
1401+
retVal.Add(resource.AudioDetails.File.FilePath);
1402+
}
1403+
}
1404+
1405+
if (resource.AudioDetails.ResourceAzureMediaAsset.FilePath != extendedResourceVersion.AudioDetails.ResourceAzureMediaAsset.FilePath)
1406+
{
1407+
if (!deletedResource)
1408+
{
1409+
retVal.Add(extendedResourceVersion.AudioDetails.ResourceAzureMediaAsset.FilePath);
1410+
}
1411+
else
1412+
{
1413+
retVal.Add(resource.AudioDetails.ResourceAzureMediaAsset.FilePath);
1414+
}
1415+
}
13471416
}
13481417
else if (extendedResourceVersion.ResourceTypeEnum == ResourceTypeEnum.Video)
13491418
{
1350-
retVal.Add(extendedResourceVersion.VideoDetails.File.FilePath);
1351-
retVal.Add(extendedResourceVersion.VideoDetails.ResourceAzureMediaAsset.FilePath);
1419+
if (resource.VideoDetails.File.FilePath != extendedResourceVersion.VideoDetails.File.FilePath)
1420+
{
1421+
if (!deletedResource)
1422+
{
1423+
retVal.Add(extendedResourceVersion.VideoDetails.File.FilePath);
1424+
}
1425+
else
1426+
{
1427+
retVal.Add(resource.VideoDetails.File.FilePath);
1428+
}
1429+
}
1430+
1431+
if (resource.VideoDetails.ResourceAzureMediaAsset.FilePath != extendedResourceVersion.VideoDetails.ResourceAzureMediaAsset.FilePath)
1432+
{
1433+
if (!deletedResource)
1434+
{
1435+
retVal.Add(extendedResourceVersion.VideoDetails.ResourceAzureMediaAsset.FilePath);
1436+
}
1437+
else
1438+
{
1439+
retVal.Add(resource.VideoDetails.ResourceAzureMediaAsset.FilePath);
1440+
}
1441+
}
1442+
}
1443+
else if (extendedResourceVersion.ResourceTypeEnum == ResourceTypeEnum.Article)
1444+
{
1445+
var inputResourceFiles = resource.ArticleDetails.Files.ToList();
1446+
var previousPublishedfiles = extendedResourceVersion.ArticleDetails.Files.ToList();
1447+
if (!deletedResource)
1448+
{
1449+
if (previousPublishedfiles.Any())
1450+
{
1451+
foreach (var file in previousPublishedfiles)
1452+
{
1453+
if (!inputResourceFiles.Where(x => x.FilePath == file.FilePath).Any())
1454+
{
1455+
retVal.Add(file.FilePath);
1456+
}
1457+
}
1458+
}
1459+
}
1460+
else
1461+
{
1462+
if (inputResourceFiles.Any())
1463+
{
1464+
foreach (var file in inputResourceFiles)
1465+
{
1466+
if (!previousPublishedfiles.Where(x => x.FilePath == file.FilePath).Any())
1467+
{
1468+
retVal.Add(file.FilePath);
1469+
}
1470+
}
1471+
}
1472+
}
13521473
}
13531474
}
13541475

0 commit comments

Comments
 (0)