#13 update narration metadata PUT API
This commit is contained in:
parent
4e277f12cd
commit
e171cf4e58
@ -68,6 +68,54 @@ namespace RMuseum.Controllers
|
|||||||
return Ok(res.Result.Items);
|
return Ok(res.Result.Items);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// updates narration metadata, user must have narration::moderate permission to change narration status from pending to approved or rejected or modify other users narrations metadata
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
/// <param name="metadata"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
|
||||||
|
[HttpPut("{id}")]
|
||||||
|
[Authorize]
|
||||||
|
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(PoemNarrationUpdateViewModel))]
|
||||||
|
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||||
|
[ProducesResponseType((int)HttpStatusCode.Forbidden, Type = typeof(string))]
|
||||||
|
public async Task<IActionResult> UpdatePoemNarration(Guid id, [FromBody] PoemNarrationUpdateViewModel metadata)
|
||||||
|
{
|
||||||
|
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||||
|
|
||||||
|
var narration = await _audioService.Get(id);
|
||||||
|
if (!string.IsNullOrEmpty(narration.ExceptionString))
|
||||||
|
return BadRequest(narration.ExceptionString);
|
||||||
|
|
||||||
|
if(narration.Result.Owner.Id != id || metadata.ReviewStatus == AudioReviewStatus.Approved || metadata.ReviewStatus == AudioReviewStatus.Rejected)
|
||||||
|
{
|
||||||
|
Guid sessionId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "SessionId").Value);
|
||||||
|
RServiceResult<bool>
|
||||||
|
canModerate =
|
||||||
|
await _userPermissionChecker.Check
|
||||||
|
(
|
||||||
|
loggedOnUserId,
|
||||||
|
sessionId,
|
||||||
|
RMuseumSecurableItem.AudioNarrationEntityShortName,
|
||||||
|
RMuseumSecurableItem.ModerateOperationShortName
|
||||||
|
);
|
||||||
|
if (!string.IsNullOrEmpty(canModerate.ExceptionString))
|
||||||
|
return BadRequest(canModerate.ExceptionString);
|
||||||
|
|
||||||
|
if (!canModerate.Result)
|
||||||
|
return StatusCode((int)HttpStatusCode.Forbidden);
|
||||||
|
}
|
||||||
|
|
||||||
|
var res = await _audioService.UpdatePoemNarration(id, metadata);
|
||||||
|
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||||
|
return BadRequest(res.ExceptionString);
|
||||||
|
|
||||||
|
return Ok(res.Result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get User Uploads
|
/// Get User Uploads
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -0,0 +1,41 @@
|
|||||||
|
namespace RMuseum.Models.GanjoorAudio.ViewModels
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Poem Narration View Model for updates
|
||||||
|
/// </summary>
|
||||||
|
public class PoemNarrationUpdateViewModel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Audio Title
|
||||||
|
/// </summary>
|
||||||
|
public string AudioTitle { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Audio Artist
|
||||||
|
/// </summary>
|
||||||
|
public string AudioArtist { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Audio Artist Url
|
||||||
|
/// </summary>
|
||||||
|
public string AudioArtistUrl { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Audio Source
|
||||||
|
/// </summary>
|
||||||
|
public string AudioSrc { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Audio Src Url
|
||||||
|
/// </summary>
|
||||||
|
public string AudioSrcUrl { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Review Status
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// changing from Draft => Pending or Pending => Draft is possible for owner, other changes need narration::moderate permission
|
||||||
|
/// </remarks>
|
||||||
|
public AudioReviewStatus ReviewStatus { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -629,6 +629,14 @@
|
|||||||
<param name="status">default: -1, unfiltered</param>
|
<param name="status">default: -1, unfiltered</param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:RMuseum.Controllers.AudioNarrationController.UpdatePoemNarration(System.Guid,RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationUpdateViewModel)">
|
||||||
|
<summary>
|
||||||
|
updates narration metadata, user must have narration::moderate permission to change narration status from pending to approved or rejected or modify other users narrations metadata
|
||||||
|
</summary>
|
||||||
|
<param name="id"></param>
|
||||||
|
<param name="metadata"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:RMuseum.Controllers.AudioNarrationController.GetUploads(RSecurityBackend.Models.Generic.PagingParameterModel,System.Boolean)">
|
<member name="M:RMuseum.Controllers.AudioNarrationController.GetUploads(RSecurityBackend.Models.Generic.PagingParameterModel,System.Boolean)">
|
||||||
<summary>
|
<summary>
|
||||||
Get User Uploads
|
Get User Uploads
|
||||||
@ -1875,6 +1883,44 @@
|
|||||||
is default
|
is default
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="T:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationUpdateViewModel">
|
||||||
|
<summary>
|
||||||
|
Poem Narration View Model for updates
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationUpdateViewModel.AudioTitle">
|
||||||
|
<summary>
|
||||||
|
Audio Title
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationUpdateViewModel.AudioArtist">
|
||||||
|
<summary>
|
||||||
|
Audio Artist
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationUpdateViewModel.AudioArtistUrl">
|
||||||
|
<summary>
|
||||||
|
Audio Artist Url
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationUpdateViewModel.AudioSrc">
|
||||||
|
<summary>
|
||||||
|
Audio Source
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationUpdateViewModel.AudioSrcUrl">
|
||||||
|
<summary>
|
||||||
|
Audio Src Url
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationUpdateViewModel.ReviewStatus">
|
||||||
|
<summary>
|
||||||
|
Review Status
|
||||||
|
</summary>
|
||||||
|
<remarks>
|
||||||
|
changing from Draft => Pending or Pending => Draft is possible for owner, other changes need narration::moderate permission
|
||||||
|
</remarks>
|
||||||
|
</member>
|
||||||
<member name="T:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel">
|
<member name="T:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel">
|
||||||
<summary>
|
<summary>
|
||||||
Poem Narration view model
|
Poem Narration view model
|
||||||
@ -3548,6 +3594,21 @@
|
|||||||
<param name="status"></param>
|
<param name="status"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:RMuseum.Services.IAudioNarrationService.Get(System.Guid)">
|
||||||
|
<summary>
|
||||||
|
return selected narration information
|
||||||
|
</summary>
|
||||||
|
<param name="id"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:RMuseum.Services.IAudioNarrationService.UpdatePoemNarration(System.Guid,RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationUpdateViewModel)">
|
||||||
|
<summary>
|
||||||
|
updates metadata for narration
|
||||||
|
</summary>
|
||||||
|
<param name="id"></param>
|
||||||
|
<param name="metadata"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:RMuseum.Services.IAudioNarrationService.OneTimeImport(System.Guid)">
|
<member name="M:RMuseum.Services.IAudioNarrationService.OneTimeImport(System.Guid)">
|
||||||
<summary>
|
<summary>
|
||||||
imports data from ganjoor MySql database
|
imports data from ganjoor MySql database
|
||||||
@ -4343,6 +4404,21 @@
|
|||||||
<param name="status"></param>
|
<param name="status"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:RMuseum.Services.Implementation.AudioNarrationService.Get(System.Guid)">
|
||||||
|
<summary>
|
||||||
|
return selected narration information
|
||||||
|
</summary>
|
||||||
|
<param name="id"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:RMuseum.Services.Implementation.AudioNarrationService.UpdatePoemNarration(System.Guid,RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationUpdateViewModel)">
|
||||||
|
<summary>
|
||||||
|
updates metadata for narration
|
||||||
|
</summary>
|
||||||
|
<param name="id"></param>
|
||||||
|
<param name="metadata"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:RMuseum.Services.Implementation.AudioNarrationService.OneTimeImport(System.Guid)">
|
<member name="M:RMuseum.Services.Implementation.AudioNarrationService.OneTimeImport(System.Guid)">
|
||||||
<summary>
|
<summary>
|
||||||
imports data from ganjoor MySql database
|
imports data from ganjoor MySql database
|
||||||
|
|||||||
@ -22,6 +22,21 @@ namespace RMuseum.Services
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public Task<RServiceResult<(PaginationMetadata PagingMeta, PoemNarrationViewModel[] Items)>> GetAll(PagingParameterModel paging, Guid filteredUserId, AudioReviewStatus status);
|
public Task<RServiceResult<(PaginationMetadata PagingMeta, PoemNarrationViewModel[] Items)>> GetAll(PagingParameterModel paging, Guid filteredUserId, AudioReviewStatus status);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// return selected narration information
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<RServiceResult<PoemNarrationViewModel>> Get(Guid id);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// updates metadata for narration
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
/// <param name="metadata"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<RServiceResult<bool>> UpdatePoemNarration(Guid id, PoemNarrationUpdateViewModel metadata);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// imports data from ganjoor MySql database
|
/// imports data from ganjoor MySql database
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -65,6 +65,52 @@ namespace RMuseum.Services.Implementation
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// return selected narration information
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<RServiceResult<PoemNarrationViewModel>> Get(Guid id)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return new RServiceResult<PoemNarrationViewModel>(new PoemNarrationViewModel(await _context.AudioFiles.Where(a => a.Id == id).SingleOrDefaultAsync()));
|
||||||
|
}
|
||||||
|
catch (Exception exp)
|
||||||
|
{
|
||||||
|
return new RServiceResult<PoemNarrationViewModel>(null, exp.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// updates metadata for narration
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
/// <param name="metadata"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<RServiceResult<bool>> UpdatePoemNarration(Guid id, PoemNarrationUpdateViewModel metadata)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
PoemNarration narration = await _context.AudioFiles.Where(a => a.Id == id).SingleOrDefaultAsync();
|
||||||
|
if(narration == null)
|
||||||
|
return new RServiceResult<bool>(false, "404");
|
||||||
|
narration.AudioTitle = metadata.AudioTitle;
|
||||||
|
narration.AudioArtist = metadata.AudioArtist;
|
||||||
|
narration.AudioArtistUrl = metadata.AudioArtistUrl;
|
||||||
|
narration.AudioSrc = metadata.AudioSrc;
|
||||||
|
narration.AudioSrcUrl = metadata.AudioSrcUrl;
|
||||||
|
narration.ReviewStatus = metadata.ReviewStatus;
|
||||||
|
_context.AudioFiles.Update(narration);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
return new RServiceResult<bool>(true);
|
||||||
|
}
|
||||||
|
catch (Exception exp)
|
||||||
|
{
|
||||||
|
return new RServiceResult<bool>(false, exp.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// imports data from ganjoor MySql database
|
/// imports data from ganjoor MySql database
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user