From 41de783e447b3125c8c7ca58fddabb68c56cd377 Mon Sep 17 00:00:00 2001 From: Pierre Ferreira Date: Sat, 25 Mar 2023 23:05:59 +0100 Subject: [PATCH] ajout d'un RuneController (et donc de RuneMapper et RuneDTO) :package: --- .../API_LoL/Controllers/RunesController.cs | 186 ++++++++++++++++++ Sources/API_LoL/Mapper/RuneMapper.cs | 19 ++ Sources/DTO/DTO.csproj | 1 + Sources/DTO/RuneDTO.cs | 43 ++++ 4 files changed, 249 insertions(+) create mode 100644 Sources/API_LoL/Controllers/RunesController.cs create mode 100644 Sources/API_LoL/Mapper/RuneMapper.cs create mode 100644 Sources/DTO/RuneDTO.cs diff --git a/Sources/API_LoL/Controllers/RunesController.cs b/Sources/API_LoL/Controllers/RunesController.cs new file mode 100644 index 0000000..899c445 --- /dev/null +++ b/Sources/API_LoL/Controllers/RunesController.cs @@ -0,0 +1,186 @@ +using API_LoL.Mapper; +using DTO; +using EntityFramework; +using Microsoft.AspNetCore.Mvc; +using Model; + +namespace API_LoL.Controllers +{ + [Route("api/v{version:apiVersion}/[controller]")] + [ApiController] + public class RunesController : ControllerBase + { + + + public RunesController(IDataManager Manager) + { + this.RunesManager = Manager.RunesMgr; + } + + private IRunesManager RunesManager; + + // GET api//5 + + [HttpGet("count")] + public async Task GetCount() + { + return Ok(RunesManager.GetNbItems()); + } + + [HttpGet] + public async Task Get(string? name = null, string desc = null, EnumRuneFamily Family = EnumRuneFamily.Unknown, LargeImage Image = null, int index = 0, int size = 10) + { + if (size - index > 10) + { + return BadRequest(); + } + if (!string.IsNullOrEmpty(name)) + { + var list = await RunesManager.GetItemsByName(name, index, size); + if (list.Count() != 0) + { + return Ok(list.Select(rune => rune?.ToDTO())); + } + else { return NoContent(); } + } + ///else if peu important : on ne cherche pas des runes par famille ou description + //else if (!string.IsNullOrEmpty(desc)) + //{ + // var list = await RunesManager.GetItemsBySkill(desc, index, size); + // if (list.Count() != 0) + // { + // return Ok(list.Select(champion => champion?.ToDTO())); + // } + // else { return NoContent(); } + //} + //else if (!string.IsNullOrEmpty(Family)) + //{ + // var list = await RunesManager.GetItems(index, size); + // if (list.Count() != 0) + // { + // return Ok(list.Select(champion => champion?.ToDTO())); + // } + // else { return NoContent(); } + //} + //else if (!string.IsNullOrEmpty(Image)) + //{ + // var list = await RunesManager.GetItems(index, size); + // if (list.Count() != 0) + // { + // return Ok(list.Select(champion => champion?.ToDTO())); + // } + // else { return NoContent(); } + //} + else + { + var list = await RunesManager.GetItems(index, size); + if (list.Count() != 0) + { + return Ok(list.Select(champion => champion?.ToDTO())); + } + else { return NoContent(); } + } + } + + [HttpGet("name")] + public async Task GetByName(String name) + { + if (string.IsNullOrEmpty(name)) return BadRequest(); + var list = await RunesManager.GetItemsByName(name, 0, 1); + if (list.Count() == 1) + { + return Ok(list.Select(rune => rune?.ToDTO()).First()); + } + else { return NoContent(); } + + } + + //[HttpGet("name/skins")] + //public async Task GetSkinsByName(String name) + //{ + // if (string.IsNullOrEmpty(name)) return BadRequest(); + // var list = await RunesManager.GetItemsByName(name, 0, 1); + // if (list.Count() == 1) + // { + // var nb = await SkinsManager.GetNbItemsByChampion(list.First()); + // if (nb != 0) + // { + // var skins = await SkinsManager.GetItemsByChampion(list.First(), 0, nb); + // return Ok(skins.Select(skin => skin?.ToDTO())); + // } + // else { return NoContent(); } + // } + // else { return NoContent(); } + //} + + //[HttpGet("name/skills")] + //public async Task GetSkillsByName(String name) + //{ + // if (string.IsNullOrEmpty(name)) return BadRequest(); + // var list = await RunesManager.GetItemsByName(name, 0, 1); + // if (list.Count() == 1) + // { + // var skins = await SkinsManager.GetItemsByChampion(list.First(), 0, await SkinsManager.GetNbItemsByChampion(list.First())); + // if (skins.Count() != 0) + // { + // return Ok(skins.Select(skin => skin?.ToDTO())); + // } + // else { return NoContent(); } + // } + // else { return NoContent(); } + //} + + + + // POST api/ + [HttpPost] + public async Task Post(RuneDTO rune) + { + if (rune == null) + { + return UnprocessableEntity(); + } + else + { + var champ = await RunesManager.GetItemsByName(rune.Name, 0, 1); + if (champ.Count() != 0 && champ.FirstOrDefault().Name == rune.Name) + { + return Conflict(rune); + } + await RunesManager.AddItem(rune.ToRune()); + return CreatedAtAction("Post", rune); + + } + } + + // PUT api//5 + [HttpPut("name")] + public async Task Put(string name, RuneDTO rune) + { + if (string.IsNullOrEmpty(name)) + return BadRequest(); + if (rune == null) + return UnprocessableEntity(); + var list = await RunesManager.GetItemsByName(name, 0, 1); + if (list.Count() == 1) + { + return Ok(RunesManager.UpdateItem(list.First(), rune.ToRune())); + } + else { return NoContent(); } + } + + // DELETE api//5 + [HttpDelete("name")] + public async Task Delete(string name) + { + if (string.IsNullOrEmpty(name)) + return BadRequest(); + var list = await RunesManager.GetItemsByName(name, 0, 1); + if (list.Count() == 1) + { + return Ok(await RunesManager.DeleteItem(list.First())); + } + else { return NoContent(); } + } + } +} diff --git a/Sources/API_LoL/Mapper/RuneMapper.cs b/Sources/API_LoL/Mapper/RuneMapper.cs new file mode 100644 index 0000000..92aa560 --- /dev/null +++ b/Sources/API_LoL/Mapper/RuneMapper.cs @@ -0,0 +1,19 @@ +using DTO; +using Model; + +namespace API_LoL.Mapper +{ + public static class RuneMapper + { + public static RuneDTO ToDTO(this Rune rune) + { + return new RuneDTO(rune.Name, rune.Description, rune.Family, rune.Image, rune.Icon); + } + + public static Rune ToRune(this RuneDTO rune) + { + return new Rune(rune.Name, rune.Family, rune.Icon, rune.Image.Base64, rune.Description); + + } + } +} diff --git a/Sources/DTO/DTO.csproj b/Sources/DTO/DTO.csproj index dd77eab..4e05eb4 100644 --- a/Sources/DTO/DTO.csproj +++ b/Sources/DTO/DTO.csproj @@ -7,6 +7,7 @@ + diff --git a/Sources/DTO/RuneDTO.cs b/Sources/DTO/RuneDTO.cs new file mode 100644 index 0000000..4cdb42c --- /dev/null +++ b/Sources/DTO/RuneDTO.cs @@ -0,0 +1,43 @@ +using EntityFramework; +using Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DTO +{ + public class RuneDTO + { + public RuneDTO(string name, string desc, RuneFamily family, LargeImage image, string icon) + { + Name = name; + Description = desc; + Family = family; + Image = image; + Icon = icon; + } + + public string Name { get; set; } + public string Description { get; set; } + public RuneFamily Family { get; set; } + public string Icon { get; set; } + + public LargeImage Image { get; set; } + + public bool equals(RuneDTO other) + { + return other.Name == Name + && other.Description == Description + && other.Family == Family + && other.Image == Image + && other.Icon == Icon; + } + + public string toString() + { + return Name + Description + Family.ToString(); + } + } +}