using EntityFrameworkLib; using EntityFrameworkLib.Mappers; using Model; using Shared; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DBDataManager { public class DBChampionManager : IChampionsManager { private readonly LolContext context; public DBChampionManager() { } public DBChampionManager(LolContext context) { this.context = context; } async Task IGenericDataManager.AddItem(Champion? item) { if(item == null) { return null; } var additem = await context.AddAsync(item); await context.SaveChangesAsync(); return additem.Entity; } async Task IGenericDataManager.DeleteItem(Champion? item) { if(item == null) { return false; } context.Remove(item); await context.SaveChangesAsync(); return true; } async Task> IGenericDataManager.GetItems(int index, int count, string? orderingPropertyName, bool descending) { IEnumerable champions = context.Champions.Skip(index * count) .Take(count) .OrderBy(champions => orderingPropertyName) .Select(champions => champions.toModel()); return champions; } private Func filterByCharacteristic = (champ, charName) => champ.Characteristics.Keys.Any(k => k.Contains(charName, StringComparison.InvariantCultureIgnoreCase)); Task> IChampionsManager.GetItemsByCharacteristic(string charName, int index, int count, string? orderingPropertyName, bool descending) => context.Champions.toPocos().GetItemsWithFilterAndOrdering( champions => filterByCharacteristic(champions, charName), index, count, orderingPropertyName, descending); private Func filterByClass = (champ, championClass) => champ.Class == championClass; Task> IChampionsManager.GetItemsByClass(ChampionClass championClass, int index, int count, string? orderingPropertyName, bool descending) => context.Champions.toPocos().GetItemsWithFilterAndOrdering( champions => filterByClass(champions, championClass), index, count, orderingPropertyName, descending); private Func filterByName = (champ, substring) => champ.Name.Contains(substring, StringComparison.InvariantCultureIgnoreCase); Task> IGenericDataManager.GetItemsByName(string substring, int index, int count, string? orderingPropertyName, bool descending) => context.Champions.toPocos().GetItemsWithFilterAndOrdering( champions => filterByName(champions, substring), index, count, orderingPropertyName, descending); Task> IChampionsManager.GetItemsByRunePage(RunePage? runePage, int index, int count, string? orderingPropertyName, bool descending) { throw new NotImplementedException(); } private Func filterBySkill = (champ, skill) => skill != null && champ.Skills.Contains(skill!); Task> IChampionsManager.GetItemsBySkill(Skill? skill, int index, int count, string? orderingPropertyName, bool descending) => context.Champions.toPocos().GetItemsWithFilterAndOrdering( champions => filterBySkill(champions, skill), index, count, orderingPropertyName, descending); private static Func filterBySkillSubstring = (champ, skill) => champ.Skills.Any(s => s.Name.Contains(skill, StringComparison.InvariantCultureIgnoreCase)); Task> IChampionsManager.GetItemsBySkill(string skill, int index, int count, string? orderingPropertyName, bool descending) => context.Champions.toPocos().GetItemsWithFilterAndOrdering( champions => filterBySkillSubstring(champions, skill), index, count, orderingPropertyName, descending); Task IGenericDataManager.GetNbItems() => Task.FromResult(context.Champions.Count()); Task IChampionsManager.GetNbItemsByCharacteristic(string charName) => context.Champions.toPocos().GetNbItemsWithFilter( champions => filterByCharacteristic(champions, charName)); Task IChampionsManager.GetNbItemsByClass(ChampionClass championClass) => context.Champions.toPocos().GetNbItemsWithFilter( champions => filterByClass(champions, championClass)); Task IGenericDataManager.GetNbItemsByName(string substring) => context.Champions.toPocos().GetNbItemsWithFilter( champions => filterByName(champions, substring)); Task IChampionsManager.GetNbItemsByRunePage(RunePage? runePage) { throw new NotImplementedException(); } Task IChampionsManager.GetNbItemsBySkill(Skill? skill) => context.Champions.toPocos().GetNbItemsWithFilter( champions => filterBySkill(champions, skill)); Task IChampionsManager.GetNbItemsBySkill(string skill) => context.Champions.toPocos().GetNbItemsWithFilter( champions => filterBySkillSubstring(champions, skill)); Task IGenericDataManager.UpdateItem(Champion? oldItem, Champion? newItem) { throw new NotImplementedException(); } //=> context.Champions.toPocos().UpdateItem(oldItem, newItem); } }