using System; using EntityFrameWorkLib; using Model; using DbDataManager.Mapper; using Microsoft.EntityFrameworkCore.Metadata.Internal; using System.Data.SqlTypes; namespace DbDataManager { public class PlayersManager : IPlayersManager { private TrekContext trekContext; public async Task AddItem(Player? item) { if (item == null) { return null; } var player = await trekContext.AddAsync(item); await trekContext.SaveChangesAsync(); return player.Entity; } public async Task DeleteItem(Player? item) { if (item == null) { return false; } var deleteItem = trekContext.Remove(item); await trekContext.SaveChangesAsync(); return true; } public async Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false) { IEnumerable players = trekContext.Players.Skip(index * count) .Take(count) .OrderBy(players => orderingPropertyName) .Select(players => players.ToModel()); return players; } public Task> GetItemsById(int id) { return trekContext.Players.Select(player => player.ToModel()).GetItemsWithFilterAndOrdering(player => filterById(player, id),0,1); } private Func filterById = (player, id) => player.Id.Equals(id); public Task> GetItemsByPseudo(string charPseudo) { return trekContext.Players.Select(player => player.ToModel()).GetItemsWithFilterAndOrdering(player => filterByPseudo(player, charPseudo), 0, trekContext.Players.Count()); } private Func filterByPseudo = (player, substring) => player.Pseudo.Contains(substring, StringComparison.InvariantCultureIgnoreCase); public Task GetNbItems() { return Task.FromResult(trekContext.Players.Count()); } public Task GetNbItemsByPseudo(string charPseudo) { return trekContext.Players.Select(player => player.ToModel()).GetNbItemsWithFilter(player => filterByPseudo(player, charPseudo)); } public Task UpdateItem(Player? oldItem, Player? newItem) { if (oldItem == null || newItem == null) return Task.FromResult(default(Player)); if (!trekContext.Players.Select(player => player.ToModel()).Contains(oldItem)) { return Task.FromResult(default(Player)); } trekContext.Players.Remove(oldItem!.ToEntity()); trekContext.Players.AddAsync(newItem!.ToEntity()); return Task.FromResult(newItem); } } }