diff --git a/src/EntityFramework_LoL/Sources/ApiLol/Controllers/ChampionsController.cs b/src/EntityFramework_LoL/Sources/ApiLol/Controllers/ChampionsController.cs index 1680ad1..ae1ada6 100644 --- a/src/EntityFramework_LoL/Sources/ApiLol/Controllers/ChampionsController.cs +++ b/src/EntityFramework_LoL/Sources/ApiLol/Controllers/ChampionsController.cs @@ -13,16 +13,26 @@ namespace ApiLol.Controllers public class ChampionsController : ControllerBase { private readonly IDataManager _manager; - public ChampionsController(IDataManager dataManager) + public readonly ILogger _logger; + public ChampionsController(IDataManager dataManager, ILogger logger) { + _logger = logger; this._manager = dataManager; } // GET: api/ [HttpGet] - public async Task Get() + public async Task Get([FromQuery] PageRequest pageRequest) { - IEnumerable dtos = (await _manager.ChampionsMgr.GetItems(0, await _manager.ChampionsMgr.GetNbItems())) + int nbTotal = await _manager.ChampionsMgr.GetNbItems(); + if (pageRequest.count + pageRequest.index > nbTotal) + { + _logger.LogWarning($"too many, maximum {nbTotal}"); + pageRequest.count = 10; + } + + _logger.LogInformation($"method Get call"); + IEnumerable dtos = (await _manager.ChampionsMgr.GetItems(pageRequest.index, pageRequest.count)) .Select(x => x.ToDto()); return Ok(dtos); } @@ -31,10 +41,12 @@ namespace ApiLol.Controllers [HttpGet("{name}")] public async Task Get(string name) { - var dtos = (await _manager.ChampionsMgr.GetItemsByName(name,0, await _manager.ChampionsMgr.GetNbItems())) + _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()) + if (dtos.IsNullOrEmpty()) { + _logger.LogWarning($"{name} was not found"); return NotFound(); } return Ok(dtos); @@ -44,6 +56,12 @@ namespace ApiLol.Controllers [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()) + { + return BadRequest("Name is already exist"); + } return CreatedAtAction(nameof(Get), (await _manager.ChampionsMgr.AddItem(champion.ToModel())).ToDto()); } @@ -52,10 +70,20 @@ namespace ApiLol.Controllers [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()) + if (dtos.IsNullOrEmpty()) { - return BadRequest(); + 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())); } @@ -64,12 +92,14 @@ namespace ApiLol.Controllers [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()) { + _logger.LogWarning($"{name} was not found"); return BadRequest(); } return Ok(await _manager.ChampionsMgr.DeleteItem(dtos.First())); } } -} +} \ No newline at end of file diff --git a/src/EntityFramework_LoL/Sources/DTO/PageRequest.cs b/src/EntityFramework_LoL/Sources/DTO/PageRequest.cs new file mode 100644 index 0000000..2613958 --- /dev/null +++ b/src/EntityFramework_LoL/Sources/DTO/PageRequest.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DTO +{ + public class PageRequest + { + public int index { get; set; } = 0; + public int count { get; set; } = 10; + } +} diff --git a/src/EntityFramework_LoL/Sources/Tests/ApiTests/ChampionsControllerTest.cs b/src/EntityFramework_LoL/Sources/Tests/ApiTests/ChampionsControllerTest.cs index 5546a25..590e9e1 100644 --- a/src/EntityFramework_LoL/Sources/Tests/ApiTests/ChampionsControllerTest.cs +++ b/src/EntityFramework_LoL/Sources/Tests/ApiTests/ChampionsControllerTest.cs @@ -1,6 +1,8 @@ using ApiLol.Controllers; using DTO; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Model; using StubLib; @@ -14,7 +16,7 @@ namespace ApiTests public ChampionsControllerTest() { stub = new StubData(); - champs = new ChampionsController(stub); + champs = new ChampionsController(stub, new NullLogger()); } [TestMethod] @@ -23,7 +25,8 @@ namespace ApiTests //Arrange //Act - var champion = await champs.Get(); + var total = await stub.ChampionsMgr.GetNbItems(); + var champion = await champs.Get(new PageRequest()); //Assert var objectResult = champion as OkObjectResult; @@ -32,7 +35,7 @@ namespace ApiTests var champions = objectResult?.Value as IEnumerable; Assert.IsNotNull(champions); - Assert.AreEqual(champions.Count(), await stub.ChampionsMgr.GetNbItems()); + Assert.AreEqual(champions.Count(), total); }