diff --git a/RMuseum/Controllers/AudioNarrationController.cs b/RMuseum/Controllers/AudioNarrationController.cs index 0e5cb592..c4ade907 100644 --- a/RMuseum/Controllers/AudioNarrationController.cs +++ b/RMuseum/Controllers/AudioNarrationController.cs @@ -179,10 +179,7 @@ namespace RMuseum.Controllers [ProducesResponseType((int)HttpStatusCode.Forbidden, Type = typeof(string))] public async Task UpdatePoemNarration(int id, [FromBody] PoemNarrationViewModel metadata) { - if (metadata.ReviewStatus == AudioReviewStatus.Approved || metadata.ReviewStatus == AudioReviewStatus.Rejected) - { - return StatusCode((int)HttpStatusCode.Forbidden); - } + Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value); @@ -215,6 +212,14 @@ namespace RMuseum.Controllers } + if(narration.Result.ReviewStatus != metadata.ReviewStatus) + { + if (metadata.ReviewStatus == AudioReviewStatus.Approved || metadata.ReviewStatus == AudioReviewStatus.Rejected) + { + return StatusCode((int)HttpStatusCode.Forbidden); + } + } + var res = await _audioService.UpdatePoemNarration(id, metadata); if (!string.IsNullOrEmpty(res.ExceptionString)) return BadRequest(res.ExceptionString); @@ -230,7 +235,7 @@ namespace RMuseum.Controllers /// [HttpPut("moderate/{id}")] [Authorize(Policy = RMuseumSecurableItem.AudioNarrationEntityShortName + ":" + RMuseumSecurableItem.ModerateOperationShortName)] - [ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(bool))] + [ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(PoemNarrationViewModel))] [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))] [ProducesResponseType((int)HttpStatusCode.Forbidden, Type = typeof(string))] public async Task ModeratePoemNarration(int id, [FromBody] PoemNarrationModerateViewModel model) diff --git a/RMuseum/Services/IAudioNarrationService.cs b/RMuseum/Services/IAudioNarrationService.cs index 0499be60..42ae2bea 100644 --- a/RMuseum/Services/IAudioNarrationService.cs +++ b/RMuseum/Services/IAudioNarrationService.cs @@ -88,7 +88,7 @@ namespace RMuseum.Services /// /// /// - Task> ModeratePoemNarration(int id, Guid moderatorId, PoemNarrationModerateViewModel model); + Task> ModeratePoemNarration(int id, Guid moderatorId, PoemNarrationModerateViewModel model); /// /// Get Upload Session (including files) diff --git a/RMuseum/Services/Implementation/AudioNarrationService.cs b/RMuseum/Services/Implementation/AudioNarrationService.cs index bd11eece..f92b9e4e 100644 --- a/RMuseum/Services/Implementation/AudioNarrationService.cs +++ b/RMuseum/Services/Implementation/AudioNarrationService.cs @@ -717,15 +717,15 @@ namespace RMuseum.Services.Implementation /// /// /// - public async Task> ModeratePoemNarration(int id, Guid moderatorId, PoemNarrationModerateViewModel model) + public async Task> ModeratePoemNarration(int id, Guid moderatorId, PoemNarrationModerateViewModel model) { try { - PoemNarration narration = await _context.AudioFiles.Where(a => a.Id == id).SingleOrDefaultAsync(); + PoemNarration narration = await _context.AudioFiles.Include(a => a.Owner).Where(a => a.Id == id).SingleOrDefaultAsync(); if (narration == null) - return new RServiceResult(false, "404"); - if (narration.ReviewStatus != AudioReviewStatus.Pending) - return new RServiceResult(false, "خوانش می‌بایست در وضعیت در انتظار بازبینی باشد."); + return new RServiceResult(null, "404"); + if (narration.ReviewStatus != AudioReviewStatus.Draft || narration.ReviewStatus != AudioReviewStatus.Pending) + return new RServiceResult(null, "خوانش می‌بایست در وضعیت پیش‌نویس یا در انتظار بازبینی باشد."); narration.ReviewDate = DateTime.Now; narration.ReviewerId = moderatorId; if(model.Result != PoemNarrationModerationResult.MetadataNeedsFixation) @@ -778,11 +778,11 @@ namespace RMuseum.Services.Implementation - return new RServiceResult(true); + return new RServiceResult(new PoemNarrationViewModel(narration, narration.Owner, await _context.GanjoorPoems.Where(p => p.Id == narration.GanjoorPostId).SingleOrDefaultAsync())); } catch (Exception exp) { - return new RServiceResult(false, exp.ToString()); + return new RServiceResult(null, exp.ToString()); } }