ModuleTrackingStore.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System;
  2. using System.Collections.Concurrent;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using Comal.Classes;
  6. using InABox.Core;
  7. namespace Comal.Stores
  8. {
  9. internal class ModuleTrackingStore : BaseStore<ModuleTracking>
  10. {
  11. private static readonly ConcurrentBag<ModuleTracking> _cache = new();
  12. protected override void BeforeSave(ModuleTracking entity)
  13. {
  14. base.BeforeSave(entity);
  15. var tracking = _cache.FirstOrDefault(x =>
  16. Equals(x.User.ID, entity.User.ID) && string.Equals(x.Module, entity.Module) && DateTime.Equals(x.Date, entity.Date));
  17. if (tracking == null)
  18. {
  19. tracking = Provider.Load(
  20. new Filter<ModuleTracking>(x => x.User.ID).IsEqualTo(entity.User.ID)
  21. .And(x => x.Module).IsEqualTo(entity.Module)
  22. .And(x => x.Date).IsEqualTo(entity.Date)
  23. ).FirstOrDefault();
  24. if (tracking != null)
  25. _cache.Add(tracking);
  26. }
  27. if (tracking == null)
  28. {
  29. tracking = entity;
  30. _cache.Add(tracking);
  31. }
  32. else
  33. {
  34. tracking.ActiveTime += entity.ActiveTime;
  35. tracking.IdleTime += entity.IdleTime;
  36. tracking.Clicks += entity.Clicks;
  37. tracking.Keys += entity.Keys;
  38. }
  39. Provider.Save(tracking);
  40. }
  41. protected override void OnSave(ModuleTracking entity, ref string auditnote)
  42. {
  43. // Consolidated Saving happend in BeforeSave - nothing to see here
  44. //base.OnSave(entity);
  45. }
  46. protected override void OnSave(IEnumerable<ModuleTracking> entities, ref string auditnote)
  47. {
  48. //base.OnSave(entities);
  49. }
  50. }
  51. }