diff --git a/LearningHub.Nhs.WebUI/Controllers/Api/ContributeController.cs b/LearningHub.Nhs.WebUI/Controllers/Api/ContributeController.cs index 8a4ee438a..825914c97 100644 --- a/LearningHub.Nhs.WebUI/Controllers/Api/ContributeController.cs +++ b/LearningHub.Nhs.WebUI/Controllers/Api/ContributeController.cs @@ -754,16 +754,17 @@ private async Task RemoveBlockCollectionFiles(int resourceVersionId, BlockCollec { if (!newQuestionFiles.Any()) { - filePaths.AddRange(existingQuestionFiles); + filePaths.AddRange(existingQuestionFiles.Values.ToList()); } else { foreach (var file in existingQuestionFiles) { - var entry = newQuestionFiles.FirstOrDefault(x => x.Equals(file)); - if (entry == null) + bool found = false; + var entry = newQuestionFiles.FirstOrDefault(x => (x.Key == file.Key || x.Value == file.Value) && (found = true)); + if (!found) { - filePaths.Add(file); + filePaths.Add(file.Value); } } } @@ -791,9 +792,9 @@ private async Task RemoveBlockCollectionFiles(int resourceVersionId, BlockCollec } } - private List CheckQuestionBlock(BlockCollectionViewModel model) + private Dictionary CheckQuestionBlock(BlockCollectionViewModel model) { - var filePath = new List(); + var filePath = new Dictionary(); if (model != null && model.Blocks.Any()) { foreach (var block in model.Blocks) @@ -810,7 +811,7 @@ private List CheckQuestionBlock(BlockCollectionViewModel model) { if (imageBlock.BlockType == BlockType.Media && imageBlock.MediaBlock != null) { - filePath.Add(imageBlock.MediaBlock.Image.File.FilePath); + filePath.Add(imageBlock.MediaBlock.Image.File.FileId, imageBlock.MediaBlock.Image.File.FilePath); } } } @@ -826,7 +827,7 @@ private List CheckQuestionBlock(BlockCollectionViewModel model) { if (questionBlock.MediaBlock.Image != null) { - filePath.Add(questionBlock.MediaBlock.Image.File.FilePath); + filePath.Add(questionBlock.MediaBlock.Image.File.FileId, questionBlock.MediaBlock.Image.File.FilePath); } if (questionBlock.MediaBlock.Video != null) @@ -835,17 +836,17 @@ private List CheckQuestionBlock(BlockCollectionViewModel model) { if (questionBlock.MediaBlock.Video.File != null) { - filePath.Add(questionBlock.MediaBlock.Video.File.FilePath); + filePath.Add(questionBlock.MediaBlock.Video.File.FileId, questionBlock.MediaBlock.Video.File.FilePath); } if (questionBlock.MediaBlock.Video.VideoFile.TranscriptFile != null) { - filePath.Add(questionBlock.MediaBlock.Video.VideoFile.TranscriptFile.File.FilePath); + filePath.Add(questionBlock.MediaBlock.Video.VideoFile.TranscriptFile.File.FileId, questionBlock.MediaBlock.Video.VideoFile.TranscriptFile.File.FilePath); } if (questionBlock.MediaBlock.Video.VideoFile.CaptionsFile != null) { - filePath.Add(questionBlock.MediaBlock.Video.VideoFile.CaptionsFile.File.FilePath); + filePath.Add(questionBlock.MediaBlock.Video.VideoFile.CaptionsFile.File.FileId, questionBlock.MediaBlock.Video.VideoFile.CaptionsFile.File.FilePath); } } } @@ -859,7 +860,7 @@ private List CheckQuestionBlock(BlockCollectionViewModel model) { if (wsi.WholeSlideImage != null && wsi.WholeSlideImage.File != null && wsi.WholeSlideImage.File.WholeSlideImageFile != null && (wsi.WholeSlideImage.File.WholeSlideImageFile.Status == WholeSlideImageFileStatus.ProcessingComplete || wsi.WholeSlideImage.File.WholeSlideImageFile.Status == WholeSlideImageFileStatus.ProcessingFailed)) { - filePath.Add(wsi.WholeSlideImage.File.FilePath); + filePath.Add(wsi.WholeSlideImage.File.FileId, wsi.WholeSlideImage.File.FilePath); } } } @@ -876,7 +877,7 @@ private List CheckQuestionBlock(BlockCollectionViewModel model) { if (feedbackBlock.MediaBlock.Image != null) { - filePath.Add(feedbackBlock.MediaBlock.Image.File.FilePath); + filePath.Add(feedbackBlock.MediaBlock.Image.File.FileId, feedbackBlock.MediaBlock.Image.File.FilePath); } if (feedbackBlock.MediaBlock.Video != null) @@ -885,17 +886,17 @@ private List CheckQuestionBlock(BlockCollectionViewModel model) { if (feedbackBlock.MediaBlock.Video.File != null) { - filePath.Add(feedbackBlock.MediaBlock.Video.File.FilePath); + filePath.Add(feedbackBlock.MediaBlock.Video.File.FileId, feedbackBlock.MediaBlock.Video.File.FilePath); } if (feedbackBlock.MediaBlock.Video.VideoFile.TranscriptFile != null) { - filePath.Add(feedbackBlock.MediaBlock.Video.VideoFile.TranscriptFile.File.FilePath); + filePath.Add(feedbackBlock.MediaBlock.Video.VideoFile.TranscriptFile.File.FileId, feedbackBlock.MediaBlock.Video.VideoFile.TranscriptFile.File.FilePath); } if (feedbackBlock.MediaBlock.Video.VideoFile.CaptionsFile != null) { - filePath.Add(feedbackBlock.MediaBlock.Video.VideoFile.CaptionsFile.File.FilePath); + filePath.Add(feedbackBlock.MediaBlock.Video.VideoFile.CaptionsFile.File.FileId, feedbackBlock.MediaBlock.Video.VideoFile.CaptionsFile.File.FilePath); } } } @@ -906,7 +907,7 @@ private List CheckQuestionBlock(BlockCollectionViewModel model) } } - return filePath.Where(x => x != null).ToList(); + return filePath; } } } diff --git a/WebAPI/LearningHub.Nhs.Database/LearningHub.Nhs.Database.sqlproj b/WebAPI/LearningHub.Nhs.Database/LearningHub.Nhs.Database.sqlproj index fedfca87d..2613eb68c 100644 --- a/WebAPI/LearningHub.Nhs.Database/LearningHub.Nhs.Database.sqlproj +++ b/WebAPI/LearningHub.Nhs.Database/LearningHub.Nhs.Database.sqlproj @@ -513,9 +513,7 @@ - - - + diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/AssessmentContentBlockCollectionGetAll.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/AssessmentContentBlockCollectionGetAll.sql deleted file mode 100644 index f506c1c20..000000000 --- a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/AssessmentContentBlockCollectionGetAll.sql +++ /dev/null @@ -1,338 +0,0 @@ -------------------------------------------------------------------------------- --- Author Tobi Awe --- Created 30-05-2024 --- Purpose Get all assessment content block collections of all undeleted resource version including published(current version only) versions while excluding the version being edited. --- --- Modification History --- --- 30-05-2024 TD-3023 Initial Revision -------------------------------------------------------------------------------- -CREATE PROCEDURE [resources].[AssessmentContentBlockCollectionGetAll] ( - @excludeResourceVersionId INT -) -AS -BEGIN - -- Table to hold BlockCollectionIds - DECLARE @BlockCollectionId TABLE (Id INT); - - -- Insert BlockCollectionIds based on the provided query - INSERT INTO @BlockCollectionId (Id) - SELECT DISTINCT [c].AssessmentContentId as [BlockCollectionId] - FROM [resources].AssessmentResourceVersion AS [c] - INNER JOIN ( - SELECT [r].[Id], [r].[ResourceId], [r].[VersionStatusId] - FROM [resources].[ResourceVersion] AS [r] - WHERE [r].[Deleted] = CAST(0 AS bit) - ) AS [t] ON [c].[ResourceVersionId] = [t].[Id] - INNER JOIN ( - SELECT [r0].[Id], [r0].[CurrentResourceVersionId] - FROM [resources].[Resource] AS [r0] - WHERE [r0].[Deleted] = CAST(0 AS bit) - ) AS [t0] ON [t].[ResourceId] = [t0].[Id] - WHERE ([c].[Deleted] = CAST(0 AS bit)) - AND ((([c].[ResourceVersionId] <> @excludeResourceVersionId) - AND ([c].[Deleted] = CAST(0 AS bit))) - AND (([t].[VersionStatusId] <> 2) - OR (([t].[VersionStatusId] = 2) - AND ([t0].[CurrentResourceVersionId] = [c].[ResourceVersionId])))) - AND [c].AssessmentContentId IS NOT NULL; - - -- Table to hold results for blocks - DECLARE @BlockResult TABLE ( - Id INT, - [Order] INT, - Title NVARCHAR(200), - BlockType INT, - BlockCollectionId INT - ); - - -- Insert block data - INSERT INTO @BlockResult - SELECT Id, [Order], Title, BlockType, BlockCollectionId - FROM resources.Block - WHERE Deleted = 0 AND BlockCollectionId IN (SELECT Id FROM @BlockCollectionId); - - -- Select block data - SELECT br.Id, [Order], Title, BlockType, BlockCollectionId - FROM @BlockResult br - JOIN @BlockCollectionId bc ON br.BlockCollectionId = bc.Id; - - -- Select text block data - SELECT t.* - FROM resources.TextBlock t - INNER JOIN @BlockResult b ON b.Id = t.BlockId - WHERE t.Deleted = 0; - - -- WholeSlide Image Block - DECLARE @WsibResult TABLE ( - Id INT, - BlockId INT - ); - - INSERT INTO @WsibResult - SELECT w.Id, w.BlockId - FROM resources.WholeSlideImageBlock w - INNER JOIN @BlockResult b ON b.Id = w.BlockId - WHERE w.Deleted = 0; - - SELECT * FROM @WsibResult; - - -- WholeSlide Image Block Items - DECLARE @WsibiResult TABLE ( - Id INT, - WholeSlideImageBlockId INT, - WholeSlideImageId INT, - PlaceholderText NVARCHAR(255), - [Order] INT - ); - - INSERT INTO @WsibiResult - SELECT wi.Id, wi.WholeSlideImageBlockId, wi.WholeSlideImageId, wi.PlaceholderText, wi.[Order] - FROM resources.WholeSlideImageBlockItem wi - INNER JOIN @WsibResult w ON wi.WholeSlideImageBlockId = w.Id - WHERE wi.Deleted = 0; - - SELECT * FROM @WsibiResult; - - -- WholeSlide Image - DECLARE @WsiResult TABLE ( - Id INT, - Title NVARCHAR(1000), - FileId INT - ); - - INSERT INTO @WsiResult - SELECT wsi.Id, wsi.Title, wsi.FileId - FROM resources.WholeSlideImage wsi - INNER JOIN @WsibiResult wi ON wsi.Id = wi.WholeSlideImageId - WHERE wsi.Deleted = 0; - - SELECT * FROM @WsiResult; - - -- WholeSlide Image File - DECLARE @WsiFileResult TABLE ( - Id INT, - FileTypeId INT, - FileChunkDetailId INT, - [FileName] NVARCHAR(255), - FilePath NVARCHAR(1024), - FileSizekb INT - ); - - INSERT INTO @WsiFileResult - SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb - FROM resources.[File] f - INNER JOIN @WsiResult wsi ON f.Id = wsi.FileId - WHERE f.Deleted = 0; - - SELECT * FROM @WsiFileResult; - - -- WholeSlide Image File - Partial File - SELECT pf.* - FROM resources.PartialFile pf - INNER JOIN @WsiFileResult wsi ON pf.FileId = wsi.Id - WHERE pf.Deleted = 0; - - -- WholeSlide Image File - Image File - SELECT wsif.* - FROM resources.WholeSlideImageFile wsif - INNER JOIN @WsiFileResult wsi ON wsif.FileId = wsi.Id - WHERE wsif.Deleted = 0; - - -- WholeSlide Image Annotation - DECLARE @WsiaResult TABLE ( - Id INT, - WholeSlideImageId INT, - ImageId INT, - [Order] INT, - Label NVARCHAR(255), - Description NVARCHAR(1000), - PinXCoordinate DECIMAL(22,19), - PinYCoordinate DECIMAL(22,19), - Colour INT - ); - - INSERT INTO @WsiaResult - SELECT ia.Id, ia.WholeSlideImageId, ia.ImageId, ia.[Order], ia.Label, ia.Description, ia.PinXCoordinate, ia.PinYCoordinate, ia.Colour - FROM resources.ImageAnnotation ia - INNER JOIN @WsiResult wsi ON ia.WholeSlideImageId = wsi.Id - WHERE ia.Deleted = 0; - - SELECT * FROM @WsiaResult; - - -- WholeSlide Image Annotation Mark - SELECT iam.* - FROM resources.ImageAnnotationMark iam - INNER JOIN @WsiaResult wsia ON iam.ImageAnnotationId = wsia.Id - WHERE iam.Deleted = 0; - - -- Media Block - DECLARE @MediaBlockResult TABLE ( - Id INT, - BlockId INT, - MediaType INT, - AttachmentId INT, - ImageId INT, - VideoId INT - ); - - INSERT INTO @MediaBlockResult - SELECT mb.Id, mb.BlockId, mb.MediaType, mb.AttachmentId, mb.ImageId, mb.VideoId - FROM resources.MediaBlock mb - INNER JOIN @BlockResult b ON mb.BlockId = b.Id - WHERE mb.Deleted = 0; - - SELECT * FROM @MediaBlockResult; - - -- Attachment - DECLARE @AttachmentResult TABLE ( - Id INT, - FileId INT - ); - - INSERT INTO @AttachmentResult - SELECT a.Id, a.FileId - FROM resources.Attachment a - INNER JOIN @MediaBlockResult mb ON a.Id = mb.AttachmentId - WHERE a.Deleted = 0; - - SELECT * FROM @AttachmentResult; - - -- Attachment File - DECLARE @AttachmentFileResult TABLE ( - Id INT, - FileTypeId INT, - FileChunkDetailId INT, - [FileName] NVARCHAR(255), - FilePath NVARCHAR(1024), - FileSizekb INT - ); - - INSERT INTO @AttachmentFileResult - SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb - FROM resources.[File] f - INNER JOIN @AttachmentResult ar ON f.Id = ar.FileId - WHERE f.Deleted = 0; - - SELECT * FROM @AttachmentFileResult; - - -- Attachment File - Partial File - SELECT pf.* - FROM resources.PartialFile pf - INNER JOIN @AttachmentFileResult af ON pf.FileId = af.Id - WHERE pf.Deleted = 0; - - -- Image - DECLARE @ImageResult TABLE ( - Id INT, - FileId INT, - AltText NVARCHAR(125), - Description NVARCHAR(250) - ); - - INSERT INTO @ImageResult - SELECT i.Id, i.FileId, i.AltText, i.Description - FROM resources.Image i - INNER JOIN @MediaBlockResult mb ON i.Id = mb.ImageId - WHERE i.Deleted = 0; - - SELECT * FROM @ImageResult; - - -- Image File - DECLARE @ImageFileResult TABLE ( - Id INT, - FileTypeId INT, - FileChunkDetailId INT, - [FileName] NVARCHAR(255), - FilePath NVARCHAR(1024), - FileSizekb INT - ); - - INSERT INTO @ImageFileResult - SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb - FROM resources.[File] f - INNER JOIN @ImageResult ir ON f.Id = ir.FileId - WHERE f.Deleted = 0; - - SELECT * FROM @ImageFileResult; - - -- Image File - Partial File - SELECT pf.* - FROM resources.PartialFile pf - INNER JOIN @ImageFileResult ifr ON pf.FileId = ifr.Id - WHERE pf.Deleted = 0; - - -- Video - DECLARE @VideoResult TABLE ( - Id INT, - FileId INT - ); - - INSERT INTO @VideoResult - SELECT v.Id, v.FileId - FROM resources.Video v - INNER JOIN @MediaBlockResult mb ON v.Id = mb.VideoId - WHERE v.Deleted = 0; - - SELECT * FROM @VideoResult; - - -- Video File - DECLARE @VideoFileResult TABLE ( - Id INT, - FileTypeId INT, - FileChunkDetailId INT, - [FileName] NVARCHAR(255), - FilePath NVARCHAR(1024), - FileSizekb INT - ); - - INSERT INTO @VideoFileResult - SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb - FROM resources.[File] f - INNER JOIN @VideoResult vr ON f.Id = vr.FileId - WHERE f.Deleted = 0; - - SELECT * FROM @VideoFileResult; - - -- Video File - Partial File - SELECT pf.* - FROM resources.PartialFile pf - INNER JOIN @VideoFileResult vf ON pf.FileId = vf.Id - WHERE pf.Deleted = 0; - - -- Video File Detail - SELECT vf.* - FROM resources.VideoFile vf - INNER JOIN @VideoFileResult vfr ON vf.FileId = vfr.Id - WHERE vf.Deleted = 0; - - -- Question Block - DECLARE @QuestionResult TABLE ( - Id INT, - BlockId INT, - QuestionBlockCollectionId INT, - FeedbackBlockCollectionId INT, - QuestionType INT, - AllowReveal BIT - ); - - INSERT INTO @QuestionResult - SELECT qb.Id, qb.BlockId, qb.QuestionBlockCollectionId, qb.FeedbackBlockCollectionId, qb.QuestionType, qb.AllowReveal - FROM resources.QuestionBlock qb - INNER JOIN @BlockResult b ON qb.BlockId = b.Id - WHERE qb.Deleted = 0; - - SELECT * FROM @QuestionResult; - - -- Question Answer - SELECT qa.* - FROM resources.QuestionAnswer qa - INNER JOIN @QuestionResult qr ON qa.QuestionBlockId = qr.Id - WHERE qa.Deleted = 0; - - -- Image Carousel Block - SELECT icb.* - FROM resources.ImageCarouselBlock icb - INNER JOIN @BlockResult b ON icb.BlockId = b.Id - WHERE icb.Deleted = 0; -END \ No newline at end of file diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/AssessmentGuidanceBlockCollectionGetAll.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/AssessmentGuidanceBlockCollectionGetAll.sql deleted file mode 100644 index c815c0023..000000000 --- a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/AssessmentGuidanceBlockCollectionGetAll.sql +++ /dev/null @@ -1,338 +0,0 @@ -------------------------------------------------------------------------------- --- Author Tobi Awe --- Created 30-05-2024 --- Purpose Get all assessment guidance block collections of all undeleted resource version including published(current version only) versions while excluding the version being edited. --- --- Modification History --- --- 30-05-2024 TD-3023 Initial Revision -------------------------------------------------------------------------------- -CREATE PROCEDURE [resources].[AssessmentGuidanceBlockCollectionGetAll] ( - @excludeResourceVersionId INT -) -AS -BEGIN - -- Table to hold BlockCollectionIds - DECLARE @BlockCollectionId TABLE (Id INT); - - -- Insert BlockCollectionIds based on the provided query - INSERT INTO @BlockCollectionId (Id) - SELECT DISTINCT [c].EndGuidanceId as [BlockCollectionId] - FROM [resources].AssessmentResourceVersion AS [c] - INNER JOIN ( - SELECT [r].[Id], [r].[ResourceId], [r].[VersionStatusId] - FROM [resources].[ResourceVersion] AS [r] - WHERE [r].[Deleted] = CAST(0 AS bit) - ) AS [t] ON [c].[ResourceVersionId] = [t].[Id] - INNER JOIN ( - SELECT [r0].[Id], [r0].[CurrentResourceVersionId] - FROM [resources].[Resource] AS [r0] - WHERE [r0].[Deleted] = CAST(0 AS bit) - ) AS [t0] ON [t].[ResourceId] = [t0].[Id] - WHERE ([c].[Deleted] = CAST(0 AS bit)) - AND ((([c].[ResourceVersionId] <> @excludeResourceVersionId) - AND ([c].[Deleted] = CAST(0 AS bit))) - AND (([t].[VersionStatusId] <> 2) - OR (([t].[VersionStatusId] = 2) - AND ([t0].[CurrentResourceVersionId] = [c].[ResourceVersionId])))) - AND [c].EndGuidanceId IS NOT NULL; - - -- Table to hold results for blocks - DECLARE @BlockResult TABLE ( - Id INT, - [Order] INT, - Title NVARCHAR(200), - BlockType INT, - BlockCollectionId INT - ); - - -- Insert block data - INSERT INTO @BlockResult - SELECT Id, [Order], Title, BlockType, BlockCollectionId - FROM resources.Block - WHERE Deleted = 0 AND BlockCollectionId IN (SELECT Id FROM @BlockCollectionId); - - -- Select block data - SELECT br.Id, [Order], Title, BlockType, BlockCollectionId - FROM @BlockResult br - JOIN @BlockCollectionId bc ON br.BlockCollectionId = bc.Id; - - -- Select text block data - SELECT t.* - FROM resources.TextBlock t - INNER JOIN @BlockResult b ON b.Id = t.BlockId - WHERE t.Deleted = 0; - - -- WholeSlide Image Block - DECLARE @WsibResult TABLE ( - Id INT, - BlockId INT - ); - - INSERT INTO @WsibResult - SELECT w.Id, w.BlockId - FROM resources.WholeSlideImageBlock w - INNER JOIN @BlockResult b ON b.Id = w.BlockId - WHERE w.Deleted = 0; - - SELECT * FROM @WsibResult; - - -- WholeSlide Image Block Items - DECLARE @WsibiResult TABLE ( - Id INT, - WholeSlideImageBlockId INT, - WholeSlideImageId INT, - PlaceholderText NVARCHAR(255), - [Order] INT - ); - - INSERT INTO @WsibiResult - SELECT wi.Id, wi.WholeSlideImageBlockId, wi.WholeSlideImageId, wi.PlaceholderText, wi.[Order] - FROM resources.WholeSlideImageBlockItem wi - INNER JOIN @WsibResult w ON wi.WholeSlideImageBlockId = w.Id - WHERE wi.Deleted = 0; - - SELECT * FROM @WsibiResult; - - -- WholeSlide Image - DECLARE @WsiResult TABLE ( - Id INT, - Title NVARCHAR(1000), - FileId INT - ); - - INSERT INTO @WsiResult - SELECT wsi.Id, wsi.Title, wsi.FileId - FROM resources.WholeSlideImage wsi - INNER JOIN @WsibiResult wi ON wsi.Id = wi.WholeSlideImageId - WHERE wsi.Deleted = 0; - - SELECT * FROM @WsiResult; - - -- WholeSlide Image File - DECLARE @WsiFileResult TABLE ( - Id INT, - FileTypeId INT, - FileChunkDetailId INT, - [FileName] NVARCHAR(255), - FilePath NVARCHAR(1024), - FileSizekb INT - ); - - INSERT INTO @WsiFileResult - SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb - FROM resources.[File] f - INNER JOIN @WsiResult wsi ON f.Id = wsi.FileId - WHERE f.Deleted = 0; - - SELECT * FROM @WsiFileResult; - - -- WholeSlide Image File - Partial File - SELECT pf.* - FROM resources.PartialFile pf - INNER JOIN @WsiFileResult wsi ON pf.FileId = wsi.Id - WHERE pf.Deleted = 0; - - -- WholeSlide Image File - Image File - SELECT wsif.* - FROM resources.WholeSlideImageFile wsif - INNER JOIN @WsiFileResult wsi ON wsif.FileId = wsi.Id - WHERE wsif.Deleted = 0; - - -- WholeSlide Image Annotation - DECLARE @WsiaResult TABLE ( - Id INT, - WholeSlideImageId INT, - ImageId INT, - [Order] INT, - Label NVARCHAR(255), - Description NVARCHAR(1000), - PinXCoordinate DECIMAL(22,19), - PinYCoordinate DECIMAL(22,19), - Colour INT - ); - - INSERT INTO @WsiaResult - SELECT ia.Id, ia.WholeSlideImageId, ia.ImageId, ia.[Order], ia.Label, ia.Description, ia.PinXCoordinate, ia.PinYCoordinate, ia.Colour - FROM resources.ImageAnnotation ia - INNER JOIN @WsiResult wsi ON ia.WholeSlideImageId = wsi.Id - WHERE ia.Deleted = 0; - - SELECT * FROM @WsiaResult; - - -- WholeSlide Image Annotation Mark - SELECT iam.* - FROM resources.ImageAnnotationMark iam - INNER JOIN @WsiaResult wsia ON iam.ImageAnnotationId = wsia.Id - WHERE iam.Deleted = 0; - - -- Media Block - DECLARE @MediaBlockResult TABLE ( - Id INT, - BlockId INT, - MediaType INT, - AttachmentId INT, - ImageId INT, - VideoId INT - ); - - INSERT INTO @MediaBlockResult - SELECT mb.Id, mb.BlockId, mb.MediaType, mb.AttachmentId, mb.ImageId, mb.VideoId - FROM resources.MediaBlock mb - INNER JOIN @BlockResult b ON mb.BlockId = b.Id - WHERE mb.Deleted = 0; - - SELECT * FROM @MediaBlockResult; - - -- Attachment - DECLARE @AttachmentResult TABLE ( - Id INT, - FileId INT - ); - - INSERT INTO @AttachmentResult - SELECT a.Id, a.FileId - FROM resources.Attachment a - INNER JOIN @MediaBlockResult mb ON a.Id = mb.AttachmentId - WHERE a.Deleted = 0; - - SELECT * FROM @AttachmentResult; - - -- Attachment File - DECLARE @AttachmentFileResult TABLE ( - Id INT, - FileTypeId INT, - FileChunkDetailId INT, - [FileName] NVARCHAR(255), - FilePath NVARCHAR(1024), - FileSizekb INT - ); - - INSERT INTO @AttachmentFileResult - SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb - FROM resources.[File] f - INNER JOIN @AttachmentResult ar ON f.Id = ar.FileId - WHERE f.Deleted = 0; - - SELECT * FROM @AttachmentFileResult; - - -- Attachment File - Partial File - SELECT pf.* - FROM resources.PartialFile pf - INNER JOIN @AttachmentFileResult af ON pf.FileId = af.Id - WHERE pf.Deleted = 0; - - -- Image - DECLARE @ImageResult TABLE ( - Id INT, - FileId INT, - AltText NVARCHAR(125), - Description NVARCHAR(250) - ); - - INSERT INTO @ImageResult - SELECT i.Id, i.FileId, i.AltText, i.Description - FROM resources.Image i - INNER JOIN @MediaBlockResult mb ON i.Id = mb.ImageId - WHERE i.Deleted = 0; - - SELECT * FROM @ImageResult; - - -- Image File - DECLARE @ImageFileResult TABLE ( - Id INT, - FileTypeId INT, - FileChunkDetailId INT, - [FileName] NVARCHAR(255), - FilePath NVARCHAR(1024), - FileSizekb INT - ); - - INSERT INTO @ImageFileResult - SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb - FROM resources.[File] f - INNER JOIN @ImageResult ir ON f.Id = ir.FileId - WHERE f.Deleted = 0; - - SELECT * FROM @ImageFileResult; - - -- Image File - Partial File - SELECT pf.* - FROM resources.PartialFile pf - INNER JOIN @ImageFileResult ifr ON pf.FileId = ifr.Id - WHERE pf.Deleted = 0; - - -- Video - DECLARE @VideoResult TABLE ( - Id INT, - FileId INT - ); - - INSERT INTO @VideoResult - SELECT v.Id, v.FileId - FROM resources.Video v - INNER JOIN @MediaBlockResult mb ON v.Id = mb.VideoId - WHERE v.Deleted = 0; - - SELECT * FROM @VideoResult; - - -- Video File - DECLARE @VideoFileResult TABLE ( - Id INT, - FileTypeId INT, - FileChunkDetailId INT, - [FileName] NVARCHAR(255), - FilePath NVARCHAR(1024), - FileSizekb INT - ); - - INSERT INTO @VideoFileResult - SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb - FROM resources.[File] f - INNER JOIN @VideoResult vr ON f.Id = vr.FileId - WHERE f.Deleted = 0; - - SELECT * FROM @VideoFileResult; - - -- Video File - Partial File - SELECT pf.* - FROM resources.PartialFile pf - INNER JOIN @VideoFileResult vf ON pf.FileId = vf.Id - WHERE pf.Deleted = 0; - - -- Video File Detail - SELECT vf.* - FROM resources.VideoFile vf - INNER JOIN @VideoFileResult vfr ON vf.FileId = vfr.Id - WHERE vf.Deleted = 0; - - -- Question Block - DECLARE @QuestionResult TABLE ( - Id INT, - BlockId INT, - QuestionBlockCollectionId INT, - FeedbackBlockCollectionId INT, - QuestionType INT, - AllowReveal BIT - ); - - INSERT INTO @QuestionResult - SELECT qb.Id, qb.BlockId, qb.QuestionBlockCollectionId, qb.FeedbackBlockCollectionId, qb.QuestionType, qb.AllowReveal - FROM resources.QuestionBlock qb - INNER JOIN @BlockResult b ON qb.BlockId = b.Id - WHERE qb.Deleted = 0; - - SELECT * FROM @QuestionResult; - - -- Question Answer - SELECT qa.* - FROM resources.QuestionAnswer qa - INNER JOIN @QuestionResult qr ON qa.QuestionBlockId = qr.Id - WHERE qa.Deleted = 0; - - -- Image Carousel Block - SELECT icb.* - FROM resources.ImageCarouselBlock icb - INNER JOIN @BlockResult b ON icb.BlockId = b.Id - WHERE icb.Deleted = 0; -END \ No newline at end of file diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/BlockCollectionFileSearch.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/BlockCollectionFileSearch.sql new file mode 100644 index 000000000..00b4aa351 --- /dev/null +++ b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/BlockCollectionFileSearch.sql @@ -0,0 +1,679 @@ +------------------------------------------------------------------------------- +-- Author Tobi Awe +-- Created 30-05-2024 +-- Purpose search all assessment/case block collections files + + +-- Modification History +-- +-- 31-05-2024 TD-3023 Initial Revision +------------------------------------------------------------------------------- + + +CREATE PROCEDURE [resources].[BlockCollectionFileSearch] ( + @excludeResourceVersionId INT, + @resourceType INT, + @filePath nvarchar(max) output +) +AS +BEGIN + -- Table to hold BlockCollectionIds + DECLARE @BlockCollectionId TABLE (Id INT); + DECLARE @AllBlockAssociatedFiles TABLE (FileId INT, FilePath NVARCHAR(200)); + SET @filePath = NULL; + + -- Insert BlockCollectionIds based on the provided query + IF @resourceType = 10 +BEGIN + --case +INSERT INTO @BlockCollectionId (Id) +SELECT DISTINCT c.BlockCollectionId +FROM [resources].[CaseResourceVersion] AS c +INNER JOIN [resources].[ResourceVersion] AS r + ON c.ResourceVersionId = r.Id +INNER JOIN [resources].[Resource] AS r0 + ON r.ResourceId = r0.Id +WHERE + c.Deleted = 0 + AND r.Deleted = 0 + AND r0.Deleted = 0 + AND c.ResourceVersionId <> @excludeResourceVersionId + AND (r.VersionStatusId <> 2 OR (r.VersionStatusId = 2 AND r0.CurrentResourceVersionId = c.ResourceVersionId)) + AND c.BlockCollectionId IS NOT NULL; + +END +ELSE IF @resourceType = 11 +BEGIN + --assessment + INSERT INTO @BlockCollectionId (Id) +SELECT DISTINCT Id +FROM ( + SELECT + c.AssessmentContentId AS Id + FROM + [resources].AssessmentResourceVersion AS c + INNER JOIN + [resources].ResourceVersion AS r ON c.ResourceVersionId = r.Id + INNER JOIN + [resources].Resource AS r0 ON r.ResourceId = r0.Id + WHERE + c.Deleted = CAST(0 AS bit) + AND r.Deleted = CAST(0 AS bit) + AND r0.Deleted = CAST(0 AS bit) + AND c.ResourceVersionId <> @excludeResourceVersionId + AND (r.VersionStatusId <> 2 OR (r.VersionStatusId = 2 AND r0.CurrentResourceVersionId = c.ResourceVersionId)) + AND c.AssessmentContentId IS NOT NULL + + UNION ALL + + SELECT + c.EndGuidanceId AS Id + FROM + [resources].AssessmentResourceVersion AS c + INNER JOIN + [resources].ResourceVersion AS r ON c.ResourceVersionId = r.Id + INNER JOIN + [resources].Resource AS r0 ON r.ResourceId = r0.Id + WHERE + c.Deleted = CAST(0 AS bit) + AND r.Deleted = CAST(0 AS bit) + AND r0.Deleted = CAST(0 AS bit) + AND c.ResourceVersionId <> @excludeResourceVersionId + AND (r.VersionStatusId <> 2 OR (r.VersionStatusId = 2 AND r0.CurrentResourceVersionId = c.ResourceVersionId)) + AND c.EndGuidanceId IS NOT NULL +) as assessmentBlockCollections; +END + + -- Table to hold temp results for blocks + DECLARE @TempBlockResult TABLE ( + Id INT, + [Order] INT, + Title NVARCHAR(200), + BlockType INT, + BlockCollectionId INT + ); + + -- Table to hold results for blocks + DECLARE @BlockResult TABLE ( + Id INT, + [Order] INT, + Title NVARCHAR(200), + BlockType INT, + BlockCollectionId INT + ); + + -- Insert temp block data + INSERT INTO @TempBlockResult + SELECT Id, [Order], Title, BlockType, BlockCollectionId + FROM resources.Block + WHERE Deleted = 0 AND BlockCollectionId IN (SELECT Id FROM @BlockCollectionId); + + -- Insert ImageCarouselBlockCollectionId + INSERT INTO @BlockCollectionId (Id) + SELECT icb.ImageBlockCollectionId + FROM resources.ImageCarouselBlock icb + INNER JOIN @TempBlockResult b ON icb.BlockId = b.Id + WHERE icb.Deleted = 0; + +--Insert QuestionBlockCollectionId and FeedbackBlockCollectionId + INSERT INTO @BlockCollectionId (Id) + SELECT qb.QuestionBlockCollectionId + FROM resources.QuestionBlock qb + INNER JOIN @TempBlockResult b ON qb.BlockId = b.Id + WHERE qb.Deleted = 0 + + UNION + + SELECT qb.FeedbackBlockCollectionId + FROM resources.QuestionBlock qb + INNER JOIN @TempBlockResult b ON qb.BlockId = b.Id + WHERE qb.Deleted = 0; + + + -- Insert block data + INSERT INTO @BlockResult + SELECT Id, [Order], Title, BlockType, BlockCollectionId + FROM resources.Block + WHERE Deleted = 0 AND BlockCollectionId IN (SELECT Id FROM @BlockCollectionId); + + + + -- WholeSlide Image Block + DECLARE @WsibResult TABLE ( + Id INT, + BlockId INT + ); + + INSERT INTO @WsibResult + SELECT w.Id, w.BlockId + FROM resources.WholeSlideImageBlock w + INNER JOIN @BlockResult b ON b.Id = w.BlockId + WHERE w.Deleted = 0; + + -- SELECT * FROM @WsibResult; + + -- WholeSlide Image Block Items + DECLARE @WsibiResult TABLE ( + Id INT, + WholeSlideImageBlockId INT, + WholeSlideImageId INT, + PlaceholderText NVARCHAR(255), + [Order] INT + ); + + INSERT INTO @WsibiResult + SELECT wi.Id, wi.WholeSlideImageBlockId, wi.WholeSlideImageId, wi.PlaceholderText, wi.[Order] + FROM resources.WholeSlideImageBlockItem wi + INNER JOIN @WsibResult w ON wi.WholeSlideImageBlockId = w.Id + WHERE wi.Deleted = 0; + + --SELECT * FROM @WsibiResult; + + -- WholeSlide Image + DECLARE @WsiResult TABLE ( + Id INT, + Title NVARCHAR(1000), + FileId INT + ); + + INSERT INTO @WsiResult + SELECT wsi.Id, wsi.Title, wsi.FileId + FROM resources.WholeSlideImage wsi + INNER JOIN @WsibiResult wi ON wsi.Id = wi.WholeSlideImageId + WHERE wsi.Deleted = 0; + + + --SELECT * FROM @WsiResult; + + -- WholeSlide Image File + DECLARE @WsiFileResult TABLE ( + Id INT, + FileTypeId INT, + FileChunkDetailId INT, + [FileName] NVARCHAR(255), + FilePath NVARCHAR(1024), + FileSizekb INT + ); + + INSERT INTO @WsiFileResult + SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb + FROM resources.[File] f + INNER JOIN @WsiResult wsi ON f.Id = wsi.FileId + WHERE f.Deleted = 0; + + INSERT INTO @AllBlockAssociatedFiles + SELECT Id,FilePath FROM @WsiFileResult; + + + + -- Media Block + DECLARE @MediaBlockResult TABLE ( + Id INT, + BlockId INT, + MediaType INT, + AttachmentId INT, + ImageId INT, + VideoId INT + ); + + INSERT INTO @MediaBlockResult + SELECT mb.Id, mb.BlockId, mb.MediaType, mb.AttachmentId, mb.ImageId, mb.VideoId + FROM resources.MediaBlock mb + INNER JOIN @BlockResult b ON mb.BlockId = b.Id + WHERE mb.Deleted = 0; + + + --SELECT * FROM @MediaBlockResult; + + -- Attachment + DECLARE @AttachmentResult TABLE ( + Id INT, + FileId INT + ); + + INSERT INTO @AttachmentResult + SELECT a.Id, a.FileId + FROM resources.Attachment a + INNER JOIN @MediaBlockResult mb ON a.Id = mb.AttachmentId + WHERE a.Deleted = 0; + + --SELECT * FROM @AttachmentResult; + + -- Attachment File + DECLARE @AttachmentFileResult TABLE ( + Id INT, + FileTypeId INT, + FileChunkDetailId INT, + [FileName] NVARCHAR(255), + FilePath NVARCHAR(1024), + FileSizekb INT + ); + + INSERT INTO @AttachmentFileResult + SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb + FROM resources.[File] f + INNER JOIN @AttachmentResult ar ON f.Id = ar.FileId + WHERE f.Deleted = 0; + + INSERT INTO @AllBlockAssociatedFiles + SELECT Id,FilePath FROM @AttachmentFileResult; + + -- Attachment File - Partial File + INSERT INTO @AllBlockAssociatedFiles + SELECT pf.FileId,af.FilePath + FROM resources.PartialFile pf + INNER JOIN @AttachmentFileResult af ON pf.FileId = af.Id + WHERE pf.Deleted = 0; + + -- Image + DECLARE @ImageResult TABLE ( + Id INT, + FileId INT, + AltText NVARCHAR(125), + Description NVARCHAR(250) + ); + + INSERT INTO @ImageResult + SELECT i.Id, i.FileId, i.AltText, i.Description + FROM resources.Image i + INNER JOIN @MediaBlockResult mb ON i.Id = mb.ImageId + WHERE i.Deleted = 0; + + --SELECT * FROM @ImageResult; + + -- Image File + DECLARE @ImageFileResult TABLE ( + Id INT, + FileTypeId INT, + FileChunkDetailId INT, + [FileName] NVARCHAR(255), + FilePath NVARCHAR(1024), + FileSizekb INT + ); + + INSERT INTO @ImageFileResult + SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb + FROM resources.[File] f + INNER JOIN @ImageResult ir ON f.Id = ir.FileId + WHERE f.Deleted = 0; + + INSERT INTO @AllBlockAssociatedFiles + SELECT Id,FilePath FROM @ImageFileResult; + + + -- Video + DECLARE @VideoResult TABLE ( + Id INT, + FileId INT + ); + + INSERT INTO @VideoResult + SELECT v.Id, v.FileId + FROM resources.Video v + INNER JOIN @MediaBlockResult mb ON v.Id = mb.VideoId + WHERE v.Deleted = 0; + + -- SELECT * FROM @VideoResult; + + -- Video File + DECLARE @VideoFileResult TABLE ( + Id INT, + FileTypeId INT, + FileChunkDetailId INT, + [FileName] NVARCHAR(255), + FilePath NVARCHAR(1024), + FileSizekb INT + ); + + INSERT INTO @VideoFileResult + SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb + FROM resources.[File] f + INNER JOIN @VideoResult vr ON f.Id = vr.FileId + WHERE f.Deleted = 0; + + INSERT INTO @AllBlockAssociatedFiles + SELECT Id,FilePath FROM @VideoFileResult; + + --SELECT * FROM @AllBlockAssociatedFiles; +---------------------------------------------------------------------------------------------------------------------- + + + + -- Table to hold BlockCollectionIds + DECLARE @_BlockCollectionId TABLE (Id INT); + DECLARE @_QuestionBlockCollectionId TABLE (Id INT); + DECLARE @_ImageCarouselBlockCollectionId TABLE (Id INT); + DECLARE @_AllBlockAssociatedFiles TABLE (FileId INT, FilePath NVARCHAR(200)); + + -- Insert BlockCollectionIds based on the provided query +IF @resourceType = 10 +BEGIN + --case +INSERT INTO @_BlockCollectionId (Id) +SELECT DISTINCT c.BlockCollectionId +FROM [resources].[CaseResourceVersion] AS c +INNER JOIN [resources].[ResourceVersion] AS r + ON c.ResourceVersionId = r.Id +INNER JOIN [resources].[Resource] AS r0 + ON r.ResourceId = r0.Id +WHERE + c.Deleted = 0 + AND c.ResourceVersionId = @excludeResourceVersionId + +END +ELSE IF @resourceType = 11 +BEGIN + --assessment +INSERT INTO @_BlockCollectionId (Id) +SELECT DISTINCT Id +FROM ( + SELECT + c.AssessmentContentId AS Id + FROM + [resources].AssessmentResourceVersion AS c + INNER JOIN + [resources].ResourceVersion AS r ON c.ResourceVersionId = r.Id + INNER JOIN + [resources].Resource AS r0 ON r.ResourceId = r0.Id + WHERE + c.Deleted = CAST(0 AS bit) + AND c.ResourceVersionId = @excludeResourceVersionId + + UNION ALL + + SELECT + c.EndGuidanceId AS Id + FROM + [resources].AssessmentResourceVersion AS c + INNER JOIN + [resources].ResourceVersion AS r ON c.ResourceVersionId = r.Id + INNER JOIN + [resources].Resource AS r0 ON r.ResourceId = r0.Id + WHERE + c.Deleted = CAST(0 AS bit) + AND r.Deleted = CAST(0 AS bit) + AND r0.Deleted = CAST(0 AS bit) + AND c.ResourceVersionId <> @excludeResourceVersionId +) as assessmentBlockCollections; +END + + + -- Table to hold temp results for blocks + DECLARE @_TempBlockResult TABLE ( + Id INT, + [Order] INT, + Title NVARCHAR(200), + BlockType INT, + BlockCollectionId INT + ); + + -- Table to hold results for blocks + DECLARE @_BlockResult TABLE ( + Id INT, + [Order] INT, + Title NVARCHAR(200), + BlockType INT, + BlockCollectionId INT + ); + + -- Insert temp block data + INSERT INTO @_TempBlockResult + SELECT Id, [Order], Title, BlockType, BlockCollectionId + FROM resources.Block + WHERE Deleted = 0 AND BlockCollectionId IN (SELECT Id FROM @_BlockCollectionId); + + -- Insert ImageCarouselBlockCollectionId + INSERT INTO @_BlockCollectionId (Id) + SELECT icb.ImageBlockCollectionId + FROM resources.ImageCarouselBlock icb + INNER JOIN @_TempBlockResult b ON icb.BlockId = b.Id + WHERE icb.Deleted = 0; + + --Insert QuestionBlockCollectionId and FeedbackBlockCollectionId + INSERT INTO @_BlockCollectionId (Id) + SELECT qb.QuestionBlockCollectionId + FROM resources.QuestionBlock qb + INNER JOIN @_TempBlockResult b ON qb.BlockId = b.Id + WHERE qb.Deleted = 0 + + UNION + + SELECT qb.FeedbackBlockCollectionId + FROM resources.QuestionBlock qb + INNER JOIN @_TempBlockResult b ON qb.BlockId = b.Id + WHERE qb.Deleted = 0; + + + + + + -- Insert block data + INSERT INTO @_BlockResult + SELECT Id, [Order], Title, BlockType, BlockCollectionId + FROM resources.Block + WHERE Deleted = 0 AND BlockCollectionId IN (SELECT Id FROM @_BlockCollectionId); + + + + -- WholeSlide Image Block + DECLARE @_WsibResult TABLE ( + Id INT, + BlockId INT + ); + + INSERT INTO @_WsibResult + SELECT w.Id, w.BlockId + FROM resources.WholeSlideImageBlock w + INNER JOIN @_BlockResult b ON b.Id = w.BlockId + WHERE w.Deleted = 0; + + -- SELECT * FROM @_WsibResult; + + -- WholeSlide Image Block Items + DECLARE @_WsibiResult TABLE ( + Id INT, + WholeSlideImageBlockId INT, + WholeSlideImageId INT, + PlaceholderText NVARCHAR(255), + [Order] INT + ); + + INSERT INTO @_WsibiResult + SELECT wi.Id, wi.WholeSlideImageBlockId, wi.WholeSlideImageId, wi.PlaceholderText, wi.[Order] + FROM resources.WholeSlideImageBlockItem wi + INNER JOIN @_WsibResult w ON wi.WholeSlideImageBlockId = w.Id + WHERE wi.Deleted = 0; + + --SELECT * FROM @_WsibiResult; + + -- WholeSlide Image + DECLARE @_WsiResult TABLE ( + Id INT, + Title NVARCHAR(1000), + FileId INT + ); + + INSERT INTO @_WsiResult + SELECT wsi.Id, wsi.Title, wsi.FileId + FROM resources.WholeSlideImage wsi + INNER JOIN @_WsibiResult wi ON wsi.Id = wi.WholeSlideImageId + WHERE wsi.Deleted = 0; + + + --SELECT * FROM @_WsiResult; + + -- WholeSlide Image File + DECLARE @_WsiFileResult TABLE ( + Id INT, + FileTypeId INT, + FileChunkDetailId INT, + [FileName] NVARCHAR(255), + FilePath NVARCHAR(1024), + FileSizekb INT + ); + + INSERT INTO @_WsiFileResult + SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb + FROM resources.[File] f + INNER JOIN @_WsiResult wsi ON f.Id = wsi.FileId + WHERE f.Deleted = 0; + + INSERT INTO @_AllBlockAssociatedFiles + SELECT Id,FilePath FROM @_WsiFileResult; + + + + -- Media Block + DECLARE @_MediaBlockResult TABLE ( + Id INT, + BlockId INT, + MediaType INT, + AttachmentId INT, + ImageId INT, + VideoId INT + ); + + INSERT INTO @_MediaBlockResult + SELECT mb.Id, mb.BlockId, mb.MediaType, mb.AttachmentId, mb.ImageId, mb.VideoId + FROM resources.MediaBlock mb + INNER JOIN @_BlockResult b ON mb.BlockId = b.Id + WHERE mb.Deleted = 0; + + + --SELECT * FROM @_MediaBlockResult; + + -- Attachment + DECLARE @_AttachmentResult TABLE ( + Id INT, + FileId INT + ); + + INSERT INTO @_AttachmentResult + SELECT a.Id, a.FileId + FROM resources.Attachment a + INNER JOIN @_MediaBlockResult mb ON a.Id = mb.AttachmentId + WHERE a.Deleted = 0; + + --SELECT * FROM @_AttachmentResult; + + -- Attachment File + DECLARE @_AttachmentFileResult TABLE ( + Id INT, + FileTypeId INT, + FileChunkDetailId INT, + [FileName] NVARCHAR(255), + FilePath NVARCHAR(1024), + FileSizekb INT + ); + + INSERT INTO @_AttachmentFileResult + SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb + FROM resources.[File] f + INNER JOIN @_AttachmentResult ar ON f.Id = ar.FileId + WHERE f.Deleted = 0; + + INSERT INTO @_AllBlockAssociatedFiles + SELECT Id,FilePath FROM @_AttachmentFileResult; + + -- Attachment File - Partial File + INSERT INTO @_AllBlockAssociatedFiles + SELECT pf.FileId,af.FilePath + FROM resources.PartialFile pf + INNER JOIN @_AttachmentFileResult af ON pf.FileId = af.Id + WHERE pf.Deleted = 0; + + -- Image + DECLARE @_ImageResult TABLE ( + Id INT, + FileId INT, + AltText NVARCHAR(125), + Description NVARCHAR(250) + ); + + INSERT INTO @_ImageResult + SELECT i.Id, i.FileId, i.AltText, i.Description + FROM resources.Image i + INNER JOIN @_MediaBlockResult mb ON i.Id = mb.ImageId + WHERE i.Deleted = 0; + + --SELECT * FROM @_ImageResult; + + -- Image File + DECLARE @_ImageFileResult TABLE ( + Id INT, + FileTypeId INT, + FileChunkDetailId INT, + [FileName] NVARCHAR(255), + FilePath NVARCHAR(1024), + FileSizekb INT + ); + + INSERT INTO @_ImageFileResult + SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb + FROM resources.[File] f + INNER JOIN @_ImageResult ir ON f.Id = ir.FileId + WHERE f.Deleted = 0; + + INSERT INTO @_AllBlockAssociatedFiles + SELECT Id,FilePath FROM @_ImageFileResult; + + + -- Video + DECLARE @_VideoResult TABLE ( + Id INT, + FileId INT + ); + + INSERT INTO @_VideoResult + SELECT v.Id, v.FileId + FROM resources.Video v + INNER JOIN @_MediaBlockResult mb ON v.Id = mb.VideoId + WHERE v.Deleted = 0; + + -- SELECT * FROM @_VideoResult; + + -- Video File + DECLARE @_VideoFileResult TABLE ( + Id INT, + FileTypeId INT, + FileChunkDetailId INT, + [FileName] NVARCHAR(255), + FilePath NVARCHAR(1024), + FileSizekb INT + ); + + INSERT INTO @_VideoFileResult + SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb + FROM resources.[File] f + INNER JOIN @_VideoResult vr ON f.Id = vr.FileId + WHERE f.Deleted = 0; + + INSERT INTO @_AllBlockAssociatedFiles + SELECT Id,FilePath FROM @_VideoFileResult; + + --SELECT * FROM @_AllBlockAssociatedFiles; +---------------------------------------------------------------------------------------------------------------------- + + DECLARE @SearchResult TABLE ( + Id INT, + FilePath NVARCHAR(1024), + MatchId INT, + MatchedPath NVARCHAR(1024) + ); + + INSERT INTO @SearchResult + SELECT f.FileId, f.FilePath, isMatched.FileId, isMatched.FilePath + FROM @_AllBlockAssociatedFiles f + LEFT JOIN @AllBlockAssociatedFiles isMatched ON (f.FileId = isMatched.FileId or f.FilePath = isMatched.FilePath) + + + DECLARE @result VARCHAR(MAX); + + SELECT @result= STUFF(( + SELECT ', ' + FilePath + FROM @SearchResult WHERE MatchId is NULL + FOR XML PATH(''), TYPE + ).value('.', 'NVARCHAR(MAX)'), 1, 2, ''); + + SET @filePath = @result; + END diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/CaseBlockCollectionGetAll.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/CaseBlockCollectionGetAll.sql deleted file mode 100644 index e88c1d30f..000000000 --- a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/CaseBlockCollectionGetAll.sql +++ /dev/null @@ -1,338 +0,0 @@ -------------------------------------------------------------------------------- --- Author Tobi Awe --- Created 30-05-2024 --- Purpose Get all case content block collections of all undeleted resource version including published(current version only) versions while excluding the version being edited. --- --- Modification History --- --- 30-05-2024 TD-3023 Initial Revision -------------------------------------------------------------------------------- -CREATE PROCEDURE [resources].[CaseBlockCollectionGetAll] ( - @excludeResourceVersionId INT -) -AS -BEGIN - -- Table to hold BlockCollectionIds - DECLARE @BlockCollectionId TABLE (Id INT); - - -- Insert BlockCollectionIds based on the provided query - INSERT INTO @BlockCollectionId (Id) - SELECT DISTINCT [c].[BlockCollectionId] - FROM [resources].[CaseResourceVersion] AS [c] - INNER JOIN ( - SELECT [r].[Id], [r].[ResourceId], [r].[VersionStatusId] - FROM [resources].[ResourceVersion] AS [r] - WHERE [r].[Deleted] = CAST(0 AS bit) - ) AS [t] ON [c].[ResourceVersionId] = [t].[Id] - INNER JOIN ( - SELECT [r0].[Id], [r0].[CurrentResourceVersionId] - FROM [resources].[Resource] AS [r0] - WHERE [r0].[Deleted] = CAST(0 AS bit) - ) AS [t0] ON [t].[ResourceId] = [t0].[Id] - WHERE ([c].[Deleted] = CAST(0 AS bit)) - AND ((([c].[ResourceVersionId] <> @excludeResourceVersionId) - AND ([c].[Deleted] = CAST(0 AS bit))) - AND (([t].[VersionStatusId] <> 2) - OR (([t].[VersionStatusId] = 2) - AND ([t0].[CurrentResourceVersionId] = [c].[ResourceVersionId])))) - AND [c].[BlockCollectionId] IS NOT NULL; - - -- Table to hold results for blocks - DECLARE @BlockResult TABLE ( - Id INT, - [Order] INT, - Title NVARCHAR(200), - BlockType INT, - BlockCollectionId INT - ); - - -- Insert block data - INSERT INTO @BlockResult - SELECT Id, [Order], Title, BlockType, BlockCollectionId - FROM resources.Block - WHERE Deleted = 0 AND BlockCollectionId IN (SELECT Id FROM @BlockCollectionId); - - -- Select block data - SELECT br.Id, [Order], Title, BlockType, BlockCollectionId - FROM @BlockResult br - JOIN @BlockCollectionId bc ON br.BlockCollectionId = bc.Id; - - -- Select text block data - SELECT t.* - FROM resources.TextBlock t - INNER JOIN @BlockResult b ON b.Id = t.BlockId - WHERE t.Deleted = 0; - - -- WholeSlide Image Block - DECLARE @WsibResult TABLE ( - Id INT, - BlockId INT - ); - - INSERT INTO @WsibResult - SELECT w.Id, w.BlockId - FROM resources.WholeSlideImageBlock w - INNER JOIN @BlockResult b ON b.Id = w.BlockId - WHERE w.Deleted = 0; - - SELECT * FROM @WsibResult; - - -- WholeSlide Image Block Items - DECLARE @WsibiResult TABLE ( - Id INT, - WholeSlideImageBlockId INT, - WholeSlideImageId INT, - PlaceholderText NVARCHAR(255), - [Order] INT - ); - - INSERT INTO @WsibiResult - SELECT wi.Id, wi.WholeSlideImageBlockId, wi.WholeSlideImageId, wi.PlaceholderText, wi.[Order] - FROM resources.WholeSlideImageBlockItem wi - INNER JOIN @WsibResult w ON wi.WholeSlideImageBlockId = w.Id - WHERE wi.Deleted = 0; - - SELECT * FROM @WsibiResult; - - -- WholeSlide Image - DECLARE @WsiResult TABLE ( - Id INT, - Title NVARCHAR(1000), - FileId INT - ); - - INSERT INTO @WsiResult - SELECT wsi.Id, wsi.Title, wsi.FileId - FROM resources.WholeSlideImage wsi - INNER JOIN @WsibiResult wi ON wsi.Id = wi.WholeSlideImageId - WHERE wsi.Deleted = 0; - - SELECT * FROM @WsiResult; - - -- WholeSlide Image File - DECLARE @WsiFileResult TABLE ( - Id INT, - FileTypeId INT, - FileChunkDetailId INT, - [FileName] NVARCHAR(255), - FilePath NVARCHAR(1024), - FileSizekb INT - ); - - INSERT INTO @WsiFileResult - SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb - FROM resources.[File] f - INNER JOIN @WsiResult wsi ON f.Id = wsi.FileId - WHERE f.Deleted = 0; - - SELECT * FROM @WsiFileResult; - - -- WholeSlide Image File - Partial File - SELECT pf.* - FROM resources.PartialFile pf - INNER JOIN @WsiFileResult wsi ON pf.FileId = wsi.Id - WHERE pf.Deleted = 0; - - -- WholeSlide Image File - Image File - SELECT wsif.* - FROM resources.WholeSlideImageFile wsif - INNER JOIN @WsiFileResult wsi ON wsif.FileId = wsi.Id - WHERE wsif.Deleted = 0; - - -- WholeSlide Image Annotation - DECLARE @WsiaResult TABLE ( - Id INT, - WholeSlideImageId INT, - ImageId INT, - [Order] INT, - Label NVARCHAR(255), - Description NVARCHAR(1000), - PinXCoordinate DECIMAL(22,19), - PinYCoordinate DECIMAL(22,19), - Colour INT - ); - - INSERT INTO @WsiaResult - SELECT ia.Id, ia.WholeSlideImageId, ia.ImageId, ia.[Order], ia.Label, ia.Description, ia.PinXCoordinate, ia.PinYCoordinate, ia.Colour - FROM resources.ImageAnnotation ia - INNER JOIN @WsiResult wsi ON ia.WholeSlideImageId = wsi.Id - WHERE ia.Deleted = 0; - - SELECT * FROM @WsiaResult; - - -- WholeSlide Image Annotation Mark - SELECT iam.* - FROM resources.ImageAnnotationMark iam - INNER JOIN @WsiaResult wsia ON iam.ImageAnnotationId = wsia.Id - WHERE iam.Deleted = 0; - - -- Media Block - DECLARE @MediaBlockResult TABLE ( - Id INT, - BlockId INT, - MediaType INT, - AttachmentId INT, - ImageId INT, - VideoId INT - ); - - INSERT INTO @MediaBlockResult - SELECT mb.Id, mb.BlockId, mb.MediaType, mb.AttachmentId, mb.ImageId, mb.VideoId - FROM resources.MediaBlock mb - INNER JOIN @BlockResult b ON mb.BlockId = b.Id - WHERE mb.Deleted = 0; - - SELECT * FROM @MediaBlockResult; - - -- Attachment - DECLARE @AttachmentResult TABLE ( - Id INT, - FileId INT - ); - - INSERT INTO @AttachmentResult - SELECT a.Id, a.FileId - FROM resources.Attachment a - INNER JOIN @MediaBlockResult mb ON a.Id = mb.AttachmentId - WHERE a.Deleted = 0; - - SELECT * FROM @AttachmentResult; - - -- Attachment File - DECLARE @AttachmentFileResult TABLE ( - Id INT, - FileTypeId INT, - FileChunkDetailId INT, - [FileName] NVARCHAR(255), - FilePath NVARCHAR(1024), - FileSizekb INT - ); - - INSERT INTO @AttachmentFileResult - SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb - FROM resources.[File] f - INNER JOIN @AttachmentResult ar ON f.Id = ar.FileId - WHERE f.Deleted = 0; - - SELECT * FROM @AttachmentFileResult; - - -- Attachment File - Partial File - SELECT pf.* - FROM resources.PartialFile pf - INNER JOIN @AttachmentFileResult af ON pf.FileId = af.Id - WHERE pf.Deleted = 0; - - -- Image - DECLARE @ImageResult TABLE ( - Id INT, - FileId INT, - AltText NVARCHAR(125), - Description NVARCHAR(250) - ); - - INSERT INTO @ImageResult - SELECT i.Id, i.FileId, i.AltText, i.Description - FROM resources.Image i - INNER JOIN @MediaBlockResult mb ON i.Id = mb.ImageId - WHERE i.Deleted = 0; - - SELECT * FROM @ImageResult; - - -- Image File - DECLARE @ImageFileResult TABLE ( - Id INT, - FileTypeId INT, - FileChunkDetailId INT, - [FileName] NVARCHAR(255), - FilePath NVARCHAR(1024), - FileSizekb INT - ); - - INSERT INTO @ImageFileResult - SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb - FROM resources.[File] f - INNER JOIN @ImageResult ir ON f.Id = ir.FileId - WHERE f.Deleted = 0; - - SELECT * FROM @ImageFileResult; - - -- Image File - Partial File - SELECT pf.* - FROM resources.PartialFile pf - INNER JOIN @ImageFileResult ifr ON pf.FileId = ifr.Id - WHERE pf.Deleted = 0; - - -- Video - DECLARE @VideoResult TABLE ( - Id INT, - FileId INT - ); - - INSERT INTO @VideoResult - SELECT v.Id, v.FileId - FROM resources.Video v - INNER JOIN @MediaBlockResult mb ON v.Id = mb.VideoId - WHERE v.Deleted = 0; - - SELECT * FROM @VideoResult; - - -- Video File - DECLARE @VideoFileResult TABLE ( - Id INT, - FileTypeId INT, - FileChunkDetailId INT, - [FileName] NVARCHAR(255), - FilePath NVARCHAR(1024), - FileSizekb INT - ); - - INSERT INTO @VideoFileResult - SELECT f.Id, f.FileTypeId, f.FileChunkDetailId, f.[FileName], f.FilePath, f.FileSizeKb - FROM resources.[File] f - INNER JOIN @VideoResult vr ON f.Id = vr.FileId - WHERE f.Deleted = 0; - - SELECT * FROM @VideoFileResult; - - -- Video File - Partial File - SELECT pf.* - FROM resources.PartialFile pf - INNER JOIN @VideoFileResult vf ON pf.FileId = vf.Id - WHERE pf.Deleted = 0; - - -- Video File Detail - SELECT vf.* - FROM resources.VideoFile vf - INNER JOIN @VideoFileResult vfr ON vf.FileId = vfr.Id - WHERE vf.Deleted = 0; - - -- Question Block - DECLARE @QuestionResult TABLE ( - Id INT, - BlockId INT, - QuestionBlockCollectionId INT, - FeedbackBlockCollectionId INT, - QuestionType INT, - AllowReveal BIT - ); - - INSERT INTO @QuestionResult - SELECT qb.Id, qb.BlockId, qb.QuestionBlockCollectionId, qb.FeedbackBlockCollectionId, qb.QuestionType, qb.AllowReveal - FROM resources.QuestionBlock qb - INNER JOIN @BlockResult b ON qb.BlockId = b.Id - WHERE qb.Deleted = 0; - - SELECT * FROM @QuestionResult; - - -- Question Answer - SELECT qa.* - FROM resources.QuestionAnswer qa - INNER JOIN @QuestionResult qr ON qa.QuestionBlockId = qr.Id - WHERE qa.Deleted = 0; - - -- Image Carousel Block - SELECT icb.* - FROM resources.ImageCarouselBlock icb - INNER JOIN @BlockResult b ON icb.BlockId = b.Id - WHERE icb.Deleted = 0; -END \ No newline at end of file diff --git a/WebAPI/LearningHub.Nhs.Repository.Interface/Resources/IBlockCollectionRepository.cs b/WebAPI/LearningHub.Nhs.Repository.Interface/Resources/IBlockCollectionRepository.cs index e24e35540..2a5bbb916 100644 --- a/WebAPI/LearningHub.Nhs.Repository.Interface/Resources/IBlockCollectionRepository.cs +++ b/WebAPI/LearningHub.Nhs.Repository.Interface/Resources/IBlockCollectionRepository.cs @@ -39,6 +39,6 @@ public interface IBlockCollectionRepository : IGenericRepositoryThe excluded ResourceVersion Id. /// The resource type. /// The . - Task> GetAllBlockCollections(int excludeResourceVersionId, ResourceTypeEnum resourceTypeEnum); + Task GetResourceBlockCollectionsFileAsync(int excludeResourceVersionId, ResourceTypeEnum resourceTypeEnum); } } diff --git a/WebAPI/LearningHub.Nhs.Repository/Resources/BlockCollectionRepository.cs b/WebAPI/LearningHub.Nhs.Repository/Resources/BlockCollectionRepository.cs index 0f027f426..dc9ac9d94 100644 --- a/WebAPI/LearningHub.Nhs.Repository/Resources/BlockCollectionRepository.cs +++ b/WebAPI/LearningHub.Nhs.Repository/Resources/BlockCollectionRepository.cs @@ -172,28 +172,19 @@ await Task.WhenAll(blockCollection.Blocks /// The excluded ResourceVersion Id. /// The resource type. /// The . - public async Task> GetAllBlockCollections(int excludeResourceVersionId, ResourceTypeEnum resourceTypeEnum) + public async Task GetResourceBlockCollectionsFileAsync(int excludeResourceVersionId, ResourceTypeEnum resourceTypeEnum) { - if (resourceTypeEnum == ResourceTypeEnum.Case) + if (excludeResourceVersionId > 0) { - var caseContent = await this.GetAllCaseBlockCollections(excludeResourceVersionId); - return new Tuple(caseContent, null, null); - } - else if (resourceTypeEnum == ResourceTypeEnum.Assessment) - { - var assessmentContentTask = this.GetAllAssessmentContentBlockCollections(excludeResourceVersionId); - var assessmentGuidanceTask = this.GetAllAssessmentGuidanceBlockCollections(excludeResourceVersionId); - - await Task.WhenAll(assessmentContentTask, assessmentGuidanceTask); - - return new Tuple( - null, - await assessmentContentTask, - await assessmentGuidanceTask); + var param0 = new SqlParameter("@excludeResourceVersionId", SqlDbType.Int) { Value = excludeResourceVersionId }; + var param1 = new SqlParameter("@resourceType", SqlDbType.Int) { Value = (int)resourceTypeEnum }; + var param2 = new SqlParameter("@filePath", SqlDbType.NVarChar) { Direction = ParameterDirection.Output, Size = -1 }; + await this.DbContext.Database.ExecuteSqlRawAsync("[resources].[BlockCollectionFileSearch] @excludeResourceVersionId, @resourceType, @filePath output", param0, param1, param2); + return param2.Value.ToString(); } else { - return new Tuple(null, null, null); + return string.Empty; } } @@ -448,7 +439,7 @@ private void SetAuditFieldsOnChildren(int userId, ImageCarouselBlock imageCarous this.SetAuditFieldsOnChildren(userId, imageCarouselBlock.ImageBlockCollection, isCreate); } - private async Task GetAllCaseBlockCollections(int excludeResourceVersionId) + private async Task GetResourceBlockCollectionsFilePath(int excludeResourceVersionId) { var command = new SqlCommand { @@ -515,141 +506,5 @@ await Task.WhenAll(blockCollection.Blocks return blockCollection; } - - private async Task GetAllAssessmentContentBlockCollections(int excludeResourceVersionId) - { - var command = new SqlCommand - { - CommandType = CommandType.StoredProcedure, - CommandText = "[resources].[AssessmentContentBlockCollectionGetAll]", - Parameters = { new SqlParameter("@excludeResourceVersionId", SqlDbType.Int) { Value = excludeResourceVersionId } }, - }; - - var results = this.DbContext.MultipleResults(command) - .With() - .With() - .With() - .With() - .With() - .With() - .With() - .With() - .With() - .With() - .With() - .With() - .With() - .With() - .With() - .With() - .With() - .With