diff --git a/EntityFramework_LoL/Sources/ApiLol/ApiLol.csproj b/EntityFramework_LoL/Sources/ApiLol/ApiLol.csproj index 8cb33cf..f4484e6 100644 --- a/EntityFramework_LoL/Sources/ApiLol/ApiLol.csproj +++ b/EntityFramework_LoL/Sources/ApiLol/ApiLol.csproj @@ -10,4 +10,23 @@ + + + + + + + + + + + + + + + + + + + diff --git a/EntityFramework_LoL/Sources/ApiLol/Controllers/ChampionController.cs b/EntityFramework_LoL/Sources/ApiLol/Controllers/ChampionController.cs index ae2d93c..ff8f407 100644 --- a/EntityFramework_LoL/Sources/ApiLol/Controllers/ChampionController.cs +++ b/EntityFramework_LoL/Sources/ApiLol/Controllers/ChampionController.cs @@ -1,4 +1,5 @@ using System; +using EFLib; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -12,61 +13,52 @@ namespace ApiLol.Controllers public class ChampionController : ControllerBase { private readonly ILogger _logger; + private List champions = new List(); public ChampionController(ILogger logger) { _logger = logger; - } - - - // GET: api/champion - [HttpGet] - public ActionResult> Get() - { - List champions = new List(); - champions.Add(new ChampionDTO + champions.Add(new ChampionEntity { Id = 1, Name = "Aurel", Bio = "Trop joli", - Icon = "Moi" + Icon = "Moi", + champClass = Model.ChampionClass.Tank }); - champions.Add(new ChampionDTO + champions.Add(new ChampionEntity { Id = 2, Name = "Mathilde", Bio = "Elle est reloue", - Icon = "Macheval" + Icon = "Macheval", + champClass = Model.ChampionClass.Assassin }); - return Ok(champions); + } + + + // GET: api/champion + [HttpGet] + public ActionResult> Get() + { + IEnumerable champs = new List(); + foreach(ChampionEntity arg in champions) + { + champs.Append(arg.ToDto()); + } + return Ok(champs); } // GET api/values/5 [HttpGet("{id}")] public ActionResult Get(int id) { - List champions = new List(); - champions.Add(new ChampionDTO - { - Id = 1, - Name = "Aurel", - Bio = "Trop joli", - Icon = "Moi" - }); - champions.Add(new ChampionDTO - { - Id = 2, - Name = "Mathilde", - Bio = "Elle est reloue", - Icon = "Macheval" - }); - - ChampionDTO? champion = champions.SingleOrDefault((ChampionDTO arg) => arg.Id == id); - if (champion == null) + ChampionDTO? champion = champions.SingleOrDefault((ChampionEntity arg) => arg.Id == id)?.ToDto(); + if (champion != null) { - return BadRequest(); + return Ok(champion); } - return Ok(champion); + return BadRequest(); } // POST api/values diff --git a/EntityFramework_LoL/Sources/ApiLol/ChampionDTO.cs b/EntityFramework_LoL/Sources/ApiLol/DTO/ChampionDTO.cs similarity index 77% rename from EntityFramework_LoL/Sources/ApiLol/ChampionDTO.cs rename to EntityFramework_LoL/Sources/ApiLol/DTO/ChampionDTO.cs index 0038870..28fd292 100644 --- a/EntityFramework_LoL/Sources/ApiLol/ChampionDTO.cs +++ b/EntityFramework_LoL/Sources/ApiLol/DTO/ChampionDTO.cs @@ -1,4 +1,5 @@ using System; +using Model; namespace ApiLol { public class ChampionDTO @@ -10,6 +11,8 @@ namespace ApiLol public string Icon { get; set; } public string Bio { get; set; } + + public ChampionClass champClass { get; set; } } } diff --git a/EntityFramework_LoL/Sources/ApiLol/Mapping/ChampionMapper.cs b/EntityFramework_LoL/Sources/ApiLol/Mapping/ChampionMapper.cs new file mode 100644 index 0000000..83f9382 --- /dev/null +++ b/EntityFramework_LoL/Sources/ApiLol/Mapping/ChampionMapper.cs @@ -0,0 +1,41 @@ +using System; +using EFLib; + +namespace ApiLol +{ + public static class ChampionMapper + { + public static ChampionDTO ToDto(this ChampionEntity champion) + { + if (champion == null) + { + throw new NullReferenceException(); + } + return new ChampionDTO + { + Name = champion.Name, + Bio = champion.Bio, + Icon = champion.Icon, + Id = champion.Id, + champClass = champion.champClass + }; + } + + public static ChampionEntity ToEntity(this ChampionDTO champion) + { + if (champion == null) + { + throw new NullReferenceException(); + } + return new ChampionEntity + { + Name = champion.Name, + Bio = champion.Bio, + Icon = champion.Icon, + Id = champion.Id, + champClass = champion.champClass + }; + } + } +} + diff --git a/EntityFramework_LoL/Sources/ConsoleApi/Program.cs b/EntityFramework_LoL/Sources/ConsoleApi/Program.cs index 341d42d..f56e562 100644 --- a/EntityFramework_LoL/Sources/ConsoleApi/Program.cs +++ b/EntityFramework_LoL/Sources/ConsoleApi/Program.cs @@ -5,7 +5,7 @@ using static System.Net.WebRequestMethods; HttpClient http = new HttpClient(); //http.BaseAddress = new Uri("https://localhost:7006/"); -//Console.WriteLine(await http.GetStringAsync("https://localhost:7006/api/Champion")); +Console.WriteLine(await http.GetStringAsync("https://localhost:7006/api/Champion")); Console.WriteLine(await http.GetStringAsync("https://localhost:7006/api/Champion/1")); diff --git a/EntityFramework_LoL/Sources/ConsoleDb/Program.cs b/EntityFramework_LoL/Sources/ConsoleDb/Program.cs index 87658d6..0fc628b 100644 --- a/EntityFramework_LoL/Sources/ConsoleDb/Program.cs +++ b/EntityFramework_LoL/Sources/ConsoleDb/Program.cs @@ -4,8 +4,14 @@ using Model; Console.WriteLine("Hello, World!"); + using (var db = new DbDataManager(new EFLib.LolContext())) { - Champion champ = await db.Add(new Model.Champion("marche", Model.ChampionClass.Assassin, "ouii", "yes", "bio")); - Console.WriteLine(champ.Name); -} \ No newline at end of file + IEnumerable champions = await db.ChampionsMgr.GetItems(0, 10); + + foreach (Champion c in champions) + { + Console.WriteLine(c.Name); + } +} + diff --git a/EntityFramework_LoL/Sources/ConsoleDb/oiseaux.db b/EntityFramework_LoL/Sources/ConsoleDb/oiseaux.db index d0c9a2e..2665bcb 100644 Binary files a/EntityFramework_LoL/Sources/ConsoleDb/oiseaux.db and b/EntityFramework_LoL/Sources/ConsoleDb/oiseaux.db differ diff --git a/EntityFramework_LoL/Sources/ConsoleDb/oiseaux.db-shm b/EntityFramework_LoL/Sources/ConsoleDb/oiseaux.db-shm new file mode 100644 index 0000000..fe9ac28 Binary files /dev/null and b/EntityFramework_LoL/Sources/ConsoleDb/oiseaux.db-shm differ diff --git a/EntityFramework_LoL/Sources/ConsoleDb/oiseaux.db-wal b/EntityFramework_LoL/Sources/ConsoleDb/oiseaux.db-wal new file mode 100644 index 0000000..e69de29 diff --git a/EntityFramework_LoL/Sources/DataManagers/ChampChanger.cs b/EntityFramework_LoL/Sources/DataManagers/ChampChanger.cs index 7e5208c..916c90f 100644 --- a/EntityFramework_LoL/Sources/DataManagers/ChampChanger.cs +++ b/EntityFramework_LoL/Sources/DataManagers/ChampChanger.cs @@ -8,17 +8,36 @@ namespace DataManagers { public static Champion ToPoco(this ChampionEntity champion) { - return new Champion(name: champion.Name, champClass: ChampionClass.Unknown, icon: champion.Icon, bio: champion.Bio); + return new Champion(name: champion.Name, champClass: champion.ChampClass, icon: champion.Icon, bio: champion.Bio); } - public static ChampionEntity ToEntity(this Champion champion) + public static ChampionEntity ToEntity(this Champion champion) => new ChampionEntity { - return new ChampionEntity + Name = champion.Name, + Bio = champion.Bio, + Icon = champion.Icon, + ChampClass = champion.Class, + //Characteristics = champion.Characteristics.Select(dict => dict).ToDictionary(pair => pair.Key, pair => pair.Value) + }; + + public static IEnumerable ToPocos(this IEnumerable champs) + { + List champions = new List(); + foreach (ChampionEntity c in champs) + { + champions.Add(c.ToPoco()); + } + return champions; + } + + public static IEnumerable toEntities(this IEnumerable champs) + { + List champions = new List(); + foreach (Champion c in champs) { - Name = champion.Name, - Bio = champion.Bio, - Icon = champion.Icon, - }; + champions.Add(c.ToEntity()); + } + return champions; } } } diff --git a/EntityFramework_LoL/Sources/DataManagers/DbChampionManager.cs b/EntityFramework_LoL/Sources/DataManagers/DbChampionManager.cs index 68e32f1..9b631af 100644 --- a/EntityFramework_LoL/Sources/DataManagers/DbChampionManager.cs +++ b/EntityFramework_LoL/Sources/DataManagers/DbChampionManager.cs @@ -14,19 +14,67 @@ namespace DataManagers Context = context; } - public Task AddItem(Champion? item) - { - throw new NotImplementedException(); + private IEnumerable SortChampions(IEnumerable champs, int index, int count, string? orderingPropertyName = null, bool descending = false) + { + switch (orderingPropertyName?.ToLower()) + { + case "name": + champs = champs.OrderBy(arg => arg.Name).ToList(); + break; + case "bio": + champs = champs.OrderBy(arg => arg.Bio).ToList(); + break; + case "class": + champs = champs.OrderBy(arg => arg.Class).ToList(); + break; + default: + break; + + } + if (descending) + { + champs = champs.Reverse().ToList(); + } + if (index + count > champs.ToList().Count) return champs.ToList().GetRange(index, champs.ToList().Count - index); + return champs.ToList().GetRange(index, count); + } + + public async Task AddItem(Champion? item) + { + if (item != null) + { + await Context.Champions.AddAsync(item.ToEntity()); + await Context.SaveChangesAsync(); + return await Task.Run(() => Context.Champions.SingleOrDefault((ChampionEntity arg) => arg.Name == item.Name)?.ToPoco()); + } + return null; + } + + public async Task DeleteItem(Champion? item) + { + if (item != null) + { + ChampionEntity? entity = await Context.Champions.SingleOrDefaultAsync((ChampionEntity arg) => arg.Name == item.Name); + if (entity != null) + { + Context.Champions.Remove(entity); + int test = await Context.SaveChangesAsync(); + return test==1; + } + } + return false; + } + + public async Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false) + { + IEnumerable champs = await Task.Run(() => Context.Champions.ToList().ToPocos()); + return SortChampions(champs, index, count,orderingPropertyName, descending); } - public Task DeleteItem(Champion? item) + public async Task GetNbItems() { - throw new NotImplementedException(); - } + return await Task.FromResult(Context.Champions.Count()); - public Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false) - { - throw new NotImplementedException(); } public Task> GetItemsByCharacteristic(string charName, int index, int count, string? orderingPropertyName = null, bool descending = false) @@ -34,14 +82,16 @@ namespace DataManagers throw new NotImplementedException(); } - public Task> GetItemsByClass(ChampionClass championClass, int index, int count, string? orderingPropertyName = null, bool descending = false) + public async Task> GetItemsByClass(ChampionClass championClass, int index, int count, string? orderingPropertyName = null, bool descending = false) { - throw new NotImplementedException(); + IEnumerable champs = await Task.Run(() => Context.Champions.ToList().ToPocos().Where(arg => arg.Class == championClass)); + return SortChampions(champs, index, count, orderingPropertyName, descending); } - public Task> GetItemsByName(string substring, int index, int count, string? orderingPropertyName = null, bool descending = false) + public async Task> GetItemsByName(string substring, int index, int count, string? orderingPropertyName = null, bool descending = false) { - throw new NotImplementedException(); + IEnumerable champs = await Task.Run(() => Context.Champions.ToList().ToPocos().Where(arg => arg.Name.Contains(substring))); + return SortChampions(champs, index, count, orderingPropertyName, descending); } public Task> GetItemsByRunePage(RunePage? runePage, int index, int count, string? orderingPropertyName = null, bool descending = false) @@ -59,12 +109,6 @@ namespace DataManagers throw new NotImplementedException(); } - public async Task GetNbItems() - { - return await Task.Run(() => Context.Champions.Count()); - - } - public Task GetNbItemsByCharacteristic(string charName) { throw new NotImplementedException(); @@ -75,9 +119,9 @@ namespace DataManagers throw new NotImplementedException(); } - public Task GetNbItemsByName(string substring) + public async Task GetNbItemsByName(string substring) { - throw new NotImplementedException(); + return await Task.FromResult(Context.Champions.Where((arg) => arg.Name.Contains(substring)).Count()); } public Task GetNbItemsByRunePage(RunePage? runePage) @@ -95,9 +139,20 @@ namespace DataManagers throw new NotImplementedException(); } - public Task UpdateItem(Champion? oldItem, Champion? newItem) + public async Task UpdateItem(Champion? oldItem, Champion? newItem) { - throw new NotImplementedException(); + ChampionEntity? champ = await Context.Champions.SingleOrDefaultAsync((arg) => arg.Name == oldItem.Name); + if (champ != null) + { + champ.Bio = newItem.Bio; + champ.Name = newItem.Name; + champ.ChampClass = newItem.Class; + champ.Icon = newItem.Icon; + Context.Champions.Update(champ); + await Context.SaveChangesAsync(); + return champ.ToPoco(); + } + return null; } } } diff --git a/EntityFramework_LoL/Sources/DataManagers/DbDataManager.cs b/EntityFramework_LoL/Sources/DataManagers/DbDataManager.cs index 0b8ba8d..3534d9c 100644 --- a/EntityFramework_LoL/Sources/DataManagers/DbDataManager.cs +++ b/EntityFramework_LoL/Sources/DataManagers/DbDataManager.cs @@ -9,7 +9,7 @@ namespace DataManagers private LolContext Context { get; set; } - public IChampionsManager ChampionsMgr => throw new NotImplementedException(); + public IChampionsManager ChampionsMgr => new DbChampionManager(Context); public ISkinsManager SkinsMgr => throw new NotImplementedException(); @@ -23,24 +23,6 @@ namespace DataManagers Context = context; } - public async Task GetNumbersOfElement() - { - return await Task.Run(() => Context.Champions.Count()); - } - - public async Task GetById(int id) - { - return await Task.Run(() => Context.Champions.SingleOrDefault((ChampionEntity arg) => arg.Id == id).ToPoco()); - } - - public async Task Add(Champion champ) - { - ChampionEntity entity = champ.ToEntity(); - await Context.Champions.AddAsync(entity); - Context.SaveChanges(); - return await Task.Run(() => Context.Champions.SingleOrDefault((ChampionEntity arg) => arg.Name == champ.Name && arg.Bio == champ.Bio).ToPoco()); - } - public void Dispose() { Context.Dispose(); diff --git a/EntityFramework_LoL/Sources/EFLib/ChampionEntity.cs b/EntityFramework_LoL/Sources/EFLib/ChampionEntity.cs index 8b3b00d..829cc2e 100644 --- a/EntityFramework_LoL/Sources/EFLib/ChampionEntity.cs +++ b/EntityFramework_LoL/Sources/EFLib/ChampionEntity.cs @@ -14,8 +14,8 @@ namespace EFLib public string Bio { get; set; } - public ChampionClass champClass { get; set;} + public ChampionClass ChampClass { get; set;} - } + } }