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);