diff --git a/RMuseum/RMuseum.xml b/RMuseum/RMuseum.xml index b677988a..d172b2e2 100644 --- a/RMuseum/RMuseum.xml +++ b/RMuseum/RMuseum.xml @@ -10786,6 +10786,15 @@ + + + update related poems info (after metreId or rhyme for one of these poems changes) + + + + + + get an excerpt for the poem diff --git a/RMuseum/Services/Implementation/GanjoorService-Partials/GanjoorService-RelatedPoems.cs b/RMuseum/Services/Implementation/GanjoorService-Partials/GanjoorService-RelatedPoems.cs index ce9a14ec..73d92221 100644 --- a/RMuseum/Services/Implementation/GanjoorService-Partials/GanjoorService-RelatedPoems.cs +++ b/RMuseum/Services/Implementation/GanjoorService-Partials/GanjoorService-RelatedPoems.cs @@ -16,6 +16,32 @@ namespace RMuseum.Services.Implementation /// public partial class GanjoorService : IGanjoorService { + /// + /// update related poems info (after metreId or rhyme for one of these poems changes) + /// + /// + /// + /// + /// + private async Task> _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(true); + } + catch(Exception exp) + { + return new RServiceResult(false, exp.ToString()); + } + + + } private async Task _UpdatePoemRelatedPoemsInfoNoSaveChanges(RMuseumDbContext context, int poemId) { var poem = await context.GanjoorPoems.AsNoTracking().Where(p => p.Id == poemId).SingleAsync(); diff --git a/RMuseum/Services/Implementation/GanjoorService.cs b/RMuseum/Services/Implementation/GanjoorService.cs index ead09268..83026a2e 100644 --- a/RMuseum/Services/Implementation/GanjoorService.cs +++ b/RMuseum/Services/Implementation/GanjoorService.cs @@ -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);