#266 updating an API method to allow recitation owners have access to the list of their approved mistakes
This commit is contained in:
parent
5c86c608b2
commit
671f5cbf6f
@ -105,6 +105,7 @@ namespace RMuseum.Controllers
|
||||
/// <param name="allUsers">default: false, user must have recitation::moderate permission to be able to see all users narrations</param>
|
||||
/// <param name="status">default: -1, unfiltered</param>
|
||||
/// <param name="searchTerm"></param>
|
||||
/// <param name="mistakes"></param>
|
||||
/// <remarks>additional headers: paging-headers, audio-upload-enabled</remarks>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
@ -112,7 +113,7 @@ namespace RMuseum.Controllers
|
||||
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable<RecitationViewModel>))]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
[ProducesResponseType((int)HttpStatusCode.Forbidden, Type = typeof(string))]
|
||||
public async Task<IActionResult> Get([FromQuery] PagingParameterModel paging, bool allUsers = false, AudioReviewStatus status = AudioReviewStatus.All, string searchTerm = "")
|
||||
public async Task<IActionResult> Get([FromQuery] PagingParameterModel paging, bool allUsers = false, AudioReviewStatus status = AudioReviewStatus.All, string searchTerm = "", bool mistakes = false)
|
||||
{
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
Guid sessionId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "SessionId").Value);
|
||||
@ -135,7 +136,7 @@ namespace RMuseum.Controllers
|
||||
return StatusCode((int)HttpStatusCode.Forbidden);
|
||||
}
|
||||
|
||||
var res = await _audioService.SecureGetAll(paging, allUsers ? Guid.Empty : loggedOnUserId, status, searchTerm);
|
||||
var res = await _audioService.SecureGetAll(paging, allUsers ? Guid.Empty : loggedOnUserId, status, searchTerm, mistakes);
|
||||
if(!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
|
||||
|
||||
@ -23,7 +23,8 @@ namespace RMuseum.Models.GanjoorAudio.ViewModels
|
||||
/// <param name="src"></param>
|
||||
/// <param name="appUser"></param>
|
||||
/// <param name="poem"></param>
|
||||
public RecitationViewModel(Recitation src, RAppUser appUser, GanjoorPoem poem)
|
||||
/// <param name="mistake"></param>
|
||||
public RecitationViewModel(Recitation src, RAppUser appUser, GanjoorPoem poem, string mistake)
|
||||
{
|
||||
Id = src.Id;
|
||||
Owner = new PublicRAppUser()
|
||||
@ -67,7 +68,10 @@ namespace RMuseum.Models.GanjoorAudio.ViewModels
|
||||
PoemFullUrl = poem.FullUrl;
|
||||
}
|
||||
AudioSyncStatus = src.AudioSyncStatus;
|
||||
ReviewMsg = src.ReviewMsg;
|
||||
if (string.IsNullOrEmpty(mistake))
|
||||
ReviewMsg = src.ReviewMsg;
|
||||
else
|
||||
ReviewMsg = src.ReviewMsg;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -1640,7 +1640,7 @@
|
||||
</summary>
|
||||
<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,System.Boolean)">
|
||||
<summary>
|
||||
Gets audio narrations, user must have recitation::moderate permission to be able to see all users narrations
|
||||
</summary>
|
||||
@ -1648,6 +1648,7 @@
|
||||
<param name="allUsers">default: false, user must have recitation::moderate permission to be able to see all users narrations</param>
|
||||
<param name="status">default: -1, unfiltered</param>
|
||||
<param name="searchTerm"></param>
|
||||
<param name="mistakes"></param>
|
||||
<remarks>additional headers: paging-headers, audio-upload-enabled</remarks>
|
||||
<returns></returns>
|
||||
</member>
|
||||
@ -4284,13 +4285,14 @@
|
||||
parameterless constructor for deserialization support
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Models.GanjoorAudio.ViewModels.RecitationViewModel.#ctor(RMuseum.Models.GanjoorAudio.Recitation,RSecurityBackend.Models.Auth.Db.RAppUser,RMuseum.Models.Ganjoor.GanjoorPoem)">
|
||||
<member name="M:RMuseum.Models.GanjoorAudio.ViewModels.RecitationViewModel.#ctor(RMuseum.Models.GanjoorAudio.Recitation,RSecurityBackend.Models.Auth.Db.RAppUser,RMuseum.Models.Ganjoor.GanjoorPoem,System.String)">
|
||||
<summary>
|
||||
constructor
|
||||
</summary>
|
||||
<param name="src"></param>
|
||||
<param name="appUser"></param>
|
||||
<param name="poem"></param>
|
||||
<param name="mistake"></param>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.RecitationViewModel.Id">
|
||||
<summary>
|
||||
@ -12469,7 +12471,7 @@
|
||||
Audio Narration Service Implementation
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementationa.RecitationService.SecureGetAll(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,System.Boolean)">
|
||||
<summary>
|
||||
returns list of narrations
|
||||
</summary>
|
||||
@ -12477,6 +12479,7 @@
|
||||
<param name="filteredUserId">send Guid.Empty if you want all narrations</param>
|
||||
<param name="status"></param>
|
||||
<param name="searchTerm"></param>
|
||||
<param name="mistakes"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementationa.RecitationService.GetPublishedRecitations(RSecurityBackend.Models.Generic.PagingParameterModel,System.String,System.Int32,System.Int32)">
|
||||
@ -12902,7 +12905,7 @@
|
||||
Audio Narration Service
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IRecitationService.SecureGetAll(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,System.Boolean)">
|
||||
<summary>
|
||||
returns list of narrations
|
||||
</summary>
|
||||
@ -12910,6 +12913,7 @@
|
||||
<param name="filteredUserId">send Guid.Empty if you want all narrations</param>
|
||||
<param name="status"></param>
|
||||
<param name="searchTerm"></param>
|
||||
<param name="mistakes"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IRecitationService.GetPublishedRecitations(RSecurityBackend.Models.Generic.PagingParameterModel,System.String,System.Int32,System.Int32)">
|
||||
|
||||
@ -21,8 +21,9 @@ namespace RMuseum.Services
|
||||
/// <param name="filteredUserId">send Guid.Empty if you want all narrations</param>
|
||||
/// <param name="status"></param>
|
||||
/// <param name="searchTerm"></param>
|
||||
/// <param name="mistakes"></param>
|
||||
/// <returns></returns>
|
||||
public Task<RServiceResult<(PaginationMetadata PagingMeta, RecitationViewModel[] Items)>> SecureGetAll(PagingParameterModel paging, Guid filteredUserId, AudioReviewStatus status, string searchTerm);
|
||||
public Task<RServiceResult<(PaginationMetadata PagingMeta, RecitationViewModel[] Items)>> SecureGetAll(PagingParameterModel paging, Guid filteredUserId, AudioReviewStatus status, string searchTerm, bool mistakes);
|
||||
|
||||
/// <summary>
|
||||
/// returns list of publish narrations (if poetId or catId is non-zero its ordered by poemId ascending if not it is ordered by publish date descending)
|
||||
|
||||
@ -41,29 +41,59 @@ namespace RMuseum.Services.Implementationa
|
||||
/// <param name="filteredUserId">send Guid.Empty if you want all narrations</param>
|
||||
/// <param name="status"></param>
|
||||
/// <param name="searchTerm"></param>
|
||||
/// <param name="mistakes"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<(PaginationMetadata PagingMeta, RecitationViewModel[] Items)>> SecureGetAll(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, bool mistakes)
|
||||
{
|
||||
//whenever I had not a reference to audio.Owner in the final selection it became null, so this strange arrangement is not all because of my stupidity!
|
||||
var source =
|
||||
from audio in _context.Recitations.AsNoTracking().Include(a => a.Owner)
|
||||
join poem in _context.GanjoorPoems
|
||||
on audio.GanjoorPostId equals poem.Id
|
||||
where
|
||||
(filteredUserId == Guid.Empty || audio.OwnerId == filteredUserId)
|
||||
&&
|
||||
(status == AudioReviewStatus.All || audio.ReviewStatus == status)
|
||||
&&
|
||||
(string.IsNullOrEmpty(searchTerm) ||
|
||||
(!string.IsNullOrEmpty(searchTerm) && (audio.AudioArtist.Contains(searchTerm) || audio.AudioTitle.Contains(searchTerm) || poem.FullTitle.Contains(searchTerm)))
|
||||
)
|
||||
orderby audio.UploadDate descending
|
||||
select new RecitationViewModel(audio, audio.Owner, poem);
|
||||
if(!mistakes)
|
||||
{
|
||||
//whenever I had not a reference to audio.Owner in the final selection it became null, so this strange arrangement is not all because of my stupidity!
|
||||
var source =
|
||||
from audio in _context.Recitations.AsNoTracking().Include(a => a.Owner)
|
||||
join poem in _context.GanjoorPoems
|
||||
on audio.GanjoorPostId equals poem.Id
|
||||
where
|
||||
(filteredUserId == Guid.Empty || audio.OwnerId == filteredUserId)
|
||||
&&
|
||||
(status == AudioReviewStatus.All || audio.ReviewStatus == status)
|
||||
&&
|
||||
(string.IsNullOrEmpty(searchTerm) ||
|
||||
(!string.IsNullOrEmpty(searchTerm) && (audio.AudioArtist.Contains(searchTerm) || audio.AudioTitle.Contains(searchTerm) || poem.FullTitle.Contains(searchTerm)))
|
||||
)
|
||||
orderby audio.UploadDate descending
|
||||
select new RecitationViewModel(audio, audio.Owner, poem, "");
|
||||
|
||||
(PaginationMetadata PagingMeta, RecitationViewModel[] Items) paginatedResult =
|
||||
await QueryablePaginator<RecitationViewModel>.Paginate(source, paging);
|
||||
(PaginationMetadata PagingMeta, RecitationViewModel[] Items) paginatedResult =
|
||||
await QueryablePaginator<RecitationViewModel>.Paginate(source, paging);
|
||||
|
||||
return new RServiceResult<(PaginationMetadata PagingMeta, RecitationViewModel[] Items)>(paginatedResult);
|
||||
return new RServiceResult<(PaginationMetadata PagingMeta, RecitationViewModel[] Items)>(paginatedResult);
|
||||
}
|
||||
else
|
||||
{
|
||||
//whenever I had not a reference to audio.Owner in the final selection it became null, so this strange arrangement is not all because of my stupidity!
|
||||
var source =
|
||||
from mistake in _context.RecitationApprovedMistakes.AsNoTracking()
|
||||
join audio in _context.Recitations.Include(a => a.Owner)
|
||||
on mistake.RecitationId equals audio.Id
|
||||
join poem in _context.GanjoorPoems
|
||||
on audio.GanjoorPostId equals poem.Id
|
||||
where
|
||||
(filteredUserId == Guid.Empty || audio.OwnerId == filteredUserId)
|
||||
&&
|
||||
(status == AudioReviewStatus.All || audio.ReviewStatus == status)
|
||||
&&
|
||||
(string.IsNullOrEmpty(searchTerm) ||
|
||||
(!string.IsNullOrEmpty(searchTerm) && (audio.AudioArtist.Contains(searchTerm) || audio.AudioTitle.Contains(searchTerm) || poem.FullTitle.Contains(searchTerm)))
|
||||
)
|
||||
orderby audio.UploadDate descending
|
||||
select new RecitationViewModel(audio, audio.Owner, poem, mistake.Mistake);
|
||||
|
||||
(PaginationMetadata PagingMeta, RecitationViewModel[] Items) paginatedResult =
|
||||
await QueryablePaginator<RecitationViewModel>.Paginate(source, paging);
|
||||
|
||||
return new RServiceResult<(PaginationMetadata PagingMeta, RecitationViewModel[] Items)>(paginatedResult);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -294,7 +324,7 @@ namespace RMuseum.Services.Implementationa
|
||||
.Where(a => a.Id == id)
|
||||
join poem in _context.GanjoorPoems
|
||||
on audio.GanjoorPostId equals poem.Id
|
||||
select new RecitationViewModel(audio, audio.Owner, poem);
|
||||
select new RecitationViewModel(audio, audio.Owner, poem, "");
|
||||
|
||||
narration = await source.SingleOrDefaultAsync();
|
||||
_memoryCache.Set(cachKey, narration);
|
||||
@ -521,7 +551,7 @@ namespace RMuseum.Services.Implementationa
|
||||
await _ganjoorService.CacheCleanForPageById(narration.GanjoorPostId);
|
||||
|
||||
}
|
||||
return new RServiceResult<RecitationViewModel>(new RecitationViewModel(narration, narration.Owner, await _context.GanjoorPoems.Where(p => p.Id == narration.GanjoorPostId).SingleOrDefaultAsync()));
|
||||
return new RServiceResult<RecitationViewModel>(new RecitationViewModel(narration, narration.Owner, await _context.GanjoorPoems.Where(p => p.Id == narration.GanjoorPostId).SingleOrDefaultAsync(), ""));
|
||||
}
|
||||
|
||||
|
||||
@ -1112,7 +1142,7 @@ namespace RMuseum.Services.Implementationa
|
||||
await _ganjoorService.CacheCleanForPageById(narration.GanjoorPostId);
|
||||
}
|
||||
|
||||
return new RServiceResult<RecitationViewModel>(new RecitationViewModel(narration, narration.Owner, await _context.GanjoorPoems.Where(p => p.Id == narration.GanjoorPostId).SingleOrDefaultAsync()));
|
||||
return new RServiceResult<RecitationViewModel>(new RecitationViewModel(narration, narration.Owner, await _context.GanjoorPoems.Where(p => p.Id == narration.GanjoorPostId).SingleOrDefaultAsync(), ""));
|
||||
}
|
||||
|
||||
|
||||
@ -1728,7 +1758,7 @@ namespace RMuseum.Services.Implementationa
|
||||
&&
|
||||
audio.AudioSyncStatus != AudioSyncStatus.SynchronizedOrRejected
|
||||
orderby audio.UploadDate descending
|
||||
select new RecitationViewModel(audio, audio.Owner, poem);
|
||||
select new RecitationViewModel(audio, audio.Owner, poem, "");
|
||||
|
||||
return new RServiceResult<RecitationViewModel[]>(await source.ToArrayAsync());
|
||||
}
|
||||
@ -1791,7 +1821,7 @@ namespace RMuseum.Services.Implementationa
|
||||
Id = report.Id,
|
||||
ReasonText = report.ReasonText,
|
||||
RecitationId = report.RecitationId,
|
||||
Recitation = new RecitationViewModel(report.Recitation, report.Recitation.Owner, poem),
|
||||
Recitation = new RecitationViewModel(report.Recitation, report.Recitation.Owner, poem, ""),
|
||||
DateTime = report.DateTime,
|
||||
NumberOfLinesAffected = report.NumberOfLinesAffected,
|
||||
CoupletIndex = report.CoupletIndex
|
||||
|
||||
Loading…
Reference in New Issue
Block a user