diff --git a/src/EntityFramework_LoL/Sources/ApiLol/Controllers/ChampionsController.cs b/src/EntityFramework_LoL/Sources/ApiLol/Controllers/ChampionsController.cs index 52d7185..2acbc49 100644 --- a/src/EntityFramework_LoL/Sources/ApiLol/Controllers/ChampionsController.cs +++ b/src/EntityFramework_LoL/Sources/ApiLol/Controllers/ChampionsController.cs @@ -24,82 +24,156 @@ namespace ApiLol.Controllers [HttpGet] public async Task Get([FromQuery] PageRequest pageRequest) { - int nbTotal = await _manager.ChampionsMgr.GetNbItems(); - if (pageRequest.count + pageRequest.index > nbTotal) + try { - _logger.LogWarning($"too many, maximum {nbTotal}"); - return BadRequest("Champion limit exceed"); + int nbTotal = await _manager.ChampionsMgr.GetNbItems(); + if (pageRequest.count + pageRequest.index > nbTotal) + { + _logger.LogWarning($"too many, maximum {nbTotal}"); + return BadRequest($"Champion limit exceed, max {nbTotal}"); + } + + _logger.LogInformation($"method Get call"); + IEnumerable dtos = (await _manager.ChampionsMgr.GetItems(pageRequest.index, pageRequest.count)) + .Select(x => x.ToDto()); + return Ok(dtos); } + catch (Exception e) + { + return BadRequest(e.Message); - _logger.LogInformation($"method Get call"); - IEnumerable dtos = (await _manager.ChampionsMgr.GetItems(pageRequest.index, pageRequest.count)) - .Select(x => x.ToDto()); - return Ok(dtos); + } } // GET api//5 [HttpGet("{name}")] public async Task Get(string name) { - _logger.LogInformation($"method GetByName call with {name}"); - var dtos = (await _manager.ChampionsMgr.GetItemsByName(name, 0, await _manager.ChampionsMgr.GetNbItems())) - .Select(x => x.ToDto()); - if (dtos.IsNullOrEmpty()) + try { - _logger.LogWarning($"{name} was not found"); - return NotFound(); + _logger.LogInformation($"method GetByName call with {name}"); + var dtos = (await _manager.ChampionsMgr.GetItemsByName(name, 0, await _manager.ChampionsMgr.GetNbItems())) + .Select(x => x.ToDto()); + if (dtos.IsNullOrEmpty()) + { + _logger.LogWarning($"{name} was not found"); + return NotFound(); + } + return Ok(dtos); + } + catch (Exception e) + { + return BadRequest(e.Message); + } - return Ok(dtos); } // POST api/ [HttpPost] public async Task Post([FromBody] ChampionDto champion) { - _logger.LogInformation($"method Post call"); - var dtos = (await _manager.ChampionsMgr.GetItemsByName(champion.Name, 0, await _manager.ChampionsMgr.GetNbItems())); - if (!dtos.IsNullOrEmpty()) + try { - return BadRequest("Name is already exist"); + _logger.LogInformation($"method Post call"); + var dtos = (await _manager.ChampionsMgr.GetItemsByName(champion.Name, 0, await _manager.ChampionsMgr.GetNbItems())); + if (!dtos.IsNullOrEmpty()) + { + return BadRequest("Name is already exist"); + } + return CreatedAtAction(nameof(Get), + (await _manager.ChampionsMgr.AddItem(champion.ToModel())).ToDto()); + } + catch (Exception e) + { + return BadRequest(e.Message); + } - return CreatedAtAction(nameof(Get), - (await _manager.ChampionsMgr.AddItem(champion.ToModel())).ToDto()); } // PUT api//5 [HttpPut("{name}")] public async Task Put(string name, [FromBody] ChampionDto champion) { - _logger.LogInformation($"method Put call with {name}"); - var dtos = (await _manager.ChampionsMgr.GetItemsByName(name, 0, await _manager.ChampionsMgr.GetNbItems())); - if (dtos.IsNullOrEmpty()) + try { - return BadRequest("Name not exist"); - } - // Checks if the new name exists - if (name != champion.Name) - { - var dtos2 = (await _manager.ChampionsMgr.GetItemsByName(champion.Name, 0, await _manager.ChampionsMgr.GetNbItems())); - if (!dtos.IsNullOrEmpty()) + _logger.LogInformation($"method Put call with {name}"); + var dtos = (await _manager.ChampionsMgr.GetItemsByName(name, 0, await _manager.ChampionsMgr.GetNbItems())); + if (dtos.IsNullOrEmpty()) { - return BadRequest("Name is already exist"); + return BadRequest("Name not exist"); + } + // Checks if the new name exists + if (name != champion.Name) + { + var dtos2 = (await _manager.ChampionsMgr.GetItemsByName(champion.Name, 0, await _manager.ChampionsMgr.GetNbItems())); + if (!dtos.IsNullOrEmpty()) + { + return BadRequest("Name is already exist"); + } } + return Ok(await _manager.ChampionsMgr.UpdateItem(dtos.First(), champion.ToModel())); + } + catch (Exception e) + { + return BadRequest(e.Message); + + } + } + + [HttpGet("/{name}/skins")] + public async Task> GetChampionsSkins(string name) + { + try + { + var champions = await _manager.ChampionsMgr.GetItemsByName(name, 0, await _manager.ChampionsMgr.GetNbItems()); + //skinsDTO + IEnumerable res = champions.First().Skins.Select(e => e.ToDto()); + + return Ok(res); + } + catch (Exception e) + { + return BadRequest(e.Message); + + } + } + + [HttpGet("/{name}/skills")] + public async Task> GetChampionsSkills(string name) + { + try + { + var champions = await _manager.ChampionsMgr.GetItemsByName(name, 0, await _manager.ChampionsMgr.GetNbItems()); + //SkillDTO + IEnumerable res = champions.First().Skills.Select(e => e.ToDto()); + + return Ok(res); + } + catch (Exception e) + { + return BadRequest(e.Message); } - return Ok(await _manager.ChampionsMgr.UpdateItem(dtos.First(), champion.ToModel())); } // DELETE api//5 [HttpDelete("{name}")] public async Task Delete(string name) { - _logger.LogInformation($"method Delete call with {name}"); - var dtos = (await _manager.ChampionsMgr.GetItemsByName(name, 0, await _manager.ChampionsMgr.GetNbItems())); - if (dtos.IsNullOrEmpty()) + try + { + _logger.LogInformation($"method Delete call with {name}"); + var dtos = (await _manager.ChampionsMgr.GetItemsByName(name, 0, await _manager.ChampionsMgr.GetNbItems())); + if (dtos.IsNullOrEmpty()) + { + _logger.LogWarning($"{name} was not found"); + return BadRequest(); + } + return Ok(await _manager.ChampionsMgr.DeleteItem(dtos.First())); + } + catch (Exception e) { - _logger.LogWarning($"{name} was not found"); - return BadRequest(); + return BadRequest(e.Message); } - return Ok(await _manager.ChampionsMgr.DeleteItem(dtos.First())); } } } \ No newline at end of file diff --git a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/ChampionMapper.cs b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/ChampionMapper.cs index fed7f20..0e9e94c 100644 --- a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/ChampionMapper.cs +++ b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/ChampionMapper.cs @@ -14,13 +14,14 @@ namespace ApiLol.Mapper Class = champion.Class.ToDto(), Icon = champion.Icon, Image = champion.Image.ToDto(), - Skins = champion.Skins.Select(e => e.ToDto()) + Skins = champion.Skins.Select(e => e.ToDto()), + Skills = champion.Skills.Select(e => e.ToDto()) }; } public static Champion ToModel(this ChampionDto championDto) { - return new Champion(championDto.Name, championDto.Class.ToModel(), championDto.Icon, championDto.Image.Base64,championDto.Bio); + return new Champion(championDto.Name, championDto.Class.ToModel(), championDto.Icon, championDto.Image.Base64, championDto.Bio); } } diff --git a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/SkillMapper.cs b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/SkillMapper.cs index 97bec89..20c0787 100644 --- a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/SkillMapper.cs +++ b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/SkillMapper.cs @@ -11,15 +11,13 @@ namespace ApiLol.Mapper { Name = skill.Name, Description = skill.Description, + Type = skill.Type.ToDto() }; } -/* public static Skill ToModel(this SkillDto skillDto) + public static Skill ToModel(this SkillDto skillDto) { - return new Skill(skill.Name) - { - Description = skill.Description - }; - }*/ + return new Skill(skillDto.Name, skillDto.Type.ToModel(), skillDto.Description); + } } } diff --git a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/SkillTypeMapper.cs b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/SkillTypeMapper.cs index 05689c1..ace0c98 100644 --- a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/SkillTypeMapper.cs +++ b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/SkillTypeMapper.cs @@ -1,8 +1,7 @@ using DTO; -using DTO.enums; using Model; -namespace ApiLol.Mapper.enums +namespace ApiLol.Mapper { public static class SkillTypeMapper { diff --git a/src/EntityFramework_LoL/Sources/Client/ChampionHttpClient.cs b/src/EntityFramework_LoL/Sources/Client/ChampionHttpClient.cs index 21155ed..d62b80c 100644 --- a/src/EntityFramework_LoL/Sources/Client/ChampionHttpClient.cs +++ b/src/EntityFramework_LoL/Sources/Client/ChampionHttpClient.cs @@ -18,10 +18,10 @@ namespace Client httpClient.BaseAddress = new Uri("https://localhost:7252;http://localhost:5252"); } - public async Task> GetChampion() + public async Task> GetChampion(int index, int count) { - var champions = await _httpClient.GetFromJsonAsync>(ApiChampions); - return champions; + var url = $"{ApiChampions}?index={index}&count={count}"; + return await _httpClient.GetFromJsonAsync>(url); } public async void Add(ChampionDto champion) { diff --git a/src/EntityFramework_LoL/Sources/Client/Program.cs b/src/EntityFramework_LoL/Sources/Client/Program.cs index bfb6ef0..fdff83d 100644 --- a/src/EntityFramework_LoL/Sources/Client/Program.cs +++ b/src/EntityFramework_LoL/Sources/Client/Program.cs @@ -1,2 +1,38 @@ // See https://aka.ms/new-console-template for more information -Console.WriteLine("Hello, World!"); \ No newline at end of file +using Client; +using DTO; + +Console.WriteLine("Hello, World!"); + +var championClient = new ChampionHttpClient(new HttpClient()); + +// Get all champions +var champions = await championClient.GetChampion(0,6); +Console.WriteLine("All champions:"); +foreach (var champion in champions) +{ + Console.WriteLine($"{champion.Name} ({champion.Bio})"); +} + +/*// Add a new champion +var newChampion = new ChampionDto { Name = "Akali", Role = "Assassin" }; +championClient.Add(newChampion); + +// Delete a champion +var championToDelete = champions.FirstOrDefault(c => c.Name == "Riven"); +if (championToDelete != null) +{ + championClient.Delete(championToDelete); + Console.WriteLine($"{championToDelete.Name} deleted."); +} + +// Update a champion +var championToUpdate = champions.FirstOrDefault(c => c.Name == "Ashe"); +if (championToUpdate != null) +{ + championToUpdate.Role = "Marksman"; + championClient.Update(championToUpdate); + Console.WriteLine($"{championToUpdate.Name} updated."); +} + +*/ \ No newline at end of file diff --git a/src/EntityFramework_LoL/Sources/DTO/ChampionDto.cs b/src/EntityFramework_LoL/Sources/DTO/ChampionDto.cs index d09bd80..e9b002f 100644 --- a/src/EntityFramework_LoL/Sources/DTO/ChampionDto.cs +++ b/src/EntityFramework_LoL/Sources/DTO/ChampionDto.cs @@ -8,6 +8,7 @@ public string Icon { get; set; } public LargeImageDto Image { get; set; } public IEnumerable Skins { get; set; } + public IEnumerable Skills { get; set; } } } \ No newline at end of file diff --git a/src/EntityFramework_LoL/Sources/DTO/SkillDto.cs b/src/EntityFramework_LoL/Sources/DTO/SkillDto.cs index 77372ab..f0e1919 100644 --- a/src/EntityFramework_LoL/Sources/DTO/SkillDto.cs +++ b/src/EntityFramework_LoL/Sources/DTO/SkillDto.cs @@ -10,5 +10,6 @@ namespace DTO { public string Name { get; set; } public string Description { get; set; } + public SkillTypeDto Type { get; set; } } } diff --git a/src/EntityFramework_LoL/Sources/DTO/enums/SkillTypeDto.cs b/src/EntityFramework_LoL/Sources/DTO/enums/SkillTypeDto.cs index 656b59f..f416bdd 100644 --- a/src/EntityFramework_LoL/Sources/DTO/enums/SkillTypeDto.cs +++ b/src/EntityFramework_LoL/Sources/DTO/enums/SkillTypeDto.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace DTO.enums +namespace DTO { public enum SkillTypeDto {