Realized Logs and pagination
continuous-integration/drone/push Build is passing Details

Logs_Version_Filtrage_Pagination
Emre KARTAL 2 years ago
parent 72dc884125
commit ec07596ea3

@ -13,16 +13,26 @@ namespace ApiLol.Controllers
public class ChampionsController : ControllerBase public class ChampionsController : ControllerBase
{ {
private readonly IDataManager _manager; private readonly IDataManager _manager;
public ChampionsController(IDataManager dataManager) public readonly ILogger<ChampionsController> _logger;
public ChampionsController(IDataManager dataManager, ILogger<ChampionsController> logger)
{ {
_logger = logger;
this._manager = dataManager; this._manager = dataManager;
} }
// GET: api/<ValuesController> // GET: api/<ValuesController>
[HttpGet] [HttpGet]
public async Task<IActionResult> Get() public async Task<IActionResult> Get([FromQuery] PageRequest pageRequest)
{ {
IEnumerable<ChampionDto> 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<ChampionDto> dtos = (await _manager.ChampionsMgr.GetItems(pageRequest.index, pageRequest.count))
.Select(x => x.ToDto()); .Select(x => x.ToDto());
return Ok(dtos); return Ok(dtos);
} }
@ -31,10 +41,12 @@ namespace ApiLol.Controllers
[HttpGet("{name}")] [HttpGet("{name}")]
public async Task<IActionResult> Get(string name) public async Task<IActionResult> 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()); .Select(x => x.ToDto());
if(dtos.IsNullOrEmpty()) if (dtos.IsNullOrEmpty())
{ {
_logger.LogWarning($"{name} was not found");
return NotFound(); return NotFound();
} }
return Ok(dtos); return Ok(dtos);
@ -44,6 +56,12 @@ namespace ApiLol.Controllers
[HttpPost] [HttpPost]
public async Task<IActionResult> Post([FromBody] ChampionDto champion) public async Task<IActionResult> 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), return CreatedAtAction(nameof(Get),
(await _manager.ChampionsMgr.AddItem(champion.ToModel())).ToDto()); (await _manager.ChampionsMgr.AddItem(champion.ToModel())).ToDto());
} }
@ -52,10 +70,20 @@ namespace ApiLol.Controllers
[HttpPut("{name}")] [HttpPut("{name}")]
public async Task<IActionResult> Put(string name, [FromBody] ChampionDto champion) public async Task<IActionResult> 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())); 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())); return Ok(await _manager.ChampionsMgr.UpdateItem(dtos.First(), champion.ToModel()));
} }
@ -64,9 +92,11 @@ namespace ApiLol.Controllers
[HttpDelete("{name}")] [HttpDelete("{name}")]
public async Task<IActionResult> Delete(string name) public async Task<IActionResult> Delete(string name)
{ {
_logger.LogInformation($"method Delete call with {name}");
var dtos = (await _manager.ChampionsMgr.GetItemsByName(name, 0, await _manager.ChampionsMgr.GetNbItems())); var dtos = (await _manager.ChampionsMgr.GetItemsByName(name, 0, await _manager.ChampionsMgr.GetNbItems()));
if (dtos.IsNullOrEmpty()) if (dtos.IsNullOrEmpty())
{ {
_logger.LogWarning($"{name} was not found");
return BadRequest(); return BadRequest();
} }
return Ok(await _manager.ChampionsMgr.DeleteItem(dtos.First())); return Ok(await _manager.ChampionsMgr.DeleteItem(dtos.First()));

@ -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;
}
}

@ -1,6 +1,8 @@
using ApiLol.Controllers; using ApiLol.Controllers;
using DTO; using DTO;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Model; using Model;
using StubLib; using StubLib;
@ -14,7 +16,7 @@ namespace ApiTests
public ChampionsControllerTest() public ChampionsControllerTest()
{ {
stub = new StubData(); stub = new StubData();
champs = new ChampionsController(stub); champs = new ChampionsController(stub, new NullLogger<ChampionsController>());
} }
[TestMethod] [TestMethod]
@ -23,7 +25,8 @@ namespace ApiTests
//Arrange //Arrange
//Act //Act
var champion = await champs.Get(); var total = await stub.ChampionsMgr.GetNbItems();
var champion = await champs.Get(new PageRequest());
//Assert //Assert
var objectResult = champion as OkObjectResult; var objectResult = champion as OkObjectResult;
@ -32,7 +35,7 @@ namespace ApiTests
var champions = objectResult?.Value as IEnumerable<ChampionDto>; var champions = objectResult?.Value as IEnumerable<ChampionDto>;
Assert.IsNotNull(champions); Assert.IsNotNull(champions);
Assert.AreEqual(champions.Count(), await stub.ChampionsMgr.GetNbItems()); Assert.AreEqual(champions.Count(), total);
} }

Loading…
Cancel
Save