using System; using EntityFrameWorkLib; using Model; using Shared; namespace DbDatamanager { public class ChampionManager: IChampionsManager { private LolContext lolContext; public async Task AddItem(Champion? item) { if(item == null) { return null; } var addItem = await lolContext.AddAsync(item); await lolContext.SaveChangesAsync(); return addItem.Entity; } public async Task DeleteItem(Champion? item) { if (item == null) { return false; } var deleteItem = lolContext.Remove(item); lolContext.SaveChanges(); return true; } public async Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false) { IEnumerable champions = lolContext.Champions.Skip(index * count) .Take(count) .OrderBy(champions => orderingPropertyName) .Select(champions => champions.ToPoco()); return champions; } public Task> GetItemsByName(string substring, int index, int count, string? orderingPropertyName = null, bool descending = false) => lolContext.Champions.Select(champion=> champion.ToPoco()).GetItemsWithFilterAndOrdering(champ => filterByName(champ, substring), index, count, orderingPropertyName, descending); public Task> GetItemsByRunePage(RunePage? runePage, int index, int count, string? orderingPropertyName = null, bool descending = false) { throw new NotImplementedException(); } public Task> GetItemsBySkill(Skill? skill, int index, int count, string? orderingPropertyName = null, bool descending = false) { throw new NotImplementedException(); } public Task> GetItemsBySkill(string skill, int index, int count, string? orderingPropertyName = null, bool descending = false) { throw new NotImplementedException(); } public async Task GetNbItems() { var nbItems = lolContext.Champions.Count(); return nbItems; } private Func filterByName = (champ, substring) => champ.Name.Contains(substring, StringComparison.InvariantCultureIgnoreCase); public Task GetNbItemsByName(string substring) => lolContext.Champions.GetNbItemsWithFilter(champ => filterByName(champ.ToPoco(), substring)); public Task UpdateItem(Champion? oldItem, Champion? newItem) => lolContext.Champions.Select(champions => champions.ToPoco()).ToList().UpdateItem(oldItem, newItem); //Pas fait => mettre en place skillentity etc... private Func filterByCharacteristic = (champ, charName) => champ.Characteristics.Keys.Any(k => k.Contains(charName, StringComparison.InvariantCultureIgnoreCase)); public Task> GetItemsByCharacteristic(string charName, int index, int count, string? orderingPropertyName = null, bool descending = false) => lolContext.Champions.Select(champion=>champion.ToPoco()).GetItemsWithFilterAndOrdering( champ => filterByCharacteristic(champ, charName), index, count, orderingPropertyName, descending); private Func filterByClass = (champ, championClass) => champ.Class == championClass; public Task> GetItemsByClass(ChampionClass championClass, int index, int count, string? orderingPropertyName = null, bool descending = false) => lolContext.Champions.Select(champion=>champion.ToPoco()).GetItemsWithFilterAndOrdering( champ => filterByClass(champ, championClass), index, count, orderingPropertyName, descending); public Task GetNbItemsByRunePage(RunePage? runePage) { throw new NotImplementedException(); } public Task GetNbItemsBySkill(Skill? skill) { throw new NotImplementedException(); } public Task GetNbItemsBySkill(string skill) { throw new NotImplementedException(); } public Task GetNbItemsByCharacteristic(string charName) => lolContext.Champions.GetNbItemsWithFilter(champ => filterByCharacteristic(champ.ToPoco(), charName)); public Task GetNbItemsByClass(ChampionClass championClass) => lolContext.Champions.GetNbItemsWithFilter(champ => filterByClass(champ.ToPoco(), championClass)); } }