#217 generate missing default numberings

This commit is contained in:
Hamid Reza Mohammadi 2021-10-04 17:33:33 +03:30
parent eec576cfda
commit 11e00e8923
6 changed files with 134 additions and 0 deletions

View File

@ -203,6 +203,25 @@
},
});
}
function regenMissingNumbering() {
if (!confirm('آیا از تولید الگوهای شماره‌گذاری ناموجود اطمینان دارید؟'))
return;
var url = '?handler=RegenerateNumberings';
$.ajax({
type: "POST",
url: url,
error: function () {
alert('خطا رخ داد.');
},
success: function () {
alert('تولید الگوهای شماره‌گذاری ناموجود شروع شد.')
},
});
}
</script>
<table>
<tr>
@ -246,6 +265,11 @@
</td>
</tr>
}
<tr>
<td colspan="5">
<a role="button" onclick="regenMissingNumbering()" class="actionlink" title="تولید کلی الگوهای ناموجود">تولید کلی الگوهای ناموجود</a>
</td>
</tr>
</table>
<form method="post" action="?Handler=Numbering&url=@Model.Cat.Cat.FullUrl">

View File

@ -248,5 +248,19 @@ namespace GanjooRazor.Areas.Admin.Pages
return new OkObjectResult(false);
}
public async Task<IActionResult> OnPostRegenerateNumberingsAsync(int id)
{
using (HttpClient secureClient = new HttpClient())
{
if (await GanjoorSessionChecker.PrepareClient(secureClient, Request, Response))
{
HttpResponseMessage response = await secureClient.PostAsync($"{APIRoot.Url}/api/numberings/generatemissing", null);
response.EnsureSuccessStatusCode();
return new OkObjectResult(true);
}
}
return new OkObjectResult(false);
}
}
}

View File

@ -176,6 +176,25 @@ namespace RMuseum.Controllers
return Ok(res.Result);
}
/// <summary>
/// generate missing default numberings and start counting
/// </summary>
/// <returns></returns>
[HttpPost("generatemissing")]
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + SecurableItem.ModifyOperationShortName)]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(bool))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.Unauthorized)]
public IActionResult GenerateMissingDefaultNumberings()
{
if (ReadOnlyMode)
return BadRequest("سایت به دلایل فنی مثل انتقال سرور موقتاً در حالت فقط خواندنی قرار دارد. لطفاً ساعاتی دیگر مجدداً تلاش کنید.");
var res = _numberingService.GenerateMissingDefaultNumberings();
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
return Ok(res.Result);
}
/// <summary>
/// readonly mode
/// </summary>

View File

@ -1430,6 +1430,12 @@
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.NumberingController.GenerateMissingDefaultNumberings">
<summary>
generate missing default numberings and start counting
</summary>
<returns></returns>
</member>
<member name="P:RMuseum.Controllers.NumberingController.ReadOnlyMode">
<summary>
readonly mode
@ -8432,6 +8438,12 @@
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorNumberingService.GenerateMissingDefaultNumberings">
<summary>
generate missing default numberings and start counting
</summary>
<returns></returns>
</member>
<member name="T:RMuseum.Services.IGanjoorService">
<summary>
Ganjoor Poems Content Privider Service
@ -10127,6 +10139,12 @@
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorNumberingService.GenerateMissingDefaultNumberings">
<summary>
generate missing default numberings and start counting
</summary>
<returns></returns>
</member>
<member name="F:RMuseum.Services.Implementation.GanjoorNumberingService._context">
<summary>
Database Context

View File

@ -69,5 +69,11 @@ namespace RMuseum.Services
/// </summary>
/// <returns></returns>
RServiceResult<bool> Recount(int numberingId);
/// <summary>
/// generate missing default numberings and start counting
/// </summary>
/// <returns></returns>
RServiceResult<bool> GenerateMissingDefaultNumberings();
}
}

View File

@ -329,6 +329,59 @@ namespace RMuseum.Services.Implementation
return new RServiceResult<bool>(true);
}
/// <summary>
/// generate missing default numberings and start counting
/// </summary>
/// <returns></returns>
public RServiceResult<bool> GenerateMissingDefaultNumberings()
{
_backgroundTaskQueue.QueueBackgroundWorkItem
(
async token =>
{
using (RMuseumDbContext context = new RMuseumDbContext(new DbContextOptions<RMuseumDbContext>())) //this is long running job, so _context might be already been freed/collected by GC
{
LongRunningJobProgressServiceEF jobProgressServiceEF = new LongRunningJobProgressServiceEF(context);
var job = (await jobProgressServiceEF.NewJob("GenerateMissingDefaultNumberings", "Query")).Result;
try
{
var cats = await context.GanjoorCategories.Where(c => c.ParentId != null).ToListAsync();
foreach (var cat in cats)
{
var numbering = await context.GanjoorNumberings.Where(n => n.StartCatId == cat.Id && n.Name == cat.Title).FirstOrDefaultAsync();
if(numbering == null)
{
await jobProgressServiceEF.UpdateJob(job.Id, 0, cat.FullUrl);
numbering = new GanjoorNumbering()
{
Name = cat.Title,
StartCatId = cat.Id,
EndCatId = cat.Id
};
context.GanjoorNumberings.Add(numbering);
await context.SaveChangesAsync();
Recount(numbering.Id); //start counting
}
}
await context.SaveChangesAsync();
await jobProgressServiceEF.UpdateJob(job.Id, 100, "", true);
}
catch (Exception exp)
{
await jobProgressServiceEF.UpdateJob(job.Id, 100, "", false, exp.ToString());
}
}
}
);
return new RServiceResult<bool>(true);
}
/// <summary>
/// Database Context
/// </summary>