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")]
|
||||
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>
|
||||
/// 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);
|
||||
}
|
||||
|
||||
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))
|
||||
return BadRequest(res.ExceptionString);
|
||||
|
||||
@ -152,7 +174,7 @@ namespace RMuseum.Controllers
|
||||
/// <returns></returns>
|
||||
[HttpGet("verses/{id}")]
|
||||
[AllowAnonymous]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(string))]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(RecitationVerseSync[]))]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
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>
|
||||
<param name="notificationService"></param>
|
||||
</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)">
|
||||
<summary>
|
||||
Gets audio narrations, user must have recitation::moderate permission to be able to see all users narrations
|
||||
@ -2150,6 +2158,87 @@
|
||||
is default
|
||||
</summary>
|
||||
</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">
|
||||
<summary>
|
||||
Moderation Result
|
||||
@ -5219,7 +5308,7 @@
|
||||
Audio Narration Service Implementation
|
||||
</summary>
|
||||
</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>
|
||||
returns list of narrations
|
||||
</summary>
|
||||
@ -5229,6 +5318,14 @@
|
||||
<param name="searchTerm"></param>
|
||||
<returns></returns>
|
||||
</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)">
|
||||
<summary>
|
||||
return selected narration information
|
||||
@ -5521,7 +5618,7 @@
|
||||
Audio Narration Service
|
||||
</summary>
|
||||
</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>
|
||||
returns list of narrations
|
||||
</summary>
|
||||
@ -5531,6 +5628,14 @@
|
||||
<param name="searchTerm"></param>
|
||||
<returns></returns>
|
||||
</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)">
|
||||
<summary>
|
||||
return selected narration information
|
||||
|
||||
@ -22,7 +22,15 @@ namespace RMuseum.Services
|
||||
/// <param name="status"></param>
|
||||
/// <param name="searchTerm"></param>
|
||||
/// <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>
|
||||
/// return selected narration information
|
||||
|
||||
@ -39,7 +39,7 @@ namespace RMuseum.Services.Implementationa
|
||||
/// <param name="status"></param>
|
||||
/// <param name="searchTerm"></param>
|
||||
/// <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
|
||||
{
|
||||
@ -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>
|
||||
/// return selected narration information
|
||||
/// </summary>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user