#444 FillCategoryWordCountSummaries
This commit is contained in:
parent
948553a46b
commit
41e08ce766
@ -4213,6 +4213,21 @@ namespace RMuseum.Controllers
|
||||
_ganjoorService.FillCategoryWordCountsRowNmbrInCat();
|
||||
return Ok();
|
||||
}
|
||||
/// <summary>
|
||||
/// one time fixer for category word count summries
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
|
||||
[HttpPut("wordcounts/fillwordcountsummeries")]
|
||||
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + SecurableItem.ModifyOperationShortName)]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK)]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public IActionResult FillCategoryWordCountSummaries()
|
||||
{
|
||||
_ganjoorService.FillCategoryWordCountSummaries();
|
||||
return Ok();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// category word counts
|
||||
|
||||
@ -200,6 +200,11 @@ namespace RMuseum.DbContext
|
||||
.HasIndex(v => new { v.CatId, v.Word })
|
||||
.IsUnique();
|
||||
|
||||
builder.Entity<CategoryWordCountSummary>()
|
||||
.HasIndex(v => new { v.CatId })
|
||||
.IsUnique();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -589,5 +594,10 @@ namespace RMuseum.DbContext
|
||||
/// </summary>
|
||||
public DbSet<CategoryWordCount> CategoryWordCounts { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Category Word Count Summaries
|
||||
/// </summary>
|
||||
public DbSet<CategoryWordCountSummary> CategoryWordCountSummaries { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
28
RMuseum/Models/Ganjoor/CategoryWordCountSummary.cs
Normal file
28
RMuseum/Models/Ganjoor/CategoryWordCountSummary.cs
Normal file
@ -0,0 +1,28 @@
|
||||
using System;
|
||||
|
||||
namespace RMuseum.Models.Ganjoor
|
||||
{
|
||||
public class CategoryWordCountSummary
|
||||
{
|
||||
/// <summary>
|
||||
/// id
|
||||
/// </summary>
|
||||
public Guid Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// CatId
|
||||
/// </summary>
|
||||
public int CatId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// unique word count
|
||||
/// </summary>
|
||||
public int UniqueWordCount { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// total word count
|
||||
/// </summary>
|
||||
public int TotalWordCount { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
@ -2220,6 +2220,12 @@
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.GanjoorController.FillCategoryWordCountSummaries">
|
||||
<summary>
|
||||
one time fixer for category word count summries
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.GanjoorController.GetCategoryWordCountsAsync(System.Int32,System.String,RSecurityBackend.Models.Generic.PagingParameterModel)">
|
||||
<summary>
|
||||
category word counts
|
||||
@ -3585,6 +3591,11 @@
|
||||
Category Word Counts
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.DbContext.RMuseumDbContext.CategoryWordCountSummaries">
|
||||
<summary>
|
||||
Category Word Count Summaries
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Migrations.PictureFileExtUrl">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
@ -7244,6 +7255,26 @@
|
||||
row number in category
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.CategoryWordCountSummary.Id">
|
||||
<summary>
|
||||
id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.CategoryWordCountSummary.CatId">
|
||||
<summary>
|
||||
CatId
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.CategoryWordCountSummary.UniqueWordCount">
|
||||
<summary>
|
||||
unique word count
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.CategoryWordCountSummary.TotalWordCount">
|
||||
<summary>
|
||||
total word count
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.Ganjoor.CorrectionReviewResult">
|
||||
<summary>
|
||||
correction review result
|
||||
@ -16581,6 +16612,11 @@
|
||||
fill CategoryWordCounts.RowNmbrInCat
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IGanjoorService.FillCategoryWordCountSummaries">
|
||||
<summary>
|
||||
fill CategoryWordCountSummaries
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IGanjoorService.GetCategoryWordCountsAsync(System.Int32,System.String,RSecurityBackend.Models.Generic.PagingParameterModel)">
|
||||
<summary>
|
||||
category words count
|
||||
@ -18163,6 +18199,11 @@
|
||||
fill CategoryWordCounts.RowNmbrInCat
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.GanjoorService.FillCategoryWordCountSummaries">
|
||||
<summary>
|
||||
fill CategoryWordCountSummaries
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.GanjoorService.SetCategoryPoemFormatAsync(System.Int32,System.Nullable{RMuseum.Models.Ganjoor.GanjoorPoemFormat})">
|
||||
<summary>
|
||||
set category poem format tag for poems consisting of a single whole poem section
|
||||
|
||||
@ -1443,6 +1443,11 @@ namespace RMuseum.Services
|
||||
/// </summary>
|
||||
void FillCategoryWordCountsRowNmbrInCat();
|
||||
|
||||
/// <summary>
|
||||
/// fill CategoryWordCountSummaries
|
||||
/// </summary>
|
||||
void FillCategoryWordCountSummaries();
|
||||
|
||||
/// <summary>
|
||||
/// category words count
|
||||
/// </summary>
|
||||
|
||||
@ -265,6 +265,68 @@ namespace RMuseum.Services.Implementation
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// fill CategoryWordCountSummaries
|
||||
/// </summary>
|
||||
public void FillCategoryWordCountSummaries()
|
||||
{
|
||||
_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($"FillCategoryWordCountSummaries", "Query data")).Result;
|
||||
try
|
||||
{
|
||||
var poets = await context.GanjoorPoets.AsNoTracking().Where(p => p.Published).OrderBy(p => p.Id).ToListAsync();
|
||||
foreach (var poet in poets)
|
||||
{
|
||||
var poetCat = await context.GanjoorCategories.AsNoTracking().Where(c => c.PoetId == poet.Id && c.ParentId == null).SingleAsync();
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, poet.Id, poet.Nickname);
|
||||
if (true == await context.CategoryWordCounts.Where(c => c.CatId == poetCat.Id).AnyAsync())
|
||||
{
|
||||
List<int> catIdList = new List<int>
|
||||
{
|
||||
poetCat.Id
|
||||
};
|
||||
await _populateCategoryChildren(context, poetCat.Id, catIdList);
|
||||
foreach (var catId in catIdList)
|
||||
{
|
||||
var uniqueCount = await context.CategoryWordCounts.Where(w => w.CatId == catId).CountAsync();
|
||||
if (uniqueCount > 0)
|
||||
{
|
||||
var totalCount = await context.CategoryWordCounts.Where(w => w.CatId == catId).SumAsync(w => w.Count);
|
||||
context.Add
|
||||
(
|
||||
new CategoryWordCountSummary()
|
||||
{
|
||||
CatId = catId,
|
||||
UniqueWordCount = uniqueCount,
|
||||
TotalWordCount = totalCount
|
||||
}
|
||||
);
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, poet.Id, poet.Nickname + $": Saving {catId}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 100, "", true);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 100, "", false, exp.ToString());
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user