diff --git a/Sources/APILOL/Controllers/ChampionsController.cs b/Sources/APILOL/Controllers/ChampionsController.cs index d5579a0..b73d518 100644 --- a/Sources/APILOL/Controllers/ChampionsController.cs +++ b/Sources/APILOL/Controllers/ChampionsController.cs @@ -12,13 +12,20 @@ namespace APILOL.Controllers [ApiController] public class ChampionsController : ControllerBase { - IChampionsManager dataManager = new StubData().ChampionsMgr; + IChampionsManager dataManager; + + public ChampionsController(IDataManager dataManager) + { + this.dataManager = dataManager.ChampionsMgr; + } + + // GET: api/ [HttpGet] - public async Task Get() + public async Task Get(int index, int count) { - var champions = await dataManager.GetItems(0, await dataManager.GetNbItems()); + var champions = await dataManager.GetItems(index, count); IEnumerable items = champions.Select(c => c.ToDto()); return Ok(items); } @@ -44,14 +51,21 @@ namespace APILOL.Controllers // PUT api//5 [HttpPut("{name}")] - public void Put(string name, [FromBody] ChampionDTO championDTO) + public async Task PutAsync(string name, [FromBody] ChampionDTO championDTO) { + + var dtos = (await dataManager.GetItemsByName(name, 0, await dataManager.GetNbItems())); + + return Ok(dataManager.UpdateItem(dtos.First(), championDTO.ToModel())); + } // DELETE api//5 [HttpDelete("{name}")] - public void Delete(string name) + public async Task Delete(string name) { + var dtos = (await dataManager.GetItemsByName(name, 0, await dataManager.GetNbItems())); + return Ok(dataManager.DeleteItem(dtos.First())); } } } diff --git a/Sources/APILOL/Controllers/SkinController.cs b/Sources/APILOL/Controllers/SkinController.cs new file mode 100644 index 0000000..704413d --- /dev/null +++ b/Sources/APILOL/Controllers/SkinController.cs @@ -0,0 +1,75 @@ +using APILOL.Mapper; +using DTO; +using Microsoft.AspNetCore.Mvc; +using Model; + +namespace APILOL.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class SkinController : ControllerBase + { + + ISkinsManager dataManager; + public SkinController(IDataManager dataManager) + { + this.dataManager = dataManager.SkinsMgr; + } + + + // GET: api/ + [HttpGet] + public async Task Get(int index, int count) + { + var skins = await dataManager.GetItems(index, count); + IEnumerable items = skins.Select(c => c.ToDto()); + return Ok(items); + } + + // GET api//5 + [HttpGet("{name}")] + public async Task Get(string name) + { + var skins = await dataManager.GetItemsByName(name, 0, await dataManager.GetNbItems()); + + if (skins != null) + { + IEnumerable items = skins.Select(c => c.ToDto()); + return Ok(items); + } + + return NotFound(); + } + + // POST api/ + [HttpPost] + public async Task Post([FromBody] SkinDTO skinDTO) + { + + return CreatedAtAction(nameof(Get), (await dataManager.AddItem(skinDTO.ToModel())).ToDto); + } + + // PUT api//5 + [HttpPut("{name}")] + public async Task PutAsync(string name, [FromBody] SkinDTO skinDTO) + { + + var dtos = (await dataManager.GetItemsByName(name, 0, await dataManager.GetNbItems())); + if(dtos != null) { + return Ok(dataManager.UpdateItem(dtos.First(), skinDTO.ToModel())); + } + return NotFound(); + + + } + + + // DELETE api//5 + [HttpDelete("{name}")] + public async Task Delete(string name) + { + var dtos = (await dataManager.GetItemsByName(name, 0, await dataManager.GetNbItems())); + return Ok(dataManager.DeleteItem(dtos.First())); + } + } +} diff --git a/Sources/APILOL/Mapper/SkinMapper.cs b/Sources/APILOL/Mapper/SkinMapper.cs new file mode 100644 index 0000000..7fc1a2c --- /dev/null +++ b/Sources/APILOL/Mapper/SkinMapper.cs @@ -0,0 +1,26 @@ +using DTO; +using Model; + +namespace APILOL.Mapper +{ + public static class SkinMapper + { + public static SkinDTO ToDto(this Skin skin) + { + return new SkinDTO() + { + Name = skin.Name, + Description = skin.Description, + Icon = skin.Icon, + Price = skin.Price, + Champion = skin.Champion.ToDto(), + Image = skin.Image.Base64, + }; + } + + public static Skin ToModel(this SkinDTO skin) + { + return new Skin(skin.Name, skin.Champion.ToModel(),skin.Price, skin.Image, skin.Icon, skin.Description); + } + } +} diff --git a/Sources/DTO/SkinDTO.cs b/Sources/DTO/SkinDTO.cs new file mode 100644 index 0000000..3ed59a6 --- /dev/null +++ b/Sources/DTO/SkinDTO.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DTO +{ + public class SkinDTO + { + public string Name { get; set; } + + public string Description { get; set; } + + public string Icon { get; set; } + + public float Price { get; set; } + + public ChampionDTO Champion { get; set; } + + public string Image { get; set; } + } +}