#241 updating related poems on update page

This commit is contained in:
Hamid Reza Mohammadi 2021-11-15 18:01:59 +03:30
parent d43c1be8f0
commit 781aec0666
3 changed files with 48 additions and 0 deletions

View File

@ -10786,6 +10786,15 @@
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService._UpdateRelatedPoems(RMuseum.DbContext.RMuseumDbContext,System.Int32,System.String)">
<summary>
update related poems info (after metreId or rhyme for one of these poems changes)
</summary>
<param name="context"></param>
<param name="metreId"></param>
<param name="rhyme"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.GetPoemHtmlExcerpt(System.String)">
<summary>
get an excerpt for the poem

View File

@ -16,6 +16,32 @@ namespace RMuseum.Services.Implementation
/// </summary>
public partial class GanjoorService : IGanjoorService
{
/// <summary>
/// update related poems info (after metreId or rhyme for one of these poems changes)
/// </summary>
/// <param name="context"></param>
/// <param name="metreId"></param>
/// <param name="rhyme"></param>
/// <returns></returns>
private async Task<RServiceResult<bool>> _UpdateRelatedPoems(RMuseumDbContext context, int metreId, string rhyme)
{
try
{
var poemIds = await context.GanjoorPoems.AsNoTracking().Where(p => p.GanjoorMetreId == metreId && p.RhymeLetters == rhyme).Select(p => p.Id).ToListAsync();
foreach (var id in poemIds)
{
await _UpdatePoemRelatedPoemsInfoNoSaveChanges(context, id);
}
await context.SaveChangesAsync();
return new RServiceResult<bool>(true);
}
catch(Exception exp)
{
return new RServiceResult<bool>(false, exp.ToString());
}
}
private async Task _UpdatePoemRelatedPoemsInfoNoSaveChanges(RMuseumDbContext context, int poemId)
{
var poem = await context.GanjoorPoems.AsNoTracking().Where(p => p.Id == poemId).SingleAsync();

View File

@ -2929,6 +2929,8 @@ namespace RMuseum.Services.Implementation
{
dbPoem.SourceName = pageData.SourceName;
dbPoem.SourceUrlSlug = pageData.SourceUrlSlug;
int? oldMetreId = dbPoem.GanjoorMetreId;
string oldRhymeLetters = dbPoem.RhymeLetters;
if (string.IsNullOrEmpty(pageData.Rhythm))
{
dbPoem.GanjoorMetreId = null;
@ -2999,6 +3001,17 @@ namespace RMuseum.Services.Implementation
}
await _FillPoemCoupletIndices(_context, id);
if(oldMetreId != dbPoem.GanjoorMetreId || oldRhymeLetters != dbPoem.RhymeLetters)
{
if (oldMetreId != null && !string.IsNullOrEmpty(oldRhymeLetters))
await _UpdateRelatedPoems(_context, (int)oldMetreId, oldRhymeLetters);
if (dbPoem.GanjoorMetreId != null && !string.IsNullOrEmpty(dbPoem.RhymeLetters))
{
await _UpdateRelatedPoems(_context, (int)dbPoem.GanjoorMetreId, dbPoem.RhymeLetters);
}
}
}
await _context.SaveChangesAsync();
CacheCleanForPageByUrl(dbPage.FullUrl);