removing naskban links: bug fix + an option for not removing ganjoor links

This commit is contained in:
Hamid Reza Mohammadi 2025-02-03 15:52:51 +03:30
parent 233cfee0b0
commit 4cdd3782b2
4 changed files with 38 additions and 62 deletions

View File

@ -2008,15 +2008,16 @@ namespace RMuseum.Controllers
/// remove ganjoor link
/// </summary>
/// <param name="linkId"></param>
/// <param name="removeItemLink"></param>
/// <returns></returns>
[HttpDelete]
[Route("ganjoor")]
[Authorize(Policy = RMuseumSecurableItem.ArtifactEntityShortName + ":" + RMuseumSecurableItem.ReviewGanjoorLinksOperationShortName)]
[ProducesResponseType((int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task<IActionResult> RemoveGanjoorLinkAsync(Guid linkId)
public async Task<IActionResult> RemoveGanjoorLinkAsync(Guid linkId, bool removeItemLink)
{
RServiceResult<bool> suggestion = await _artifactService.RemoveGanjoorLinkAsync(linkId);
RServiceResult<bool> suggestion = await _artifactService.RemoveGanjoorLinkAsync(linkId, removeItemLink);
if (!string.IsNullOrEmpty(suggestion.ExceptionString))
return BadRequest(suggestion.ExceptionString);
return Ok();

View File

@ -585,11 +585,12 @@
<param name="displayOnPage">display ogn page</param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.ArtifactController.RemoveGanjoorLinkAsync(System.Guid)">
<member name="M:RMuseum.Controllers.ArtifactController.RemoveGanjoorLinkAsync(System.Guid,System.Boolean)">
<summary>
remove ganjoor link
</summary>
<param name="linkId"></param>
<param name="removeItemLink"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.ArtifactController.AddTOCForSuggestedLinks">
@ -15285,11 +15286,12 @@
<param name="result"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IArtifactService.RemoveGanjoorLinkAsync(System.Guid)">
<member name="M:RMuseum.Services.IArtifactService.RemoveGanjoorLinkAsync(System.Guid,System.Boolean)">
<summary>
remove ganjoor link
</summary>
<param name="id"></param>
<param name="removeItemLink"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IArtifactService.AddTOCForSuggestedLinks">
@ -18096,11 +18098,12 @@
<param name="result"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.ArtifactService.RemoveGanjoorLinkAsync(System.Guid)">
<member name="M:RMuseum.Services.Implementation.ArtifactService.RemoveGanjoorLinkAsync(System.Guid,System.Boolean)">
<summary>
remove ganjoor link
</summary>
<param name="id"></param>
<param name="removeItemLink"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.ArtifactService.AddTOCForSuggestedLinks">

View File

@ -496,8 +496,9 @@ namespace RMuseum.Services
/// remove ganjoor link
/// </summary>
/// <param name="id"></param>
/// <param name="removeItemLink"></param>
/// <returns></returns>
Task<RServiceResult<bool>> RemoveGanjoorLinkAsync(Guid id);
Task<RServiceResult<bool>> RemoveGanjoorLinkAsync(Guid id, bool removeItemLink);
/// <summary>
/// Temporary api

View File

@ -3083,8 +3083,9 @@ namespace RMuseum.Services.Implementation
/// remove ganjoor link
/// </summary>
/// <param name="id"></param>
/// <param name="removeItemLink"></param>
/// <returns></returns>
public async Task<RServiceResult<bool>> RemoveGanjoorLinkAsync(Guid id)
public async Task<RServiceResult<bool>> RemoveGanjoorLinkAsync(Guid id, bool removeItemLink)
{
try
{
@ -3092,34 +3093,37 @@ namespace RMuseum.Services.Implementation
await _context.GanjoorLinks
.Where(l => l.Id == id)
.SingleAsync();
GanjoorPoem poem = await _context.GanjoorPoems.AsNoTracking().Where(p => p.Id == link.GanjoorPostId).SingleOrDefaultAsync();
if (poem != null)
if(removeItemLink)
{
var item = await _context.Items.Include(i => i.Tags).Where(i => i.Id == link.ItemId).SingleAsync();
bool itemNeedsUpdate = false;
RTag ganjoorlinkTagType = await _context.Tags.AsNoTracking().Where(a => a.NameInEnglish == "Ganjoor Link").SingleAsync();
if (item.Tags.Any(t => t.RTagId == ganjoorlinkTagType.Id && t.ValueSupplement == $"https://ganjoor.net{poem.FullUrl}"))
GanjoorPoem poem = await _context.GanjoorPoems.AsNoTracking().Where(p => p.Id == link.GanjoorPostId).SingleOrDefaultAsync();
if (poem != null)
{
var tags = item.Tags.Where(t => t.RTagId == ganjoorlinkTagType.Id && t.ValueSupplement == $"https://ganjoor.net{poem.FullUrl}").ToList();
foreach (var tag in tags)
var item = await _context.Items.Include(i => i.Tags).Where(i => i.Id == link.ItemId).SingleAsync();
bool itemNeedsUpdate = false;
RTag ganjoorlinkTagType = await _context.Tags.AsNoTracking().Where(a => a.NameInEnglish == "Ganjoor Link").SingleAsync();
if (item.Tags.Any(t => t.RTagId == ganjoorlinkTagType.Id && t.ValueSupplement == $"https://ganjoor.net{poem.FullUrl}"))
{
item.Tags.Remove(tag);
var tags = item.Tags.Where(t => t.RTagId == ganjoorlinkTagType.Id && t.ValueSupplement == $"https://ganjoor.net{poem.FullUrl}").ToList();
foreach (var tag in tags)
{
item.Tags.Remove(tag);
}
itemNeedsUpdate = true;
}
itemNeedsUpdate = true;
}
RTag ganjoorTOCTagType = await _context.Tags.AsNoTracking().Where(a => a.NameInEnglish == "Title in TOC").SingleAsync();
if (item.Tags.Any(t => t.RTagId == ganjoorTOCTagType.Id && t.Value == poem.FullTitle))
{
var tags = item.Tags.Where(t => t.RTagId == ganjoorTOCTagType.Id && t.Value == poem.FullTitle).ToList();
foreach (var tag in tags)
RTag ganjoorTOCTagType = await _context.Tags.AsNoTracking().Where(a => a.NameInEnglish == "Title in TOC").SingleAsync();
if (item.Tags.Any(t => t.RTagId == ganjoorTOCTagType.Id && t.Value == poem.FullTitle))
{
item.Tags.Remove(tag);
var tags = item.Tags.Where(t => t.RTagId == ganjoorTOCTagType.Id && t.Value == poem.FullTitle).ToList();
foreach (var tag in tags)
{
item.Tags.Remove(tag);
}
itemNeedsUpdate = true;
}
if (itemNeedsUpdate)
{
_context.Update(item);
}
itemNeedsUpdate = true;
}
if (itemNeedsUpdate)
{
_context.Update(item);
}
}
_context.Remove(link);
@ -3532,39 +3536,6 @@ namespace RMuseum.Services.Implementation
.Where(l => l.Id == id)
.SingleAsync();
GanjoorPoem poem = await _context.GanjoorPoems.AsNoTracking().Where(p => p.Id == link.GanjoorPostId).SingleOrDefaultAsync();
if(poem != null)
{
var item = await _context.Items.Include(i => i.Tags).Where(i => i.Id == link.ItemId).SingleAsync();
bool itemNeedsUpdate = false;
RTag ganjoorlinkTagType = await _context.Tags.AsNoTracking().Where(a => a.NameInEnglish == "Ganjoor Link").SingleAsync();
if(item.Tags.Any(t => t.RTagId == ganjoorlinkTagType.Id && t.ValueSupplement == $"https://ganjoor.net{poem.FullUrl}"))
{
var tags = item.Tags.Where(t => t.RTagId == ganjoorlinkTagType.Id && t.ValueSupplement == $"https://ganjoor.net{poem.FullUrl}").ToList();
foreach (var tag in tags)
{
item.Tags.Remove(tag);
}
itemNeedsUpdate = true;
}
RTag ganjoorTOCTagType = await _context.Tags.AsNoTracking().Where(a => a.NameInEnglish == "Title in TOC").SingleAsync();
if (item.Tags.Any(t => t.RTagId == ganjoorTOCTagType.Id && t.Value == poem.FullTitle))
{
var tags = item.Tags.Where(t => t.RTagId == ganjoorTOCTagType.Id && t.Value == poem.FullTitle).ToList();
foreach (var tag in tags)
{
item.Tags.Remove(tag);
}
itemNeedsUpdate = true;
}
if(itemNeedsUpdate)
{
_context.Update(item);
}
}
_context.Remove(link);
await _context.SaveChangesAsync();
return new RServiceResult<bool>(true);