more usable tracking data for remote synchronization process
This commit is contained in:
parent
f09801fd0a
commit
83bb61f9c4
@ -530,20 +530,32 @@ namespace RMuseum.Controllers
|
||||
/// <summary>
|
||||
/// publishing tracker data
|
||||
/// </summary>
|
||||
/// <remarks>TODO: Poem Narration Data is not purified yet (includes sensitive information), so it needs a very special permission</remarks>
|
||||
/// <param name="paging"></param>
|
||||
/// <param name="inProgress"></param>
|
||||
/// <param name="finished"></param>
|
||||
/// <param name="unfinished"></param>
|
||||
/// <returns></returns>
|
||||
|
||||
[HttpGet("publishqueue")]
|
||||
[Authorize(Policy = RMuseumSecurableItem.AudioRecitationEntityShortName + ":" + RMuseumSecurableItem.ImportOperationShortName)]
|
||||
[Authorize]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable<RecitationPublishingTracker>))]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
[ProducesResponseType((int)HttpStatusCode.Forbidden, Type = typeof(string))]
|
||||
public async Task<IActionResult> GetPublishingQueueStatus([FromQuery] PagingParameterModel paging, bool inProgress = true, bool finished = true)
|
||||
public async Task<IActionResult> GetPublishingQueueStatus([FromQuery] PagingParameterModel paging, bool unfinished)
|
||||
{
|
||||
var res = await _audioService.GetPublishingQueueStatus(paging, inProgress, finished);
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
Guid sessionId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "SessionId").Value);
|
||||
RServiceResult<bool>
|
||||
canViewAll =
|
||||
await _userPermissionChecker.Check
|
||||
(
|
||||
loggedOnUserId,
|
||||
sessionId,
|
||||
RMuseumSecurableItem.AudioRecitationEntityShortName,
|
||||
RMuseumSecurableItem.ModerateOperationShortName
|
||||
);
|
||||
if (!string.IsNullOrEmpty(canViewAll.ExceptionString))
|
||||
return BadRequest(canViewAll.ExceptionString);
|
||||
|
||||
var res = await _audioService.GetPublishingQueueStatus(paging, unfinished, canViewAll.Result ? Guid.Empty : loggedOnUserId);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
// Paging Header
|
||||
|
||||
@ -0,0 +1,112 @@
|
||||
using RMuseum.Models.Ganjoor;
|
||||
using RSecurityBackend.Models.Auth.Db;
|
||||
using System;
|
||||
|
||||
namespace RMuseum.Models.GanjoorAudio.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// RecitationPublishingTracker View Model
|
||||
/// </summary>
|
||||
public class RecitationPublishingTrackerViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Constructor
|
||||
/// </summary>
|
||||
/// <param name="tracker"></param>
|
||||
/// <param name="poem"></param>
|
||||
/// <param name="user"></param>
|
||||
public RecitationPublishingTrackerViewModel(RecitationPublishingTracker tracker, GanjoorPoem poem, RAppUser user, Recitation recitation)
|
||||
{
|
||||
UserEmail = user.Email;
|
||||
PoemFullTitle = poem.FullTitle;
|
||||
ArtistName = recitation.AudioArtist;
|
||||
Operation = recitation.AudioSyncStatus == AudioSyncStatus.NewItem ? "جدید" :
|
||||
recitation.AudioSyncStatus == AudioSyncStatus.SoundOrXMLFilesChanged ? "جایگزینی فایل" :
|
||||
recitation.AudioSyncStatus == AudioSyncStatus.MetadataChanged ? "تغییر اطلاعات" :
|
||||
recitation.AudioSyncStatus == AudioSyncStatus.Deleted ? "حذف" :
|
||||
"نامشخص (انجام شده)";
|
||||
InProgress = !tracker.Finished && string.IsNullOrEmpty(tracker.LastException);
|
||||
XmlFileCopied = tracker.XmlFileCopied;
|
||||
Mp3FileCopied = tracker.Mp3FileCopied;
|
||||
FirstDbUpdated = tracker.FirstDbUpdated;
|
||||
SecondDbUpdated = tracker.SecondDbUpdated;
|
||||
Succeeded = tracker.Finished;
|
||||
Error = !string.IsNullOrEmpty(tracker.LastException);
|
||||
LastException = tracker.LastException;
|
||||
StartDate = tracker.StartDate;
|
||||
FinishDate = tracker.FinishDate;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// user email
|
||||
/// </summary>
|
||||
public string UserEmail { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Poem Full Title
|
||||
/// </summary>
|
||||
public string PoemFullTitle { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Artist Name
|
||||
/// </summary>
|
||||
public string ArtistName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Operation
|
||||
/// </summary>
|
||||
public string Operation { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// In Progress
|
||||
/// </summary>
|
||||
public bool InProgress { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// XML File Copied
|
||||
/// </summary>
|
||||
public bool XmlFileCopied { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// MP3 File Copied
|
||||
/// </summary>
|
||||
public bool Mp3FileCopied { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// First MySql DB Updated
|
||||
/// </summary>
|
||||
public bool FirstDbUpdated { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Second DB Updated
|
||||
/// </summary>
|
||||
public bool SecondDbUpdated { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Succeeded
|
||||
/// </summary>
|
||||
public bool Succeeded { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Error
|
||||
/// </summary>
|
||||
public bool Error { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Exception
|
||||
/// </summary>
|
||||
public string LastException { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Start Date
|
||||
/// </summary>
|
||||
public DateTime StartDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Finish Date
|
||||
/// </summary>
|
||||
public DateTime FinishDate { get; set; }
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@ -825,14 +825,12 @@
|
||||
<param name="id"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.RecitationController.GetPublishingQueueStatus(RSecurityBackend.Models.Generic.PagingParameterModel,System.Boolean,System.Boolean)">
|
||||
<member name="M:RMuseum.Controllers.RecitationController.GetPublishingQueueStatus(RSecurityBackend.Models.Generic.PagingParameterModel,System.Boolean)">
|
||||
<summary>
|
||||
publishing tracker data
|
||||
</summary>
|
||||
<remarks>TODO: Poem Narration Data is not purified yet (includes sensitive information), so it needs a very special permission</remarks>
|
||||
<param name="paging"></param>
|
||||
<param name="inProgress"></param>
|
||||
<param name="finished"></param>
|
||||
<param name="unfinished"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.RecitationController.TransferRecitationsOwnership(System.String,System.String)">
|
||||
@ -2162,6 +2160,89 @@
|
||||
Rejection Message
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.GanjoorAudio.ViewModels.RecitationPublishingTrackerViewModel">
|
||||
<summary>
|
||||
RecitationPublishingTracker View Model
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Models.GanjoorAudio.ViewModels.RecitationPublishingTrackerViewModel.#ctor(RMuseum.Models.GanjoorAudio.RecitationPublishingTracker,RMuseum.Models.Ganjoor.GanjoorPoem,RSecurityBackend.Models.Auth.Db.RAppUser,RMuseum.Models.GanjoorAudio.Recitation)">
|
||||
<summary>
|
||||
Constructor
|
||||
</summary>
|
||||
<param name="tracker"></param>
|
||||
<param name="poem"></param>
|
||||
<param name="user"></param>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.RecitationPublishingTrackerViewModel.UserEmail">
|
||||
<summary>
|
||||
user email
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.RecitationPublishingTrackerViewModel.PoemFullTitle">
|
||||
<summary>
|
||||
Poem Full Title
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.RecitationPublishingTrackerViewModel.ArtistName">
|
||||
<summary>
|
||||
Artist Name
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.RecitationPublishingTrackerViewModel.Operation">
|
||||
<summary>
|
||||
Operation
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.RecitationPublishingTrackerViewModel.InProgress">
|
||||
<summary>
|
||||
In Progress
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.RecitationPublishingTrackerViewModel.XmlFileCopied">
|
||||
<summary>
|
||||
XML File Copied
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.RecitationPublishingTrackerViewModel.Mp3FileCopied">
|
||||
<summary>
|
||||
MP3 File Copied
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.RecitationPublishingTrackerViewModel.FirstDbUpdated">
|
||||
<summary>
|
||||
First MySql DB Updated
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.RecitationPublishingTrackerViewModel.SecondDbUpdated">
|
||||
<summary>
|
||||
Second DB Updated
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.RecitationPublishingTrackerViewModel.Succeeded">
|
||||
<summary>
|
||||
Succeeded
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.RecitationPublishingTrackerViewModel.Error">
|
||||
<summary>
|
||||
Error
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.RecitationPublishingTrackerViewModel.LastException">
|
||||
<summary>
|
||||
Exception
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.RecitationPublishingTrackerViewModel.StartDate">
|
||||
<summary>
|
||||
Start Date
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.RecitationPublishingTrackerViewModel.FinishDate">
|
||||
<summary>
|
||||
Finish Date
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.GanjoorAudio.ViewModels.RecitationVerseSync">
|
||||
<summary>
|
||||
Verse Sync Range
|
||||
@ -5223,13 +5304,13 @@
|
||||
<param name="userId">if userId is empty all user uploads would be returned</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementationa.RecitationService.GetPublishingQueueStatus(RSecurityBackend.Models.Generic.PagingParameterModel,System.Boolean,System.Boolean)">
|
||||
<member name="M:RMuseum.Services.Implementationa.RecitationService.GetPublishingQueueStatus(RSecurityBackend.Models.Generic.PagingParameterModel,System.Boolean,System.Guid)">
|
||||
<summary>
|
||||
publishing tracker data
|
||||
</summary>
|
||||
<param name="paging"></param>
|
||||
<param name="inProgress"></param>
|
||||
<param name="finished"></param>
|
||||
<param name="unfinished"></param>
|
||||
<param name="filteredUserId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementationa.RecitationService.TransferRecitationsOwnership(System.Guid,System.Guid,System.String)">
|
||||
@ -5521,13 +5602,13 @@
|
||||
retry publish unpublished narrations
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IRecitationService.GetPublishingQueueStatus(RSecurityBackend.Models.Generic.PagingParameterModel,System.Boolean,System.Boolean)">
|
||||
<member name="M:RMuseum.Services.IRecitationService.GetPublishingQueueStatus(RSecurityBackend.Models.Generic.PagingParameterModel,System.Boolean,System.Guid)">
|
||||
<summary>
|
||||
publishing tracker data
|
||||
</summary>
|
||||
<param name="paging"></param>
|
||||
<param name="inProgress"></param>
|
||||
<param name="finished"></param>
|
||||
<param name="unfinished"></param>
|
||||
<param name="filteredUserId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IRecitationService.MakeArtistRecitationsFirst(System.String)">
|
||||
|
||||
@ -170,10 +170,10 @@ namespace RMuseum.Services
|
||||
/// publishing tracker data
|
||||
/// </summary>
|
||||
/// <param name="paging"></param>
|
||||
/// <param name="inProgress"></param>
|
||||
/// <param name="finished"></param>
|
||||
/// <param name="unfinished"></param>
|
||||
/// <param name="filteredUserId"></param>
|
||||
/// <returns></returns>
|
||||
Task<RServiceResult<(PaginationMetadata PagingMeta, RecitationPublishingTracker[] Items)>> GetPublishingQueueStatus(PagingParameterModel paging, bool inProgress, bool finished);
|
||||
Task<RServiceResult<(PaginationMetadata PagingMeta, RecitationPublishingTrackerViewModel[] Items)>> GetPublishingQueueStatus(PagingParameterModel paging, bool unfinished, Guid filteredUserId);
|
||||
|
||||
/// <summary>
|
||||
/// move recitaions of an artist to the first position
|
||||
|
||||
@ -1253,7 +1253,7 @@ namespace RMuseum.Services.Implementationa
|
||||
if (_backgroundTaskQueue.Count > 0)
|
||||
return;
|
||||
|
||||
var unpublishedQueue = await _context.RecitationPublishingTrackers.Where(r => r.Finished == false).ToArrayAsync();
|
||||
var unpublishedQueue = await _context.RecitationPublishingTrackers.ToArrayAsync();
|
||||
if (unpublishedQueue.Length > 0)
|
||||
{
|
||||
_context.RecitationPublishingTrackers.RemoveRange(unpublishedQueue);
|
||||
@ -1622,32 +1622,35 @@ namespace RMuseum.Services.Implementationa
|
||||
/// publishing tracker data
|
||||
/// </summary>
|
||||
/// <param name="paging"></param>
|
||||
/// <param name="inProgress"></param>
|
||||
/// <param name="finished"></param>
|
||||
/// <param name="unfinished"></param>
|
||||
/// <param name="filteredUserId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<(PaginationMetadata PagingMeta, RecitationPublishingTracker[] Items)>> GetPublishingQueueStatus(PagingParameterModel paging, bool inProgress, bool finished)
|
||||
public async Task<RServiceResult<(PaginationMetadata PagingMeta, RecitationPublishingTrackerViewModel[] Items)>> GetPublishingQueueStatus(PagingParameterModel paging, bool unfinished, Guid filteredUserId)
|
||||
{
|
||||
try
|
||||
{
|
||||
var source =
|
||||
from tracker in _context.RecitationPublishingTrackers
|
||||
.Include(t => t.PoemNarration)
|
||||
.Where(a =>
|
||||
(inProgress && !a.Finished)
|
||||
||
|
||||
(finished && a.Finished)
|
||||
)
|
||||
.OrderByDescending(a => a.StartDate)
|
||||
select tracker;
|
||||
from tracker in _context.RecitationPublishingTrackers
|
||||
join recitation in _context.Recitations.Include(a => a.Owner)
|
||||
on tracker.PoemNarrationId equals recitation.Id
|
||||
join poem in _context.GanjoorPoems
|
||||
on recitation.GanjoorPostId equals poem.Id
|
||||
where
|
||||
(filteredUserId == Guid.Empty || recitation.OwnerId == filteredUserId)
|
||||
&&
|
||||
(!unfinished || (unfinished && !tracker.Finished))
|
||||
orderby tracker.StartDate descending
|
||||
select new RecitationPublishingTrackerViewModel(tracker, poem, recitation.Owner, recitation);
|
||||
|
||||
(PaginationMetadata PagingMeta, RecitationPublishingTracker[] Items) paginatedResult =
|
||||
await QueryablePaginator<RecitationPublishingTracker>.Paginate(source, paging);
|
||||
|
||||
return new RServiceResult<(PaginationMetadata PagingMeta, RecitationPublishingTracker[] Items)>(paginatedResult);
|
||||
(PaginationMetadata PagingMeta, RecitationPublishingTrackerViewModel[] Items) paginatedResult =
|
||||
await QueryablePaginator<RecitationPublishingTrackerViewModel>.Paginate(source, paging);
|
||||
|
||||
return new RServiceResult<(PaginationMetadata PagingMeta, RecitationPublishingTrackerViewModel[] Items)>(paginatedResult);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<(PaginationMetadata PagingMeta, RecitationPublishingTracker[] Items)>((PagingMeta: null, Items: null), exp.ToString());
|
||||
return new RServiceResult<(PaginationMetadata PagingMeta, RecitationPublishingTrackerViewModel[] Items)>((PagingMeta: null, Items: null), exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user