using EFlib; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Tokens; using Model; namespace EFManager { public class ManagerChampion : IChampionsManager { public SQLiteContext context = new SQLiteContext(); public async Task AddItem(Champion? item) { if (item == null) return null; await context.AddAsync(item.toEF()); await context.SaveChangesAsync(); return item; } public Task DeleteItem(Champion? item) { if (item == null) return false; context.Remove(item.toEF()); await context.SaveChangesAsync(); return true; } public Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false) { IQueryable query = Champions.Skip(index).Take(count); if (!string.IsNullOrEmpty(orderingPropertyName)) { query = descending ? query.OrderByDescending(c => EF.Property(c, orderingPropertyName)) : query.OrderBy(c => EF.Property(c, orderingPropertyName)); } return await query.ToListAsync(); } public Task> GetItemsByCharacteristic(string charName, int index, int count, string? orderingPropertyName = null, bool descending = false) { IQueryable query = Champions .Where(c => c.Characteristics.ContainsKey(charName)) .Skip(index) .Take(count); if (!string.IsNullOrEmpty(orderingPropertyName)) { query = descending ? query.OrderByDescending(c => EF.Property(c, orderingPropertyName)) : query.OrderBy(c => EF.Property(c, orderingPropertyName)); } return await query.ToListAsync(); } public Task> GetItemsByClass(ChampionClass championClass, int index, int count, string? orderingPropertyName = null, bool descending = false) { IQueryable query = Champions .Where(c => c.Class == championClass) .Skip(index) .Take(count); if (!string.IsNullOrEmpty(orderingPropertyName)) { query = descending ? query.OrderByDescending(c => EF.Property(c, orderingPropertyName)) : query.OrderBy(c => EF.Property(c, orderingPropertyName)); } return await query.ToListAsync(); } public Task> GetItemsByName(string substring, int index, int count, string? orderingPropertyName = null, bool descending = false) { IQueryable query = Champions .Where(c => c.Name.Contains(substring)) .Skip(index) .Take(count); if (!string.IsNullOrEmpty(orderingPropertyName)) { query = descending ? query.OrderByDescending(c => EF.Property(c, orderingPropertyName)) : query.OrderBy(c => EF.Property(c, orderingPropertyName)); } return await query.ToListAsync(); } public Task> GetItemsByRunePage(RunePage? runePage, int index, int count, string? orderingPropertyName = null, bool descending = false) { IQueryable query = Champions; if (runePage != null) { query = query.Where(c => c.RunePageId == runePage.Id); } query = query.Skip(index).Take(count); if (!string.IsNullOrEmpty(orderingPropertyName)) { query = descending ? query.OrderByDescending(c => EF.Property(c, orderingPropertyName)) : query.OrderBy(c => EF.Property(c, orderingPropertyName)); } return await query.ToListAsync(); } 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 Task GetNbItems() { throw new NotImplementedException(); } public Task GetNbItemsByCharacteristic(string charName) { return await context.Where(c => c.Characteristics.Any(ch => ch.Name == charName)).CountAsync(); } public Task GetNbItemsByClass(ChampionClass championClass) { throw new NotImplementedException(); } public Task GetNbItemsByName(string substring) { throw new NotImplementedException(); } 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 UpdateItem(Champion? oldItem, Champion? newItem) { throw new NotImplementedException(); } } }