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
{
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;
}
// GET: api/<ValuesController>
[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());
return Ok(dtos);
}
@ -31,10 +41,12 @@ namespace ApiLol.Controllers
[HttpGet("{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());
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<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),
(await _manager.ChampionsMgr.AddItem(champion.ToModel())).ToDto());
}
@ -52,10 +70,20 @@ namespace ApiLol.Controllers
[HttpPut("{name}")]
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()));
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,9 +92,11 @@ namespace ApiLol.Controllers
[HttpDelete("{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()));
if (dtos.IsNullOrEmpty())
{
_logger.LogWarning($"{name} was not found");
return BadRequest();
}
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 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<ChampionsController>());
}
[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<ChampionDto>;
Assert.IsNotNull(champions);
Assert.AreEqual(champions.Count(), await stub.ChampionsMgr.GetNbItems());
Assert.AreEqual(champions.Count(), total);
}

Loading…
Cancel
Save