Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public class AzureConfig
/// Gets or sets the azure blob settings.
/// </summary>
public AzureBlobSettings AzureBlobSettings { get; set; } = null!;

/// <summary>
/// Gets or sets the azure storage queue.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,13 @@ Task<AssessmentProgressViewModel> GetAssessmentProgress(
/// <returns>If the user has published resources.</returns>
Task<bool> HasPublishedResourcesAsync(int userId);

/// <summary>
/// The get resource version by id async.
/// </summary>
/// <param name="resourceVersionId">The resourceVersionId<see cref="int"/>.</param>
/// <returns>The <see cref="Task{ResourceDetailViewModel}"/>.</returns>
Task<ResourceDetailViewModel> GetResourceVersionByIdAsync(int resourceVersionId);

/// <summary>
/// The get resource by activityStatusIds async.
/// </summary>
Expand Down Expand Up @@ -300,6 +307,14 @@ Task<AssessmentProgressViewModel> GetAssessmentProgress(
/// <returns>The <see cref="Task"/>.</returns>
Task<CaseViewModel> GetCaseDetailsByIdAsync(int resourceVersionId);

/// <summary>
/// The GetExternalContentDetails.
/// </summary>
/// <param name="resourceVersionId">The resourceVersionId<see cref="int"/>.</param>
/// <param name="userId">userId.</param>
/// <returns>The <see cref="Task{ExternalContentDetailsViewModel}"/>.</returns>
Task<ExternalContentDetailsViewModel> GetExternalContentDetails(int resourceVersionId, int userId);

/// <summary>
/// The get case resource version async.
/// </summary>
Expand Down
113 changes: 65 additions & 48 deletions OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/ResourceService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -521,6 +521,22 @@ public async Task<CaseViewModel> GetCaseDetailsByIdAsync(int resourceVersionId)
return caseViewModel;
}

/// <summary>
/// The GetExternalContentDetails.
/// </summary>
/// <param name="resourceVersionId">The resourceVersionId<see cref="int"/>.</param>
/// <param name="userId">userId.</param>
/// <returns>The <see cref="Task{ExternalContentDetailsViewModel}"/>.</returns>
public async Task<ExternalContentDetailsViewModel> GetExternalContentDetails(int resourceVersionId, int userId)
{
var viewModel = await this.resourceVersionRepository.GetExternalContentDetails(resourceVersionId, userId);
if (viewModel != null)
{
viewModel.HostedContentUrl = $"{this.learningHubConfig.ContentServerUrl}/{viewModel.ExternalReference}/".ToLower();
}

return viewModel;
}

/// <summary>
/// The GetFileStatusDetailsAsync.
Expand Down Expand Up @@ -667,6 +683,55 @@ public async Task<List<ResourceLicenceViewModel>> GetResourceLicencesAsync()
return licenceList;
}

/// <summary>
/// The get resource version by id async.
/// </summary>
/// <param name="resourceVersionId">The resourceVersionId<see cref="int"/>.</param>
/// <returns>The <see cref="Task{ResourceDetailViewModel}"/>.</returns>
public async Task<ResourceDetailViewModel> GetResourceVersionByIdAsync(int resourceVersionId)
{
var resourceVersion = await this.resourceVersionRepository.GetBasicByIdAsync(resourceVersionId);

var vm = this.mapper.Map<ResourceDetailViewModel>(resourceVersion);

var nodeResources = await this.nodeResourceRepository.GetByResourceIdAsync(vm.ResourceId);
var draftNodeResources = nodeResources.Where(x => x.VersionStatusEnum == VersionStatusEnum.Draft).ToList();
var publishedNodeResources = nodeResources.Where(x => x.VersionStatusEnum == VersionStatusEnum.Published || x.VersionStatusEnum == VersionStatusEnum.Unpublished).ToList();

if (draftNodeResources.Count() == 0)
{
if (publishedNodeResources != null && publishedNodeResources.Count == 1)
{
vm.NodeId = publishedNodeResources[0].NodeId;
vm.ResourceCatalogueId = await this.nodePathRepository.GetCatalogueRootNodeId(publishedNodeResources[0].NodeId);
}
else
{
vm.NodeId = 0;
vm.ResourceCatalogueId = 0;
}
}
else if (draftNodeResources.Count() > 1)
{
throw new Exception("Resource must belong to a single catalogue. ResourceVersionId: " + vm.ResourceVersionId.ToString() + ". ResourceId: " + vm.ResourceId.ToString() + ", VersionStatusEnum:" + vm.VersionStatusEnum.ToString());
}
else
{
vm.NodeId = draftNodeResources[0].NodeId;
vm.ResourceCatalogueId = await this.nodePathRepository.GetCatalogueRootNodeId(draftNodeResources[0].NodeId);
}

if (publishedNodeResources != null && publishedNodeResources.Count == 1)
{
vm.PublishedResourceCatalogueId = await this.nodePathRepository.GetCatalogueRootNodeId(publishedNodeResources[0].NodeId);
}

vm.Flags = await this.GetResourceVersionFlagViewModels(resourceVersion.ResourceVersionFlag);

return vm;
}


/// <summary>
/// The get resource version view model async.
/// </summary>
Expand Down Expand Up @@ -1267,54 +1332,6 @@ public async Task<bool> HasPublishedResourcesAsync(int userId)
return await this.resourceRepository.UserHasPublishedResourcesAsync(userId);
}

/// <summary>
/// The get resource version by id async.
/// </summary>
/// <param name="resourceVersionId">The resourceVersionId<see cref="int"/>.</param>
/// <returns>The <see cref="Task{ResourceDetailViewModel}"/>.</returns>
public async Task<ResourceDetailViewModel> GetResourceVersionByIdAsync(int resourceVersionId)
{
var resourceVersion = await this.resourceVersionRepository.GetBasicByIdAsync(resourceVersionId);

var vm = this.mapper.Map<ResourceDetailViewModel>(resourceVersion);

var nodeResources = await this.nodeResourceRepository.GetByResourceIdAsync(vm.ResourceId);
var draftNodeResources = nodeResources.Where(x => x.VersionStatusEnum == VersionStatusEnum.Draft).ToList();
var publishedNodeResources = nodeResources.Where(x => x.VersionStatusEnum == VersionStatusEnum.Published || x.VersionStatusEnum == VersionStatusEnum.Unpublished).ToList();

if (draftNodeResources.Count() == 0)
{
if (publishedNodeResources != null && publishedNodeResources.Count == 1)
{
vm.NodeId = publishedNodeResources[0].NodeId;
vm.ResourceCatalogueId = await this.nodePathRepository.GetCatalogueRootNodeId(publishedNodeResources[0].NodeId);
}
else
{
vm.NodeId = 0;
vm.ResourceCatalogueId = 0;
}
}
else if (draftNodeResources.Count() > 1)
{
throw new Exception("Resource must belong to a single catalogue. ResourceVersionId: " + vm.ResourceVersionId.ToString() + ". ResourceId: " + vm.ResourceId.ToString() + ", VersionStatusEnum:" + vm.VersionStatusEnum.ToString());
}
else
{
vm.NodeId = draftNodeResources[0].NodeId;
vm.ResourceCatalogueId = await this.nodePathRepository.GetCatalogueRootNodeId(draftNodeResources[0].NodeId);
}

if (publishedNodeResources.Count == 1)
{
vm.PublishedResourceCatalogueId = await this.nodePathRepository.GetCatalogueRootNodeId(publishedNodeResources[0].NodeId);
}

vm.Flags = await this.GetResourceVersionFlagViewModels(resourceVersion.ResourceVersionFlag);

return vm;
}

/// <summary>
/// The save resource version flag async.
/// </summary>
Expand Down
30 changes: 26 additions & 4 deletions OpenAPI/LearningHub.Nhs.OpenApi/Controllers/ResourceController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,17 @@ public async Task<ActionResult> GetCaseResourceVersionAsync(int resourceVersionI
return this.Ok(await this.resourceService.GetCaseDetailsByIdAsync(resourceVersionId));
}

/// <summary>
/// The GetExternalContentDetailsById.
/// </summary>
/// <param name="resourceVersionId">The resourceVersionId<see cref="int"/>.</param>
/// <returns>The <see cref="Task{ActionResult}"/>.</returns>
[HttpGet("GetExternalContentDetailsById/{resourceVersionId}")]
public async Task<ActionResult> GetScormContentDetailsById(int resourceVersionId)
{
return this.Ok(await this.resourceService.GetExternalContentDetails(resourceVersionId, this.CurrentUserId.GetValueOrDefault()));
}

/// <summary>
/// The GetFileStatusDetailsAsync.
/// </summary>
Expand Down Expand Up @@ -342,6 +353,17 @@ public async Task<ActionResult> GetResourceLicences()
return this.Ok(await this.resourceService.GetResourceLicencesAsync());
}

/// <summary>
/// Get specific ResourceVersion by Id.
/// </summary>
/// <param name="resourceVersionId">The resourceVersionId<see cref="int"/>.</param>
/// <returns>The <see cref="Task{ActionResult}"/>.</returns>
[HttpGet("GetResourceVersion/{resourceVersionId}")]
public async Task<ActionResult> GetResourceVersionAsync(int resourceVersionId)
{
return this.Ok(await this.resourceService.GetResourceVersionByIdAsync(resourceVersionId));
}

/// <summary>
/// Get specific ResourceVersionViewModel by Id.
/// </summary>
Expand Down Expand Up @@ -798,7 +820,7 @@ public async Task<IActionResult> DuplicateBlocks(DuplicateBlocksRequestModel dup
/// <returns>The <see cref="Task{IActionResult}"/>.</returns>
[HttpPost]
[Route("CreateResource")]
public async Task<IActionResult> CreateResourceAsync(ResourceDetailViewModel viewModel)
public async Task<IActionResult> CreateResourceAsync([FromBody] ResourceDetailViewModel viewModel)
{
var vr = await this.resourceService.CreateResourceAsync(viewModel, this.CurrentUserId.GetValueOrDefault());
if (vr.IsValid)
Expand Down Expand Up @@ -891,7 +913,7 @@ public async Task<IActionResult> SubmitResourceVersionForPublishAsync(PublishVie
[HttpPost]
[Authorize(Policy = "ReadWrite")]
[Route("UpdateResourceVersion")]
public async Task<IActionResult> UpdateResourceVersionAsync(ResourceDetailViewModel resourceDetailViewModel)
public async Task<IActionResult> UpdateResourceVersionAsync([FromBody] ResourceDetailViewModel resourceDetailViewModel)
{
var vr = await this.resourceService.UpdateResourceVersionAsync(resourceDetailViewModel, this.CurrentUserId.GetValueOrDefault());

Expand Down Expand Up @@ -1093,7 +1115,7 @@ public async Task<IActionResult> DeleteResourceAttributeFileAsync(FileDeleteRequ
/// <returns>The <see cref="Task{IActionResult}"/>.</returns>
[HttpPost]
[Route("UpdateAudioDetail")]
public async Task<IActionResult> UpdateAudioDetailAsync(AudioUpdateRequestViewModel audioViewModel)
public async Task<IActionResult> UpdateAudioDetailAsync([FromBody] AudioUpdateRequestViewModel audioViewModel)
{
var vr = await this.resourceService.UpdateAudioDetailAsync(audioViewModel, this.CurrentUserId.GetValueOrDefault());

Expand All @@ -1114,7 +1136,7 @@ public async Task<IActionResult> UpdateAudioDetailAsync(AudioUpdateRequestViewMo
/// <returns>The <see cref="Task{IActionResult}"/>.</returns>
[HttpPost]
[Route("UpdateArticleDetail")]
public async Task<IActionResult> UpdateArticleDetailAsync(ArticleUpdateRequestViewModel articleViewModel)
public async Task<IActionResult> UpdateArticleDetailAsync([FromBody] ArticleUpdateRequestViewModel articleViewModel)
{
var vr = await this.resourceService.UpdateArticleDetailAsync(articleViewModel, this.CurrentUserId.GetValueOrDefault());

Expand Down
50 changes: 50 additions & 0 deletions OpenAPI/LearningHub.Nhs.OpenApi/SwaggerDefinitions/v1.3.0.json
Original file line number Diff line number Diff line change
Expand Up @@ -3554,6 +3554,31 @@
}
}
},
"/Resource/GetExternalContentDetailsById/{resourceVersionId}": {
"get": {
"tags": [
"Resource"
],
"summary": "Get External content details of a resource by ResourceVersionId.",
"parameters": [
{
"name": "resourceVersionId",
"in": "path",
"description": "The resourceVersionIdSystem.Int32.",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/Resource/GetWeblinkDetails/{resourceVersionId}": {
"get": {
"tags": [
Expand Down Expand Up @@ -3682,6 +3707,31 @@
}
}
},
"/Resource/GetResourceVersion/{resourceVersionId}": {
"get": {
"tags": [
"Resource"
],
"summary": "Get specific ResourceVersion by Id.",
"parameters": [
{
"name": "resourceVersionId",
"in": "path",
"description": "The resourceVersionIdSystem.Int32.",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/Resource/GetResourceVersionViewModel/{resourceVersionId}": {
"get": {
"tags": [
Expand Down
Loading