#20 retrypublish api

This commit is contained in:
Hamid Reza Mohammadi 2020-10-16 19:17:25 +03:30
parent 25472b208c
commit 985e8195ca
4 changed files with 74 additions and 19 deletions

View File

@ -250,6 +250,29 @@ namespace RMuseum.Controllers
return BadRequest(res.ExceptionString);
}
/// <summary>
/// retry publish unpublished narrations
/// </summary>
/// <returns></returns>
[HttpPost]
[Route("retrypublish")]
[Authorize(Policy = RMuseumSecurableItem.AudioNarrationEntityShortName + ":" + RMuseumSecurableItem.ModerateOperationShortName)]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(bool))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public IActionResult RetryPublish()
{
try
{
_audioService.RetryPublish();
return Ok();
}
catch(Exception exp)
{
return BadRequest(exp.ToString());
}
}
/// <summary>
/// Get User Profiles
/// </summary>

View File

@ -675,6 +675,12 @@
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.AudioNarrationController.RetryPublish">
<summary>
retry publish unpublished narrations
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.AudioNarrationController.GetUserNarrationProfiles">
<summary>
Get User Profiles
@ -3736,6 +3742,11 @@
<param name="userId">if userId is empty all user uploads would be returned</param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IAudioNarrationService.RetryPublish">
<summary>
retry publish unpublished narrations
</summary>
</member>
<member name="T:RMuseum.Services.Implementation.ArtifactService">
<summary>
IArtifactService implementation
@ -4479,6 +4490,11 @@
<param name="model"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.AudioNarrationService.RetryPublish">
<summary>
retry publish unpublished narrations
</summary>
</member>
<member name="M:RMuseum.Services.Implementation.AudioNarrationService.GetUploadSession(System.Guid)">
<summary>
Get Upload Session (including files)

View File

@ -119,6 +119,9 @@ namespace RMuseum.Services
/// <returns></returns>
Task<RServiceResult<(PaginationMetadata PagingMeta, dynamic[] Items)>> GetUploads(PagingParameterModel paging, Guid userId);
/// <summary>
/// retry publish unpublished narrations
/// </summary>
public void RetryPublish();
}
}

View File

@ -9,7 +9,6 @@ using RMuseum.DbContext;
using RMuseum.Models.GanjoorAudio;
using RMuseum.Models.GanjoorAudio.ViewModels;
using RMuseum.Models.UploadSession;
using RMuseum.Services.Implementation.ImportedFromDesktopGanjoor;
using RSecurityBackend.Models.Generic;
using RSecurityBackend.Services.Implementation;
using System;
@ -561,7 +560,10 @@ namespace RMuseum.Services.Implementation
(
async token =>
{
await _PublishNarration(narration);
using (RMuseumDbContext context = new RMuseumDbContext(Configuration)) //this is long running job, so _context might be already been freed/collected by GC
{
await _PublishNarration(narration, context);
}
});
}
@ -576,7 +578,7 @@ namespace RMuseum.Services.Implementation
}
}
private async Task _PublishNarration(PoemNarration narration)
private async Task _PublishNarration(PoemNarration narration, RMuseumDbContext context)
{
using var client = new SftpClient
(
@ -619,12 +621,9 @@ namespace RMuseum.Services.Implementation
await connection.ExecuteAsync(sql);
}
using (RMuseumDbContext context = new RMuseumDbContext(Configuration)) //this is long running job, so _context might be already been freed/collected by GC
{
narration.AudioSyncStatus = (int)AudioSyncStatus.SynchronizedOrRejected;
context.AudioFiles.Update(narration);
await context.SaveChangesAsync();
}
narration.AudioSyncStatus = (int)AudioSyncStatus.SynchronizedOrRejected;
context.AudioFiles.Update(narration);
await context.SaveChangesAsync();
await _notificationService.PushNotification
(
@ -636,16 +635,10 @@ namespace RMuseum.Services.Implementation
}
catch (Exception exp)
catch
{
//if an error occurs, narration.AudioSyncStatus is not updated and narration can be idetified later to do "retry" attempts
await _notificationService.PushNotification
(
narration.OwnerId,
"خطا در پردازش نهایی",
$"{exp}{Environment.NewLine}" +
$"می‌توانید با مراجعه به این صفحه TODO: client url وضعیت آن را بررسی کنید."
);
//if an error occurs, narration.AudioSyncStatus is not updated and narration can be idetified later to do "retrypublish" attempts
//a logging solution should be put to work here to find out what is gone wrong
}
finally
{
@ -653,6 +646,26 @@ namespace RMuseum.Services.Implementation
}
}
/// <summary>
/// retry publish unpublished narrations
/// </summary>
public void RetryPublish()
{
_backgroundTaskQueue.QueueBackgroundWorkItem
(
async token =>
{
using (RMuseumDbContext context = new RMuseumDbContext(Configuration)) //this is long running job, so _context might be already been freed/collected by GC
{
var list = await context.AudioFiles.Where(a => a.ReviewStatus == AudioReviewStatus.Approved && a.AudioSyncStatus != (int)AudioSyncStatus.SynchronizedOrRejected).ToListAsync();
foreach (PoemNarration narration in list)
{
await _PublishNarration(narration, context);
}
}
});
}
/// <summary>
/// Get Upload Session (including files)