adding an anonymous api for retrieving published recitations
This commit is contained in:
parent
f6899176bd
commit
d274326a97
@ -23,6 +23,28 @@ namespace RMuseum.Controllers
|
|||||||
[Route("api/audio")]
|
[Route("api/audio")]
|
||||||
public class RecitationController : Controller
|
public class RecitationController : Controller
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// returns paginated published recitations, ordered by publish date descending
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="paging"></param>
|
||||||
|
/// <param name="searchTerm"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("published")]
|
||||||
|
[AllowAnonymous]
|
||||||
|
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable<PublicRecitationViewModel>))]
|
||||||
|
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||||
|
public async Task<IActionResult> GetPublished([FromQuery] PagingParameterModel paging, string searchTerm = "")
|
||||||
|
{
|
||||||
|
|
||||||
|
var res = await _audioService.GetPublishedRecitations(paging, searchTerm);
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets audio narrations, user must have recitation::moderate permission to be able to see all users narrations
|
/// Gets audio narrations, user must have recitation::moderate permission to be able to see all users narrations
|
||||||
@ -61,7 +83,7 @@ namespace RMuseum.Controllers
|
|||||||
return StatusCode((int)HttpStatusCode.Forbidden);
|
return StatusCode((int)HttpStatusCode.Forbidden);
|
||||||
}
|
}
|
||||||
|
|
||||||
var res = await _audioService.GetAll(paging, allUsers ? Guid.Empty : loggedOnUserId, status, searchTerm);
|
var res = await _audioService.SecureGetAll(paging, allUsers ? Guid.Empty : loggedOnUserId, status, searchTerm);
|
||||||
if(!string.IsNullOrEmpty(res.ExceptionString))
|
if(!string.IsNullOrEmpty(res.ExceptionString))
|
||||||
return BadRequest(res.ExceptionString);
|
return BadRequest(res.ExceptionString);
|
||||||
|
|
||||||
@ -152,7 +174,7 @@ namespace RMuseum.Controllers
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpGet("verses/{id}")]
|
[HttpGet("verses/{id}")]
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(string))]
|
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(RecitationVerseSync[]))]
|
||||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||||
public async Task<IActionResult> GetPoemNarrationVerseSyncArray(int id)
|
public async Task<IActionResult> GetPoemNarrationVerseSyncArray(int id)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -0,0 +1,91 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace RMuseum.Models.GanjoorAudio.ViewModels
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Public (no user specific data) for publish recitations
|
||||||
|
/// </summary>
|
||||||
|
public class PublicRecitationViewModel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Audio Id
|
||||||
|
/// </summary>
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ganjoor Post Id
|
||||||
|
/// </summary>
|
||||||
|
public int PoemId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Poem Full Title
|
||||||
|
/// </summary>
|
||||||
|
public string PoemFullTitle { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Poem Full Url (without domain name)
|
||||||
|
/// </summary>
|
||||||
|
public string PoemFullUrl { get; set; }
|
||||||
|
|
||||||
|
// <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>
|
||||||
|
/// Legacy Audio Guid
|
||||||
|
/// </summary>
|
||||||
|
public Guid LegacyAudioGuid { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Audio File CheckSum
|
||||||
|
/// </summary>
|
||||||
|
public string Mp3FileCheckSum { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// mp3 size in bytes
|
||||||
|
/// </summary>
|
||||||
|
public int Mp3SizeInBytes { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Publish Date
|
||||||
|
/// </summary>
|
||||||
|
public DateTime PublishDate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// File Last Updated
|
||||||
|
/// </summary>
|
||||||
|
public DateTime FileLastUpdated { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Mp3 Url
|
||||||
|
/// </summary>
|
||||||
|
public string Mp3Url { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Xml Url
|
||||||
|
/// </summary>
|
||||||
|
public string XmlText { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -719,6 +719,14 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<param name="notificationService"></param>
|
<param name="notificationService"></param>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:RMuseum.Controllers.RecitationController.GetPublished(RSecurityBackend.Models.Generic.PagingParameterModel,System.String)">
|
||||||
|
<summary>
|
||||||
|
returns paginated published recitations, ordered by publish date descending
|
||||||
|
</summary>
|
||||||
|
<param name="paging"></param>
|
||||||
|
<param name="searchTerm"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:RMuseum.Controllers.RecitationController.Get(RSecurityBackend.Models.Generic.PagingParameterModel,System.Boolean,RMuseum.Models.GanjoorAudio.AudioReviewStatus,System.String)">
|
<member name="M:RMuseum.Controllers.RecitationController.Get(RSecurityBackend.Models.Generic.PagingParameterModel,System.Boolean,RMuseum.Models.GanjoorAudio.AudioReviewStatus,System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
Gets audio narrations, user must have recitation::moderate permission to be able to see all users narrations
|
Gets audio narrations, user must have recitation::moderate permission to be able to see all users narrations
|
||||||
@ -2150,6 +2158,87 @@
|
|||||||
is default
|
is default
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="T:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel">
|
||||||
|
<summary>
|
||||||
|
Public (no user specific data) for publish recitations
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.Id">
|
||||||
|
<summary>
|
||||||
|
Audio Id
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.PoemId">
|
||||||
|
<summary>
|
||||||
|
Ganjoor Post Id
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.PoemFullTitle">
|
||||||
|
<summary>
|
||||||
|
Poem Full Title
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.PoemFullUrl">
|
||||||
|
<summary>
|
||||||
|
Poem Full Url (without domain name)
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<!-- Badly formed XML comment ignored for member "P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.AudioTitle" -->
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.AudioArtist">
|
||||||
|
<summary>
|
||||||
|
Audio Artist
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.AudioArtistUrl">
|
||||||
|
<summary>
|
||||||
|
Audio Artist Url
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.AudioSrc">
|
||||||
|
<summary>
|
||||||
|
Audio Source
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.AudioSrcUrl">
|
||||||
|
<summary>
|
||||||
|
Audio Src Url
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.LegacyAudioGuid">
|
||||||
|
<summary>
|
||||||
|
Legacy Audio Guid
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.Mp3FileCheckSum">
|
||||||
|
<summary>
|
||||||
|
Audio File CheckSum
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.Mp3SizeInBytes">
|
||||||
|
<summary>
|
||||||
|
mp3 size in bytes
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.PublishDate">
|
||||||
|
<summary>
|
||||||
|
Publish Date
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.FileLastUpdated">
|
||||||
|
<summary>
|
||||||
|
File Last Updated
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.Mp3Url">
|
||||||
|
<summary>
|
||||||
|
Mp3 Url
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PublicRecitationViewModel.XmlText">
|
||||||
|
<summary>
|
||||||
|
Xml Url
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="T:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationModerationResult">
|
<member name="T:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationModerationResult">
|
||||||
<summary>
|
<summary>
|
||||||
Moderation Result
|
Moderation Result
|
||||||
@ -5219,7 +5308,7 @@
|
|||||||
Audio Narration Service Implementation
|
Audio Narration Service Implementation
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:RMuseum.Services.Implementationa.RecitationService.GetAll(RSecurityBackend.Models.Generic.PagingParameterModel,System.Guid,RMuseum.Models.GanjoorAudio.AudioReviewStatus,System.String)">
|
<member name="M:RMuseum.Services.Implementationa.RecitationService.SecureGetAll(RSecurityBackend.Models.Generic.PagingParameterModel,System.Guid,RMuseum.Models.GanjoorAudio.AudioReviewStatus,System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
returns list of narrations
|
returns list of narrations
|
||||||
</summary>
|
</summary>
|
||||||
@ -5229,6 +5318,14 @@
|
|||||||
<param name="searchTerm"></param>
|
<param name="searchTerm"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:RMuseum.Services.Implementationa.RecitationService.GetPublishedRecitations(RSecurityBackend.Models.Generic.PagingParameterModel,System.String)">
|
||||||
|
<summary>
|
||||||
|
returns list of publish narrations
|
||||||
|
</summary>
|
||||||
|
<param name="paging"></param>
|
||||||
|
<param name="searchTerm"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:RMuseum.Services.Implementationa.RecitationService.Get(System.Int32)">
|
<member name="M:RMuseum.Services.Implementationa.RecitationService.Get(System.Int32)">
|
||||||
<summary>
|
<summary>
|
||||||
return selected narration information
|
return selected narration information
|
||||||
@ -5521,7 +5618,7 @@
|
|||||||
Audio Narration Service
|
Audio Narration Service
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:RMuseum.Services.IRecitationService.GetAll(RSecurityBackend.Models.Generic.PagingParameterModel,System.Guid,RMuseum.Models.GanjoorAudio.AudioReviewStatus,System.String)">
|
<member name="M:RMuseum.Services.IRecitationService.SecureGetAll(RSecurityBackend.Models.Generic.PagingParameterModel,System.Guid,RMuseum.Models.GanjoorAudio.AudioReviewStatus,System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
returns list of narrations
|
returns list of narrations
|
||||||
</summary>
|
</summary>
|
||||||
@ -5531,6 +5628,14 @@
|
|||||||
<param name="searchTerm"></param>
|
<param name="searchTerm"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:RMuseum.Services.IRecitationService.GetPublishedRecitations(RSecurityBackend.Models.Generic.PagingParameterModel,System.String)">
|
||||||
|
<summary>
|
||||||
|
returns list of publish narrations
|
||||||
|
</summary>
|
||||||
|
<param name="paging"></param>
|
||||||
|
<param name="searchTerm"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:RMuseum.Services.IRecitationService.Get(System.Int32)">
|
<member name="M:RMuseum.Services.IRecitationService.Get(System.Int32)">
|
||||||
<summary>
|
<summary>
|
||||||
return selected narration information
|
return selected narration information
|
||||||
|
|||||||
@ -22,7 +22,15 @@ namespace RMuseum.Services
|
|||||||
/// <param name="status"></param>
|
/// <param name="status"></param>
|
||||||
/// <param name="searchTerm"></param>
|
/// <param name="searchTerm"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public Task<RServiceResult<(PaginationMetadata PagingMeta, RecitationViewModel[] Items)>> GetAll(PagingParameterModel paging, Guid filteredUserId, AudioReviewStatus status, string searchTerm);
|
public Task<RServiceResult<(PaginationMetadata PagingMeta, RecitationViewModel[] Items)>> SecureGetAll(PagingParameterModel paging, Guid filteredUserId, AudioReviewStatus status, string searchTerm);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// returns list of publish narrations
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="paging"></param>
|
||||||
|
/// <param name="searchTerm"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<RServiceResult<(PaginationMetadata PagingMeta, PublicRecitationViewModel[] Items)>> GetPublishedRecitations(PagingParameterModel paging, string searchTerm);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// return selected narration information
|
/// return selected narration information
|
||||||
|
|||||||
@ -39,7 +39,7 @@ namespace RMuseum.Services.Implementationa
|
|||||||
/// <param name="status"></param>
|
/// <param name="status"></param>
|
||||||
/// <param name="searchTerm"></param>
|
/// <param name="searchTerm"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<RServiceResult<(PaginationMetadata PagingMeta, RecitationViewModel[] Items)>> GetAll(PagingParameterModel paging, Guid filteredUserId, AudioReviewStatus status, string searchTerm)
|
public async Task<RServiceResult<(PaginationMetadata PagingMeta, RecitationViewModel[] Items)>> SecureGetAll(PagingParameterModel paging, Guid filteredUserId, AudioReviewStatus status, string searchTerm)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -70,6 +70,68 @@ namespace RMuseum.Services.Implementationa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// returns list of publish narrations
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="paging"></param>
|
||||||
|
/// <param name="searchTerm"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<RServiceResult<(PaginationMetadata PagingMeta, PublicRecitationViewModel[] Items)>> GetPublishedRecitations(PagingParameterModel paging, string searchTerm)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var source =
|
||||||
|
from audio in _context.Recitations
|
||||||
|
join poem in _context.GanjoorPoems
|
||||||
|
on audio.GanjoorPostId equals poem.Id
|
||||||
|
where
|
||||||
|
audio.ReviewStatus == AudioReviewStatus.Approved
|
||||||
|
&&
|
||||||
|
(
|
||||||
|
string.IsNullOrEmpty(searchTerm) ||
|
||||||
|
(
|
||||||
|
!string.IsNullOrEmpty(searchTerm)
|
||||||
|
&&
|
||||||
|
(
|
||||||
|
audio.AudioArtist.Contains(searchTerm)
|
||||||
|
||
|
||||||
|
audio.AudioTitle.Contains(searchTerm)
|
||||||
|
||
|
||||||
|
poem.FullTitle.Contains(searchTerm)
|
||||||
|
))
|
||||||
|
)
|
||||||
|
orderby audio.ReviewDate descending
|
||||||
|
select new PublicRecitationViewModel()
|
||||||
|
{
|
||||||
|
Id = audio.Id,
|
||||||
|
PoemId = audio.GanjoorPostId,
|
||||||
|
PoemFullTitle = poem.FullTitle,
|
||||||
|
PoemFullUrl = poem.FullUrl,
|
||||||
|
AudioTitle = audio.AudioTitle,
|
||||||
|
AudioArtist = audio.AudioArtist,
|
||||||
|
AudioArtistUrl = audio.AudioArtistUrl,
|
||||||
|
AudioSrc = audio.AudioSrc,
|
||||||
|
AudioSrcUrl = audio.AudioSrcUrl,
|
||||||
|
LegacyAudioGuid = audio.LegacyAudioGuid,
|
||||||
|
Mp3FileCheckSum = audio.Mp3FileCheckSum,
|
||||||
|
Mp3SizeInBytes = audio.Mp3SizeInBytes,
|
||||||
|
PublishDate = audio.ReviewDate,
|
||||||
|
FileLastUpdated = audio.FileLastUpdated,
|
||||||
|
Mp3Url = $"https://ganjgah.ir/api/audio/file/{audio.Id}.mp3",
|
||||||
|
XmlText = $"https://ganjgah.ir/api/audio/xml/{audio.Id}",
|
||||||
|
};
|
||||||
|
|
||||||
|
(PaginationMetadata PagingMeta, PublicRecitationViewModel[] Items) paginatedResult =
|
||||||
|
await QueryablePaginator<PublicRecitationViewModel>.Paginate(source, paging);
|
||||||
|
|
||||||
|
return new RServiceResult<(PaginationMetadata PagingMeta, PublicRecitationViewModel[] Items)>(paginatedResult);
|
||||||
|
}
|
||||||
|
catch (Exception exp)
|
||||||
|
{
|
||||||
|
return new RServiceResult<(PaginationMetadata PagingMeta, PublicRecitationViewModel[] Items)>((PagingMeta: null, Items: null), exp.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// return selected narration information
|
/// return selected narration information
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user