using Disco.Data.Repository; using Disco.Models.Repository; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; namespace Disco.Services.Users.UserFlags { internal class Cache { private ConcurrentDictionary cache; public Cache(DiscoDataContext Database) { Initialize(Database); } public void ReInitialize(DiscoDataContext Database) { Initialize(Database); } private void Initialize(DiscoDataContext Database) { // Queues from Database var flags = Database.UserFlags.ToList(); // Add Queues to In-Memory Cache cache = new ConcurrentDictionary(flags.Select(f => new KeyValuePair(f.Id, (f, f.Permissions)))); } public (UserFlag flag, FlagPermission permission) GetUserFlag(int UserFlagId) { if (cache.TryGetValue(UserFlagId, out var item)) return item; else return (null, null); } public List<(UserFlag flag, FlagPermission permission)> GetUserFlags() { return cache.Values.ToList(); } public void AddOrUpdate(UserFlag UserFlag) { var value = (UserFlag, UserFlag.Permissions); cache.AddOrUpdate(UserFlag.Id, value, (key, existingItem) => value); } public void Remove(int UserFlagId) { cache.TryRemove(UserFlagId, out _); } } }