#264 GET api method for a user upvoted recitations

This commit is contained in:
Hamid Reza Mohammadi 2021-12-20 19:31:00 +03:30
parent 5da2219664
commit c5bb6a1612
4 changed files with 121 additions and 0 deletions

View File

@ -948,6 +948,30 @@ namespace RMuseum.Controllers
return Ok(res.Result);
}
/// <summary>
/// get user upvoted recitations
/// </summary>
/// <param name="paging"></param>
/// <returns></returns>
[HttpGet("votes")]
[Authorize]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable<PublicRecitationViewModel>))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task<IActionResult> GetUserUpvotedRecitationsAsync([FromQuery] PagingParameterModel paging)
{
if (paging.PageSize == -1 || paging.PageSize > 1000)
paging.PageSize = 1000;
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
var res = await _audioService.GetUserUpvotedRecitationsAsync(paging, loggedOnUserId);
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>
/// readonly mode
/// </summary>

View File

@ -1852,6 +1852,20 @@
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.RecitationController.SwitchRecitationUpVoteAsync(System.Int32)">
<summary>
revoke recitaion up vote
</summary>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.RecitationController.GetUserUpvotedRecitationsAsync(RSecurityBackend.Models.Generic.PagingParameterModel)">
<summary>
get user upvoted recitations
</summary>
<param name="paging"></param>
<returns></returns>
</member>
<member name="P:RMuseum.Controllers.RecitationController.ReadOnlyMode">
<summary>
readonly mode
@ -12584,6 +12598,22 @@
<param name="userId"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementationa.RecitationService.SwitchRecitationUpVoteAsync(System.Int32,System.Guid)">
<summary>
switches recitation upvote
</summary>
<param name="id"></param>
<param name="userId"></param>
<returns>upvote status</returns>
</member>
<member name="M:RMuseum.Services.Implementationa.RecitationService.GetUserUpvotedRecitationsAsync(RSecurityBackend.Models.Generic.PagingParameterModel,System.Guid)">
<summary>
get user upvoted recitations
</summary>
<param name="paging"></param>
<param name="userId"></param>
<returns></returns>
</member>
<member name="P:RMuseum.Services.Implementationa.RecitationService.UploadEnabled">
<summary>
Upload Enabled (temporary switch off/on for upload)
@ -12980,6 +13010,22 @@
<param name="userId"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IRecitationService.SwitchRecitationUpVoteAsync(System.Int32,System.Guid)">
<summary>
switches recitation upvote
</summary>
<param name="id"></param>
<param name="userId"></param>
<returns>upvote status</returns>
</member>
<member name="M:RMuseum.Services.IRecitationService.GetUserUpvotedRecitationsAsync(RSecurityBackend.Models.Generic.PagingParameterModel,System.Guid)">
<summary>
get user upvoted recitations
</summary>
<param name="paging"></param>
<param name="userId"></param>
<returns></returns>
</member>
<member name="P:RMuseum.Services.IRecitationService.UploadEnabled">
<summary>
Upload Enabled (temporary switch off/on for upload)

View File

@ -262,6 +262,14 @@ namespace RMuseum.Services
/// <returns>upvote status</returns>
Task<RServiceResult<bool>> SwitchRecitationUpVoteAsync(int id, Guid userId);
/// <summary>
/// get user upvoted recitations
/// </summary>
/// <param name="paging"></param>
/// <param name="userId"></param>
/// <returns></returns>
Task<RServiceResult<(PaginationMetadata PagingMeta, PublicRecitationViewModel[] Items)>> GetUserUpvotedRecitationsAsync(PagingParameterModel paging, Guid userId);
/// <summary>
/// Upload Enabled (temporary switch off/on for upload)
/// </summary>

View File

@ -2021,6 +2021,49 @@ namespace RMuseum.Services.Implementationa
}
}
/// <summary>
/// get user upvoted recitations
/// </summary>
/// <param name="paging"></param>
/// <param name="userId"></param>
/// <returns></returns>
public async Task<RServiceResult<(PaginationMetadata PagingMeta, PublicRecitationViewModel[] Items)>> GetUserUpvotedRecitationsAsync(PagingParameterModel paging, Guid userId)
{
var source =
from upvote in _context.RecitationUserUpVotes.AsNoTracking().Include(u => u.Recitation)
join poem in _context.GanjoorPoems
on upvote.Recitation.GanjoorPostId equals poem.Id
where
upvote.UserId == userId
orderby upvote.DateTime descending
select new PublicRecitationViewModel()
{
Id = upvote.Recitation.Id,
PoemId = poem.Id,
PoemFullTitle = poem.FullTitle,
PoemFullUrl = poem.FullUrl,
AudioTitle = upvote.Recitation.AudioTitle,
AudioArtist = upvote.Recitation.AudioArtist,
AudioArtistUrl = upvote.Recitation.AudioArtistUrl,
AudioSrc = upvote.Recitation.AudioSrc,
AudioSrcUrl = upvote.Recitation.AudioSrcUrl,
LegacyAudioGuid = upvote.Recitation.LegacyAudioGuid,
Mp3FileCheckSum = upvote.Recitation.Mp3FileCheckSum,
Mp3SizeInBytes = upvote.Recitation.Mp3SizeInBytes,
PublishDate = upvote.Recitation.ReviewDate,
FileLastUpdated = upvote.Recitation.FileLastUpdated,
Mp3Url = $"{WebServiceUrl.Url}/api/audio/file/{upvote.Recitation.Id}.mp3",
XmlText = $"{WebServiceUrl.Url}/api/audio/xml/{upvote.Recitation.Id}",
PlainText = poem.PlainText,
HtmlText = poem.HtmlText
};
(PaginationMetadata PagingMeta, PublicRecitationViewModel[] Items) paginatedResult =
await QueryablePaginator<PublicRecitationViewModel>.Paginate(source, paging);
return new RServiceResult<(PaginationMetadata PagingMeta, PublicRecitationViewModel[] Items)>(paginatedResult);
}
/// <summary>
/// Upload Enabled (temporary switch off/on for upload)
/// </summary>