a weird bug fix in importing category data from sqlite

This commit is contained in:
Hamid Reza Mohammadi 2025-02-16 19:48:24 +03:30
parent 3d242b59ce
commit 60745c61f3
2 changed files with 30 additions and 28 deletions

View File

@ -282,14 +282,13 @@ namespace RMuseum.Services.Implementation
}
private async Task<bool> _SectionizePoem(RMuseumDbContext context, GanjoorPoem poem, LongRunningJobProgressServiceEF jobProgressServiceEF, RLongRunningJobStatus job)
private async Task<bool> _SectionizePoem(RMuseumDbContext context, GanjoorPoem poem, LongRunningJobProgressServiceEF jobProgressServiceEF, RLongRunningJobStatus job, GanjoorCat cat)
{
if (true == await context.GanjoorPoemSections.AsNoTracking().Where(s => s.PoemId == poem.Id).AnyAsync())
return true;
if(poem.Cat == null)
{
poem.Cat = await context.GanjoorCategories.AsNoTracking().Where(c => c.Id == poem.CatId).SingleAsync();
return true;
}
var nonCommentVerses = await context.GanjoorVerses.Where(v => v.PoemId == poem.Id && v.VersePosition != VersePosition.Comment).OrderBy(v => v.VOrder).ToListAsync();
if (!nonCommentVerses.Where(v => v.VersePosition == VersePosition.Paragraph || v.VersePosition == VersePosition.Single).Any())
@ -301,12 +300,12 @@ namespace RMuseum.Services.Implementation
).Any())
{
//multi-band poem
_SectionizeMultibandVerses(context, nonCommentVerses, poem, 0);
_SectionizeMultibandVerses(context, nonCommentVerses, poem, 0, cat);
}
else
if (!nonCommentVerses.Where(v => v.VersePosition != VersePosition.Right && v.VersePosition != VersePosition.Left).Any())
{
_SectionizeNormalVerses(context, nonCommentVerses, poem, 0);
_SectionizeNormalVerses(context, nonCommentVerses, poem, 0, cat);
}
}
else
@ -328,7 +327,7 @@ namespace RMuseum.Services.Implementation
GanjoorPoemSection mainSection = new GanjoorPoemSection()
{
PoemId = poem.Id,
PoetId = poem.Cat.PoetId,
PoetId = cat.PoetId,
SectionType = PoemSectionType.WholePoem,
VerseType = VersePoemSectionType.First,
Index = sectionIndex,
@ -374,11 +373,11 @@ namespace RMuseum.Services.Implementation
).Any())
{
//multi-band poem
_SectionizeMultibandVerses(context, normalVerses, poem, sectionIndex);
_SectionizeMultibandVerses(context, normalVerses, poem, sectionIndex, cat);
}
else
{
_SectionizeNormalVerses(context, normalVerses, poem, sectionIndex);
_SectionizeNormalVerses(context, normalVerses, poem, sectionIndex, cat);
}
sectionIndex++;
normalVerses = new List<GanjoorVerse>();
@ -400,7 +399,7 @@ namespace RMuseum.Services.Implementation
GanjoorPoemSection mainSection = new GanjoorPoemSection()
{
PoemId = poem.Id,
PoetId = poem.Cat.PoetId,
PoetId = cat.PoetId,
SectionType = PoemSectionType.WholePoem,
VerseType = VersePoemSectionType.First,
Index = sectionIndex,
@ -432,22 +431,22 @@ namespace RMuseum.Services.Implementation
).Any())
{
//multi-band poem
_SectionizeMultibandVerses(context, normalVerses, poem, sectionIndex);
_SectionizeMultibandVerses(context, normalVerses, poem, sectionIndex, cat);
}
else
{
_SectionizeNormalVerses(context, normalVerses, poem, sectionIndex);
_SectionizeNormalVerses(context, normalVerses, poem, sectionIndex, cat);
}
}
}
return true;
}
private void _SectionizeMultibandVerses(RMuseumDbContext context, List<GanjoorVerse> nonCommentVerses, GanjoorPoem poem, int index)
private void _SectionizeMultibandVerses(RMuseumDbContext context, List<GanjoorVerse> nonCommentVerses, GanjoorPoem poem, int index, GanjoorCat cat)
{
GanjoorPoemSection mainSection = new GanjoorPoemSection()
{
PoemId = poem.Id,
PoetId = poem.Cat.PoetId,
PoetId = cat.PoetId,
SectionType = PoemSectionType.WholePoem,
VerseType = VersePoemSectionType.First,
Index = index,
@ -478,7 +477,7 @@ namespace RMuseum.Services.Implementation
GanjoorPoemSection currentBandSection = new GanjoorPoemSection()
{
PoemId = poem.Id,
PoetId = poem.Cat.PoetId,
PoetId = cat.PoetId,
SectionType = PoemSectionType.Band,
VerseType = VersePoemSectionType.Second,
Index = index,
@ -518,7 +517,7 @@ namespace RMuseum.Services.Implementation
currentBandSection = new GanjoorPoemSection()
{
PoemId = poem.Id,
PoetId = poem.Cat.PoetId,
PoetId = cat.PoetId,
SectionType = PoemSectionType.Band,
VerseType = VersePoemSectionType.Second,
Index = index,
@ -546,7 +545,7 @@ namespace RMuseum.Services.Implementation
GanjoorPoemSection bandSection = new GanjoorPoemSection()
{
PoemId = poem.Id,
PoetId = poem.Cat.PoetId,
PoetId = cat.PoetId,
SectionType = PoemSectionType.BandCouplets,
VerseType = VersePoemSectionType.Second,
Index = index,
@ -584,7 +583,7 @@ namespace RMuseum.Services.Implementation
GanjoorPoemSection verseSection = new GanjoorPoemSection()
{
PoemId = poem.Id,
PoetId = poem.Cat.PoetId,
PoetId = cat.PoetId,
SectionType = PoemSectionType.Couplet,
VerseType = VersePoemSectionType.Third,
Index = index,
@ -620,13 +619,13 @@ namespace RMuseum.Services.Implementation
context.UpdateRange(nonCommentVerses);
}
private void _SectionizeNormalVerses(RMuseumDbContext context, List<GanjoorVerse> nonCommentVerses, GanjoorPoem poem, int index)
private void _SectionizeNormalVerses(RMuseumDbContext context, List<GanjoorVerse> nonCommentVerses, GanjoorPoem poem, int index, GanjoorCat cat)
{
//normal poem
GanjoorPoemSection mainSection = new GanjoorPoemSection()
{
PoemId = poem.Id,
PoetId = poem.Cat.PoetId,
PoetId = cat.PoetId,
SectionType = PoemSectionType.WholePoem,
VerseType = VersePoemSectionType.First,
Index = index,
@ -681,7 +680,7 @@ namespace RMuseum.Services.Implementation
GanjoorPoemSection verseSection = new GanjoorPoemSection()
{
PoemId = poem.Id,
PoetId = poem.Cat.PoetId,
PoetId = cat.PoetId,
SectionType = PoemSectionType.Couplet,
VerseType = VersePoemSectionType.Second,
Index = index,
@ -810,7 +809,7 @@ namespace RMuseum.Services.Implementation
await _context.SaveChangesAsync();
var poem = await _context.GanjoorPoems.Include(p => p.Cat).AsNoTracking().SingleAsync(p => p.Id == id);
await _SectionizePoem(_context, poem, jobProgressServiceEF, job);
await _SectionizePoem(_context, poem, jobProgressServiceEF, job, poem.Cat);
if (meterId != null)
{

View File

@ -191,7 +191,7 @@ namespace RMuseum.Services.Implementation
return new RServiceResult<bool>(true);
}
private async Task<string> _ImportSQLiteCatChildren(RMuseumDbContext context, IDbConnection sqlite, int poetId, int sqliteParentCatId, GanjoorCat parentCat, string parentFullTitle, LongRunningJobProgressServiceEF jobProgressServiceEF, RLongRunningJobStatus job, int parentPagId)
private async Task<string> _ImportSQLiteCatChildren(RMuseumDbContext context, IDbConnection sqlite, int poetId, int sqliteParentCatId, GanjoorCat parentCat, string parentFullTitle, LongRunningJobProgressServiceEF jobProgressServiceEF, RLongRunningJobStatus job, int parentPageId)
{
try
{
@ -342,7 +342,7 @@ namespace RMuseum.Services.Implementation
PoetId = poetId,
CatId = poetCatId,
PostDate = DateTime.Now,
ParentId = parentPagId
ParentId = parentPageId
};
context.GanjoorPages.Add(dbPageCat);
@ -368,7 +368,6 @@ namespace RMuseum.Services.Implementation
foreach (var poem in await sqlite.QueryAsync($"SELECT * FROM poem WHERE cat_id = {sqliteParentCatId} ORDER BY id"))
{
poemNumber++;
await jobProgressServiceEF.UpdateJob(job.Id, poemNumber, "", false);
string title = poem.title;
string urlSlug = $"sh{poemNumber}";
@ -450,9 +449,11 @@ namespace RMuseum.Services.Implementation
await context.SaveChangesAsync();//id set should be in order
}
await _FillPoemCoupletIndices(context, poemId);
GanjoorPage dbPoemPage = new GanjoorPage()
{
Id = poemId,
@ -468,13 +469,15 @@ namespace RMuseum.Services.Implementation
CatId = parentCat.Id,
PoemId = poemId,
PostDate = DateTime.Now,
ParentId = parentPagId
ParentId = parentPageId
};
context.GanjoorPages.Add(dbPoemPage);
await context.SaveChangesAsync();
await _SectionizePoem(context, dbPoem, jobProgressServiceEF, job);
await _SectionizePoem(context, dbPoem, jobProgressServiceEF, job, parentCat);
catHtmlText += $"<p><a href=\"{dbPoemPage.FullUrl}\">{dbPoemPage.Title}</a></p>{Environment.NewLine}";