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();
+ }
+ }
+}