docs: #297 changing regenerating TOC api to regenerate old TOCs

This commit is contained in:
Hamid Reza Mohammadi 2022-03-26 17:42:58 +04:30
parent 1ff66fdf6b
commit 29d2a74b8e
4 changed files with 35 additions and 35 deletions

View File

@ -626,18 +626,18 @@ namespace RMuseum.Controllers
}
/// <summary>
/// convert old alphabetic TOCs to new ones
/// regenerate TOCs
/// </summary>
/// <returns></returns>
[HttpPut("cat/toc/migrate")]
[HttpPut("cat/toc/regen")]
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + SecurableItem.ModifyOperationShortName)]
[ProducesResponseType((int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public IActionResult StartRegeneratingOldAlphabeticTOCs()
public IActionResult StartRegeneratingTOCs()
{
Guid userId =
new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
var res = _ganjoorService.StartRegeneratingOldAlphabeticTOCs(userId);
var res = _ganjoorService.StartRegeneratingTOCs(userId);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);

View File

@ -1028,9 +1028,9 @@
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.StartRegeneratingOldAlphabeticTOCs">
<member name="M:RMuseum.Controllers.GanjoorController.StartRegeneratingTOCs">
<summary>
convert old alphabetic TOCs to new ones
regenerate TOCs
</summary>
<returns></returns>
</member>
@ -11289,9 +11289,9 @@
<param name="language"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.StartRegeneratingOldAlphabeticTOCs(System.Guid)">
<member name="M:RMuseum.Services.IGanjoorService.StartRegeneratingTOCs(System.Guid)">
<summary>
convert old alphabetic TOCs to new ones
regenerate TOCs
</summary>
<param name="userId"></param>
<returns></returns>
@ -13048,9 +13048,9 @@
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.StartRegeneratingOldAlphabeticTOCs(System.Guid)">
<member name="M:RMuseum.Services.Implementation.GanjoorService.StartRegeneratingTOCs(System.Guid)">
<summary>
convert old alphabetic TOCs to new ones
regenerate TOCs
</summary>
<param name="userId"></param>
<returns></returns>

View File

@ -849,10 +849,10 @@ namespace RMuseum.Services
Task<RServiceResult<bool>> SetCategoryLanguageTag(int catId, string language);
/// <summary>
/// convert old alphabetic TOCs to new ones
/// regenerate TOCs
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
RServiceResult<bool> StartRegeneratingOldAlphabeticTOCs(Guid userId);
RServiceResult<bool> StartRegeneratingTOCs(Guid userId);
}
}

View File

@ -21,11 +21,11 @@ namespace RMuseum.Services.Implementation
public partial class GanjoorService : IGanjoorService
{
/// <summary>
/// convert old alphabetic TOCs to new ones
/// regenerate TOCs
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public RServiceResult<bool> StartRegeneratingOldAlphabeticTOCs(Guid userId)
public RServiceResult<bool> StartRegeneratingTOCs(Guid userId)
{
try
{
@ -37,32 +37,32 @@ namespace RMuseum.Services.Implementation
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("RegeneratingOldAlphabeticTOCs", "Query data")).Result;
var job = (await jobProgressServiceEF.NewJob("StartRegeneratingTOCs", "Query data")).Result;
try
{
var cats = await context.GanjoorCategories.AsNoTracking().ToListAsync();
var pages = await context.GanjoorPages.AsNoTracking().Where(p => p.CatId != null && p.GanjoorPageType == GanjoorPageType.CatPage && p.HtmlText.Contains("دسترسی سریع به حروف")).ToArrayAsync();
foreach (var page in pages)
foreach (var cat in cats)
{
await jobProgressServiceEF.UpdateJob(job.Id, 0, page.FullTitle);
await _FindCategoryPoemsRhymesInternal((int)page.CatId, false);
GanjoorTOC options = GanjoorTOC.AlphabeticWithFirstCouplet;
if (
new string[]
{
"غزلیات", "غزل", "غزل ها", "قصاید", "قصائد", "قصیده", "رباعیات", "رباعی", "رباعی ها"
}.Contains(page.Title)
)
{
options = GanjoorTOC.AlphabeticWithFirstVerse;
}
await _DirectInsertGeneratedTableOfContents(context, (int)page.CatId, userId, options);
var page =
await context.GanjoorPages.AsNoTracking()
.Where(p => (p.GanjoorPageType == GanjoorPageType.PoetPage && p.PoetId == cat.PoetId) || (p.GanjoorPageType == GanjoorPageType.CatPage && p.CatId == cat.Id)).SingleAsync();
await jobProgressServiceEF.UpdateJob(job.Id, 0, page.FullTitle);
if(cat.TableOfContentsStyle == GanjoorTOC.Analyse)
{
var hasChild = await context.GanjoorCategories.AsNoTracking().Where(c => c.ParentId == cat.Id).AnyAsync();
if (cat.ParentId == null || hasChild)
cat.TableOfContentsStyle = GanjoorTOC.OnlyTitles;
else
cat.TableOfContentsStyle = GanjoorTOC.TitlesAndFirstVerse;
var catToUpdate = await context.GanjoorCategories.Where(c => c.Id == cat.Id).SingleAsync();
catToUpdate.TableOfContentsStyle = cat.TableOfContentsStyle;
context.Update(catToUpdate);
await context.SaveChangesAsync();
}
await _DirectInsertGeneratedTableOfContents(context,cat.Id, userId, cat.TableOfContentsStyle);
var cat = await context.GanjoorCategories.Where(c => c.Id == (int)page.CatId).SingleAsync();
cat.TableOfContentsStyle = options;
cat.CatType = GanjoorCatType.BookPart;
context.Update(cat);
await context.SaveChangesAsync();
}