8hHG&W`V?q#)A{mQDgxWxXSFBY|#rNx!i
z()9e|s+L{8^bqUiLlQD+YEH^wZi++=@pxo%%3=Hjv3r)G
zeEBo>v2MRS+YckbcIm!u-+x!wP0^yU~0Nl+|-?
zB&wcQ2i3Dvq`dt!dSf>hQ&TDN%#2(|Jx^v#tJW%D?N&3{@>h3nPW-oa9
zb9yPn-KTE%RHD1%j$`678G`UywBpK3ZDkE$0^L#m0Fkk=D?R+ght
z_4sk|s$EUp*Waf3QroPpn|l^xfr{G`c&x_Wf1F?`bDc+J`=Gr+?L6(n!hVPb(r3HJ
zi~Ig%ej{9Od*8rxllbagn|^+EX?~IAyr3_xx`)-XM$>%yDfjU0RxxY9ol7L9W-{Up
z(=M7@*-dXI5-g&(zW3th^z=jDX8BV2O6rx(s%N!kt6|kPL+$ecdKb1g`AAgNGlS~c
zD@Cu5ZOWZ1VoW`IR=lxf1C-19+=8{)FnDj*yl6FB^~P@Bl~NFImnW~(p;iMj
z>f^TDsBg5_Tc0u;O<&jCtJ`@gs=jb`kVfC_l=FR86Lx|f=O@|xq+X=A1@?yt0uX=z
z1Rwwb2tWV=5P$##AOL}VDWHkuyjnO_IDP7L;Y|L_seB<{<^vb@z}VT7r%o0|*nWxh
zZGrt^f&c^{009U<00Izz00bZa0SG`~9}65J=aoT&0Q~yDOcw7VFN
z=o|FCVLOO02tWV=5P$##AOHafKmY;|fB*zOAb~NG7TqBRd7NZKZ%83>faFAXn7|oA
zApTX($bmFU(uzAEz_0(aoBm;f00bZa0SG_<0uX=z1Rwwb2teQ=7Qp%cLtMGoH3&ce
z0uX=z1Rwwb2tWV=5P(2efS>;>6TcGZpXo2@_vn}CI(>#dI&p`s!UO>bKmY;|fB*y_
z009U<00I#B{}jk7vKl{iY%l>vd|1r!$@B{H5i_4jKCRa4HIrf9uEyIf!jP`hp
zMLUwaRxz4e7fqw$MSCh3??_Zm@_44<+*F@$@pLfCeEa!ORwcJOIwgKy6LEPqPs1r-PnD!4(aD5v5{Csm$@xB>k8
z{|bFgps&-v(|6ci0Dnh+Mt@Ad%T{5600bZa0SG_<0uX=z1Rwwb2teTd6;OyO+QS$M
z|AN0aSP|z--k3xzPLd)Yd5H4W-uQw%N)CzLQH00{Nr}!_0r6%Fl0s67y*AIU|3~Qw
zfxby^(J#{~U0@5CAOHafKmY;|fB*y_009U<00JLkflM@ZL>L$1xmBxbKGD>Qmg!!b
zckZlrSdL}v2*q}Div?fX8y<1P-A^9`)1M%*b9VYUYsb_swrd*=b358+GTe8|7I}!qhc&)=N4QYT;kXNqx9`1OW&@00Izz
z00bZa0SG_<0uX?}2O}^+j)=W+2Kx%XH>zOY_22tYK;#fPCk_}fApDa7-uQqtMRH2;
z{GVU{m*^h^`ZxA~2?7v+00bZa0SG_<0uX=z1Rwx`{U|UYk#xfSvB1)Dfr=!P@P03_
zw4CSH|0Q~xpa0+9k2{DmLjVF0fB*y_009U<00Izz00bZ~8A&HZ-|4?J8ObCR|M@?^
z{vV-l3G`p|4*Ly&w_pYV2tWV=5P$##AOHafKmY;|fWSTzh)0Mjl-f135GUQad{iO{
z!7vP2Bvb5}U;mHr>;HeDx9Pv>-F>!)C@usb009U<00Izz00bZa0SG_<0s{XT0sH(v
z;?Ctsj3h*M{x8X7N-+%Q`~U9<{MY{g1_1~_00Izz00bZa0SG_<0uX?}z86r~mH!00
z2LLqEo9sBeD`+g6x0}y}!1Rwwb2tWV=5P$##AOHafI0F3gKN|#)
zq9mbs_y5EBKbi*wAOHafKmY;|fB*y_009U<;Gq)ebN(Npe--F|=s)OPHiHQQ5P$##
zAOHafKmY;|fB*y_0D=825FvsX;SYpANQ4NA^ZS2y1>E~@e^)I^4*>{300Izz00bZa
z0SG_<0uTra1n>XH&;J#=CD5PK@6*@mSLo;I7JZNX65#KHsjvhA2tWV=5P$##AOHaf
zKmY;|fWW;44v?HUV{Eq!tELsrorY0W!mHxpRk84@Xn2(zUKJT5X|YzXu3Wb&72;oz
zMoC(6L-_fBl)fs^cj=q-7xV}8n`{9S1Rwwb2tWV=5P$##AOHafKmY>or-1)Fe!*z$
en3cfUzOyQDw(qQpgcFkRDrt)36n7NDN%&u*r
Date: Sat, 25 Mar 2023 23:05:59 +0100
Subject: [PATCH 2/2] 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();
+ }
+ }
+}