#421 geo tag suggestion

This commit is contained in:
Hamid Reza Mohammadi 2026-09-25 15:38:22 +03:30
parent f5f6ddf5b1
commit ce05b9be0e
3 changed files with 102 additions and 1 deletions

View File

@ -283,6 +283,48 @@ namespace GanjooRazor.Areas.User.Pages
correction.PoemSummary = currentCorrection.SummaryReviewResult == CorrectionReviewResult.Approved && currentCorrection.PoemSummary != null ? currentCorrection.OriginalPoemSummary ?? "" : null; correction.PoemSummary = currentCorrection.SummaryReviewResult == CorrectionReviewResult.Approved && currentCorrection.PoemSummary != null ? currentCorrection.OriginalPoemSummary ?? "" : null;
correction.OriginalPoemSummary = currentCorrection.SummaryReviewResult == CorrectionReviewResult.Approved && currentCorrection.PoemSummary != null ? currentCorrection.PoemSummary : null; correction.OriginalPoemSummary = currentCorrection.SummaryReviewResult == CorrectionReviewResult.Approved && currentCorrection.PoemSummary != null ? currentCorrection.PoemSummary : null;
if (currentCorrection.GeoDateTags != null)
{
var geoDateTagsRollback = new List<GanjoorPoemGeoDateTagCorrection>();
foreach (var geoTag in currentCorrection.GeoDateTags.Where(g => g.Result == CorrectionReviewResult.Approved))
{
if (geoTag.MarkForDelete)
{
// the original request deleted an existing tag - undo that by re-adding a tag with
// the same data, which was snapshotted onto this same record when it was approved
// (LocationId/LunarYear/etc. are otherwise unused for a pure delete-request)
geoDateTagsRollback.Add(new GanjoorPoemGeoDateTagCorrection()
{
CoupletIndex = geoTag.CoupletIndex,
MarkForDelete = false,
LocationId = geoTag.LocationId,
LunarYear = geoTag.LunarYear,
LunarMonth = geoTag.LunarMonth,
LunarDay = geoTag.LunarDay,
PersonId = geoTag.PersonId,
IgnoreInCategory = geoTag.IgnoreInCategory,
SuggestionNote = $"برگشت حذف برچسب جغرافیایی/تاریخی با کد {correctionId}"
});
}
else if (geoTag.ExistingTagId != null)
{
// the original request added a new tag - undo that by requesting deletion of the
// live tag it produced (its id was recorded onto ExistingTagId when approved)
geoDateTagsRollback.Add(new GanjoorPoemGeoDateTagCorrection()
{
CoupletIndex = geoTag.CoupletIndex,
MarkForDelete = true,
ExistingTagId = geoTag.ExistingTagId,
SuggestionNote = $"برگشت افزودن برچسب جغرافیایی/تاریخی با کد {correctionId}"
});
}
}
if (geoDateTagsRollback.Count > 0)
{
correction.GeoDateTags = geoDateTagsRollback.ToArray();
}
}
correction.Note = $"برگشت تصحیح با کد {correctionId}"; correction.Note = $"برگشت تصحیح با کد {correctionId}";
if(!string.IsNullOrEmpty(currentCorrection.Note)) if(!string.IsNullOrEmpty(currentCorrection.Note))
{ {

View File

@ -243,6 +243,48 @@ namespace GanjooRazor.Areas.User.Pages
correction.PoemSummary = currentCorrection.SummaryReviewResult == CorrectionReviewResult.Approved && currentCorrection.PoemSummary != null ? currentCorrection.OriginalPoemSummary ?? "" : null; correction.PoemSummary = currentCorrection.SummaryReviewResult == CorrectionReviewResult.Approved && currentCorrection.PoemSummary != null ? currentCorrection.OriginalPoemSummary ?? "" : null;
correction.OriginalPoemSummary = currentCorrection.SummaryReviewResult == CorrectionReviewResult.Approved && currentCorrection.PoemSummary != null ? currentCorrection.PoemSummary : null; correction.OriginalPoemSummary = currentCorrection.SummaryReviewResult == CorrectionReviewResult.Approved && currentCorrection.PoemSummary != null ? currentCorrection.PoemSummary : null;
if (currentCorrection.GeoDateTags != null)
{
var geoDateTagsRollback = new List<GanjoorPoemGeoDateTagCorrection>();
foreach (var geoTag in currentCorrection.GeoDateTags.Where(g => g.Result == CorrectionReviewResult.Approved))
{
if (geoTag.MarkForDelete)
{
// the original request deleted an existing tag - undo that by re-adding a tag with
// the same data, which was snapshotted onto this same record when it was approved
// (LocationId/LunarYear/etc. are otherwise unused for a pure delete-request)
geoDateTagsRollback.Add(new GanjoorPoemGeoDateTagCorrection()
{
CoupletIndex = geoTag.CoupletIndex,
MarkForDelete = false,
LocationId = geoTag.LocationId,
LunarYear = geoTag.LunarYear,
LunarMonth = geoTag.LunarMonth,
LunarDay = geoTag.LunarDay,
PersonId = geoTag.PersonId,
IgnoreInCategory = geoTag.IgnoreInCategory,
SuggestionNote = $"برگشت حذف برچسب جغرافیایی/تاریخی با کد {correctionId}"
});
}
else if (geoTag.ExistingTagId != null)
{
// the original request added a new tag - undo that by requesting deletion of the
// live tag it produced (its id was recorded onto ExistingTagId when approved)
geoDateTagsRollback.Add(new GanjoorPoemGeoDateTagCorrection()
{
CoupletIndex = geoTag.CoupletIndex,
MarkForDelete = true,
ExistingTagId = geoTag.ExistingTagId,
SuggestionNote = $"برگشت افزودن برچسب جغرافیایی/تاریخی با کد {correctionId}"
});
}
}
if (geoDateTagsRollback.Count > 0)
{
correction.GeoDateTags = geoDateTagsRollback.ToArray();
}
}
correction.Note = $"برگشت تصحیح با کد {correctionId}"; correction.Note = $"برگشت تصحیح با کد {correctionId}";
if (!string.IsNullOrEmpty(currentCorrection.Note)) if (!string.IsNullOrEmpty(currentCorrection.Note))
{ {

View File

@ -680,12 +680,23 @@ namespace RMuseum.Services.Implementation
if (dbGeoDateTag.MarkForDelete) if (dbGeoDateTag.MarkForDelete)
{ {
// approving a delete-suggestion removes the existing, already-approved tag it targets // approving a delete-suggestion removes the existing, already-approved tag it targets.
// before removing it, snapshot its data onto this correction row itself (reusing the
// already-existing LocationId/LunarYear/etc. columns, which are otherwise unused for a
// pure delete-request) - this is what lets a later "undo this correction" roll the
// deletion back, since the live PoemGeoDateTag row won't exist to read from any more
if (dbGeoDateTag.ExistingTagId != null) if (dbGeoDateTag.ExistingTagId != null)
{ {
var existingTag = await _context.PoemGeoDateTags.Where(t => t.Id == dbGeoDateTag.ExistingTagId).SingleOrDefaultAsync(); var existingTag = await _context.PoemGeoDateTags.Where(t => t.Id == dbGeoDateTag.ExistingTagId).SingleOrDefaultAsync();
if (existingTag != null) if (existingTag != null)
{ {
dbGeoDateTag.LocationId = existingTag.LocationId;
dbGeoDateTag.LunarYear = existingTag.LunarYear;
dbGeoDateTag.LunarMonth = existingTag.LunarMonth;
dbGeoDateTag.LunarDay = existingTag.LunarDay;
dbGeoDateTag.PersonId = existingTag.PersonId;
dbGeoDateTag.IgnoreInCategory = existingTag.IgnoreInCategory;
_context.PoemGeoDateTags.Remove(existingTag); _context.PoemGeoDateTags.Remove(existingTag);
} }
} }
@ -724,6 +735,12 @@ namespace RMuseum.Services.Implementation
}; };
newTag.LunarDateTotalNumber = _PrepareLunarDateTotalNumber(newTag); newTag.LunarDateTotalNumber = _PrepareLunarDateTotalNumber(newTag);
_context.PoemGeoDateTags.Add(newTag); _context.PoemGeoDateTags.Add(newTag);
await _context.SaveChangesAsync(); // need its Id below
// record which live tag this correction produced - repurposing ExistingTagId (normally
// only meaningful for a delete-request) so that "undo this correction" can later find
// and remove this exact tag, the same way it removes a newly-added verse or a title change
dbGeoDateTag.ExistingTagId = newTag.Id;
} }
} }
} }