using SQLite; using System; using System.Collections.Generic; using System.Linq; using WowUp.WPF.Entities; using WowUp.WPF.Repositories.Base; using WowUp.WPF.Repositories.Contracts; namespace WowUp.WPF.Repositories { public class PreferenceRepository : BaseEntityRepository, IPreferenceRepository { public event PreferenceEventHandler PreferenceUpdated; public Preference Create(string key, string value) { var pref = new Preference { Key = key, Value = value }; SaveItem(pref); return pref; } public Preference FindByKey(string key) { return Query(table => table.FirstOrDefault(p => p.Key == key)); } public IList FindAllByKey(IEnumerable keys) { return Query(table => table.Where(p => keys.Contains(p.Key))).ToList(); } public bool AddItem(Preference item) { return SaveItem(item); } public bool SaveItem(Preference item) { lock (_collisionLock) { item.UpdatedAt = DateTime.UtcNow; if (item.Id != 0) { _database.Update(item); } else { _database.Insert(item); } } PreferenceUpdated?.Invoke(this, new Models.Events.PreferenceEventArgs(item)); return true; } public bool UpdateItem(Preference item) { lock (_collisionLock) { item.UpdatedAt = DateTime.UtcNow; if (item.Id != 0) { _database.Update(item); } else { _database.Insert(item); } } return true; } public bool DeleteItem(Preference preference) { throw new NotImplementedException(); } public IEnumerable Query(Func, TableQuery> action) { lock (_collisionLock) { var query = action.Invoke(_database.Table()); return query.AsEnumerable(); } } public Preference Query(Func, Preference> action) { lock (_collisionLock) { return action.Invoke(_database.Table()); } } public bool AddItems(IEnumerable items) { return SaveItems(items); } public bool SaveItems(IEnumerable items) { lock (_collisionLock) { foreach (var item in items) { item.UpdatedAt = DateTime.UtcNow; if (item.Id != 0) { _database.Update(item); } else { _database.Insert(item); } } } return true; } public bool DeleteItems(IEnumerable addons) { throw new NotImplementedException(); } } }