using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using Comal.Classes; using InABox.Core; namespace Comal.Stores { internal class ModuleTrackingStore : BaseStore { private static readonly ConcurrentBag _cache = new(); protected override void BeforeSave(ModuleTracking entity) { base.BeforeSave(entity); var tracking = _cache.FirstOrDefault(x => Equals(x.User.ID, entity.User.ID) && string.Equals(x.Module, entity.Module) && DateTime.Equals(x.Date, entity.Date)); if (tracking == null) { tracking = Provider.Load( new Filter(x => x.User.ID).IsEqualTo(entity.User.ID) .And(x => x.Module).IsEqualTo(entity.Module) .And(x => x.Date).IsEqualTo(entity.Date) ).FirstOrDefault(); if (tracking != null) _cache.Add(tracking); } if (tracking == null) { tracking = entity; _cache.Add(tracking); } else { tracking.ActiveTime += entity.ActiveTime; tracking.IdleTime += entity.IdleTime; tracking.Clicks += entity.Clicks; tracking.Keys += entity.Keys; } Provider.Save(tracking); } protected override void OnSave(ModuleTracking entity, ref string auditnote) { // Consolidated Saving happend in BeforeSave - nothing to see here //base.OnSave(entity); } protected override void OnSave(IEnumerable entities, ref string auditnote) { //base.OnSave(entities); } } }