This commit is contained in:
2021-06-02 20:02:20 +01:00
parent 7e5940a542
commit c21aa5c791
51 changed files with 1361 additions and 214 deletions
@@ -231,41 +231,41 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
IndexStatsData stats = new IndexStatsData();
// Index entries required for activity.
List<IndexEntryData> indexEntries = GetEntriesForIndex(indexData);
List<IndexEntryData> indexEntryDataList = GetEntriesForIndex(indexData);
// Retrieve existing index entries for the item.
List<SaxActivityIndex> itemIndexEntries = internals.ActivityMgr.GetActivityIndexListForItem(indexData.ItemId);
foreach (SaxActivityIndex itemIndexEntry in itemIndexEntries)
List<SaxActivityIndex> indexEntries = internals.ActivityMgr.GetActivityIndexListForItem(indexData.ItemId);
foreach (SaxActivityIndex indexEntry in indexEntries)
{
// Is the index entry still required.
// Logic only compares the Ids (item, sport, region) and then updates the effective date if a match is found.
// Based on the fact that and change in the effective date will impact all entries in the index for the item
// and this approach minimises the number of updates required as Ids can't be changed in code (protected setters).
IndexEntryData indexEntry = indexEntries.Find(item => item.MatchesIds(itemIndexEntry));
if (indexEntry != null)
IndexEntryData indexEntrydata = indexEntryDataList.Find(item => item.MatchesIds(indexEntry));
if (indexEntrydata != null)
{
// Match found - if the effective date differs, update it.
if (!itemIndexEntry.EffectiveOn.Equals(indexEntry.EffectiveOn))
if (!indexEntry.EffectiveOn.Equals(indexEntrydata.EffectiveOn))
{
itemIndexEntry.EffectiveOn = indexEntry.EffectiveOn;
if (internals.ActivityMgr.UpdateActivityIndex(itemIndexEntry, dbUpdateInfo))
indexEntry.EffectiveOn = indexEntrydata.EffectiveOn;
if (internals.ActivityMgr.UpdateActivityIndex(indexEntry, dbUpdateInfo))
stats.EntriesUpdated++;
else SaLogger.Warn(fn + " Failed to update Activity Index - " + internals.ActivityMgr.ErrorStateMessage);
}
// Remove the entry from the 'required' list.
// Entries remaining in this list will be created.
indexEntries.Remove(indexEntry);
indexEntryDataList.Remove(indexEntrydata);
}
else
{
// Index entry no longer required.
if (internals.ActivityMgr.DeleteActivityIndex(itemIndexEntry, dbUpdateInfo))
if (internals.ActivityMgr.DeleteActivityIndex(indexEntry, dbUpdateInfo))
stats.EntriesDeleted++;
else SaLogger.Warn(fn + " Failed to delete Activity Index - " + internals.ActivityMgr.ErrorStateMessage);
}
}
// The remaining required Index entries will be created.
foreach (IndexEntryData indexEntry in indexEntries)
foreach (IndexEntryData indexEntry in indexEntryDataList)
{
SaxActivityIndex itemIndexEntry = internals.ActivityMgr.CreateActivityIndex(indexEntry.ItemId, indexEntry.SportId, indexEntry.RegionId, indexEntry.EffectiveOn);
if (internals.ActivityMgr.InsertActivityIndex(itemIndexEntry, dbUpdateInfo))