using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using RMuseum.Models.Auth.Memory; using RMuseum.Models.GanjoorAudio; using RMuseum.Models.GanjoorAudio.ViewModels; using RMuseum.Services; using RSecurityBackend.Models.Generic; using RSecurityBackend.Services; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Threading.Tasks; namespace RMuseum.Controllers { [Produces("application/json")] [Route("api/audio")] public class AudioNarrationController : Controller { /// /// Gets audio narrations, user must have narration::moderate permission to be able to see all users narrations /// /// /// default: false, user must have narration::moderate permission to be able to see all users narrations /// default: -1, unfiltered /// [HttpGet] [Authorize] [ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable))] [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))] [ProducesResponseType((int)HttpStatusCode.Forbidden, Type = typeof(string))] public async Task Get([FromQuery] PagingParameterModel paging, bool allUsers = false, AudioReviewStatus status = AudioReviewStatus.All ) { Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value); Guid sessionId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "SessionId").Value); if (allUsers) { RServiceResult canView = await _userPermissionChecker.Check ( loggedOnUserId, sessionId, RMuseumSecurableItem.AudioNarrationEntityShortName, RMuseumSecurableItem.ModerateOperationShortName ); if (!string.IsNullOrEmpty(canView.ExceptionString)) return BadRequest(canView.ExceptionString); if (!canView.Result) return StatusCode((int)HttpStatusCode.Forbidden); } var res = await _audioService.GetAll(paging, allUsers ? Guid.Empty : loggedOnUserId, status); if(!string.IsNullOrEmpty(res.ExceptionString)) return BadRequest(res.ExceptionString); // Paging Header HttpContext.Response.Headers.Add("paging-headers", JsonConvert.SerializeObject(res.Result.PagingMeta)); return Ok(res.Result.Items); } /// /// imports data from ganjoor MySql database /// /// [HttpPost] [Route("mysqlonetimeimport")] [Authorize(Policy = RMuseumSecurableItem.AudioNarrationEntityShortName + ":" + RMuseumSecurableItem.ImportOperationShortName)] [ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(bool))] [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))] public async Task MysqlonetimeImport() { Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value); RServiceResult res = await _audioService.OneTimeImport(loggedOnUserId); if (res.Result) return Ok(); return BadRequest(res.ExceptionString); } /// /// constructor /// /// /// /// public AudioNarrationController(IAudioNarrationService audioService, IUserPermissionChecker userPermissionChecker) { _audioService = audioService; _userPermissionChecker = userPermissionChecker; } /// /// Artifact Service /// protected readonly IAudioNarrationService _audioService; /// /// IUserPermissionChecker instance /// protected IUserPermissionChecker _userPermissionChecker; } }