diff --git a/RMuseum/Services/Implementation/GanjoorService.cs b/RMuseum/Services/Implementation/GanjoorService.cs index c7380b4c..be9a360b 100644 --- a/RMuseum/Services/Implementation/GanjoorService.cs +++ b/RMuseum/Services/Implementation/GanjoorService.cs @@ -35,6 +35,7 @@ namespace RMuseum.Services.Implementation /// public async Task> GetPoets(bool websitePoets, bool includeBio = true) { + try { var cacheKey = $"/api/ganjoor/poets?websitePoets={websitePoets}&includeBio={includeBio}"; @@ -87,6 +88,7 @@ namespace RMuseum.Services.Implementation /// public async Task> GetPoetById(int id) { + try { var cacheKey = $"/api/ganjoor/poet/{id}"; @@ -2098,24 +2100,41 @@ namespace RMuseum.Services.Implementation } } - private async Task _UpdatePageChildrenTitleAndUrl(GanjoorPage dbPage) + private async Task _UpdatePageChildrenTitleAndUrl(GanjoorPage dbPage, bool messWithTitles, bool messWidthUrls) { var children = await _context.GanjoorPages.Where(p => p.ParentId == dbPage.Id).ToListAsync(); foreach(var child in children) { child.FullUrl = dbPage.FullUrl + "/" + child.UrlSlug; child.FullTitle = dbPage.FullTitle + " » " + child.Title; - - if(child.GanjoorPageType == GanjoorPageType.PoemPage) + + switch(child.GanjoorPageType) { - GanjoorPoem poem = await _context.GanjoorPoems.Where(p => p.Id == child.Id).SingleAsync(); - poem.FullTitle = child.FullTitle; - poem.FullUrl = child.FullUrl; + case GanjoorPageType.PoemPage: + { + GanjoorPoem poem = await _context.GanjoorPoems.Where(p => p.Id == child.Id).SingleAsync(); + if(messWithTitles) + poem.FullTitle = child.FullTitle; + if(messWidthUrls) + poem.FullUrl = child.FullUrl; - _context.GanjoorPoems.Update(poem); + _context.GanjoorPoems.Update(poem); + } + break; + case GanjoorPageType.CatPage: + { + if (messWidthUrls) + { + GanjoorCat cat = await _context.GanjoorCategories.Where(c => c.Id == child.CatId).SingleAsync(); + cat.FullUrl = child.FullTitle; + _context.GanjoorCategories.Update(cat); + } + + } + break; } - await _UpdatePageChildrenTitleAndUrl(child); + await _UpdatePageChildrenTitleAndUrl(child, messWithTitles, messWidthUrls); CacheCleanForPageByUrl(child.FullUrl); } @@ -2168,28 +2187,108 @@ namespace RMuseum.Services.Implementation _context.GanjoorPageSnapshots.Add(snapshot); await _context.SaveChangesAsync(); - + dbPage.HtmlText = pageData.HtmlText; + bool messWithTitles = dbPage.Title != pageData.Title; + bool messWidthUrls = dbPage.UrlSlug != pageData.UrlSlug; - if (dbPage.Title != pageData.Title || dbPage.UrlSlug != pageData.UrlSlug) + if (messWithTitles || messWidthUrls) { + dbPage.Title = pageData.Title; dbPage.UrlSlug = pageData.UrlSlug; if (dbPage.ParentId != null) { GanjoorPage parent = await _context.GanjoorPages.AsNoTracking().Where(p => p.Id == dbPage.ParentId).SingleAsync(); - dbPage.FullUrl = parent.FullUrl + "/" + pageData.UrlSlug; - dbPage.FullTitle = parent.FullTitle + " » " + pageData.Title; + if(messWidthUrls) + { + dbPage.FullUrl = parent.FullUrl + "/" + pageData.UrlSlug; + } + if(messWithTitles) + { + dbPage.FullTitle = parent.FullTitle + " » " + pageData.Title; + } } else { - dbPage.FullUrl = "/" + pageData.UrlSlug; - dbPage.FullTitle = pageData.Title; + if (messWidthUrls) + { + dbPage.FullUrl = "/" + pageData.UrlSlug; + } + + if (messWithTitles) + { + dbPage.FullTitle = pageData.Title; + } + + } + + switch(dbPage.GanjoorPageType) + { + case GanjoorPageType.CatPage: + { + GanjoorCat cat = await _context.GanjoorCategories.Where(c => c.Id == dbPage.CatId).SingleAsync(); + if (messWidthUrls) + cat.Title = dbPage.Title; + if(messWidthUrls) + { + cat.UrlSlug = dbPage.UrlSlug; + cat.FullUrl = dbPage.FullUrl; + } + + _context.GanjoorCategories.Update(cat); + await _context.SaveChangesAsync(); + } + break; + } + + await _UpdatePageChildrenTitleAndUrl(dbPage, messWithTitles, messWidthUrls); + } + + if(dbPage.GanjoorPageType == GanjoorPageType.PoetPage && (messWithTitles || messWidthUrls)) + { + if (messWithTitles) + { + GanjoorPoet poet = await _context.GanjoorPoets.Where(p => p.Id == dbPage.PoetId).SingleAsync(); + poet.Nickname = dbPage.Title; + //poet.Description = dbPage.HtmlText; -- description might become html free + _context.GanjoorPoets.Update(poet); + } + + + GanjoorCat cat = await _context.GanjoorCategories.Where(c => c.Id == dbPage.CatId).SingleAsync(); + if(messWithTitles) + { + cat.Title = dbPage.Title; + } + if (messWidthUrls) + { + cat.UrlSlug = dbPage.UrlSlug; + cat.FullUrl = dbPage.FullUrl; + } + + + _context.GanjoorCategories.Update(cat); + + await _context.SaveChangesAsync(); + + var cachKeyPoets = $"/api/ganjoor/poets?websitePoets=true&includeBio=false"; + if (_memoryCache.TryGetValue(cachKeyPoets, out GanjoorPoetViewModel[] poets)) + { + _memoryCache.Remove(cachKeyPoets); + } + var cachKeyPoets2 = $"ganjoor/poets/true/false"; + if (_memoryCache.TryGetValue(cachKeyPoets2, out GanjoorPoetViewModel[] poets2)) + { + _memoryCache.Remove(cachKeyPoets2); + } + + var cacheKeyPoet = $"/api/ganjoor/poet/{dbPage.PoetId}"; + if (_memoryCache.TryGetValue(cacheKeyPoet, out GanjoorPoetCompleteViewModel poetCat)) + { + _memoryCache.Remove(cacheKeyPoet); } - await _UpdatePageChildrenTitleAndUrl(dbPage); } - - dbPage.HtmlText = pageData.HtmlText; _context.GanjoorPages.Update(dbPage);