using System.Security.Cryptography; using apiLOL.DTO; using Microsoft.AspNetCore.Mvc; using Model; // For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 namespace apiLOL.Controllers { [ApiController] [Route("api/v1/[controller]")] [ApiVersion("1.0")] public class ControllerChampions : Controller { private readonly IDataManager data; // EFdata manager qui implémente l'interface IDataManager // coté client : Refaire un APIdata manager qui implémente l'interface IDataManager private readonly ILogger _logger; public ControllerChampions(IDataManager manager, ILogger log) { data = manager; _logger = log; } // GET: api/ [HttpGet] public async Task Get([FromQuery]int index = 0, int count = 10, [FromQuery]string name = "") { //FromQuery permet de filtrer dans la collection de champions en fonction du nom _logger.LogInformation($"methode Get de ControllerChampions appelée index:{index}, count: {count} et name:{name}"); int nbChampions = await data.ChampionsMgr.GetNbItems(); _logger.LogInformation($"Nombre de champions : {nbChampions}"); Task> champs; if(name.Equals(name)) champs = (Task>)(await data.ChampionsMgr.GetItems(index, count)).Select(Model => Model.ToDTO()); else champs = (Task>)(await data.ChampionsMgr.GetItemsByName(name, index, count)).Select(Model => Model.ToDTO()); var page = new ChampionPageDTO { Data = (IEnumerable)champs, Index = index, Count = count, TotalCount = nbChampions }; return Ok(page); } // GET api//Charle [HttpGet] [Route("{name}")] public async Task GetChampion(string name) { _logger.LogInformation($"methode GetChampion de ControllerChampions appelée avec le paramètre {name}"); try { var champs = (await data.ChampionsMgr.GetItemsByName(name, 0, 1)); return Ok(champs.First().ToDTO()); } catch(Exception ex) { _logger.LogInformation($"erreur methode Get de ControllerChampions: {ex}"); return BadRequest("erreur de nom de champion"); } } // POST api/ [HttpPost] public async Task Post(ChampionDTO champDTO) { _logger.LogInformation($"methode Post de ControllerChampions appelée avec le paramètre {champDTO.Name}"); try { Champion tmp = champDTO.ToModel(); Champion champion = await data.ChampionsMgr.AddItem(tmp); ChampionDTO dtoChamp = champion.ToDTO(); return CreatedAtAction(nameof(GetChampion), new { name = dtoChamp.Name }, dtoChamp); } catch (Exception ex) { _logger.LogInformation($"erreur methode Post de ControllerChampions: {ex}"); return BadRequest("le champion existe deja"); } } // PUT api//5 [HttpPut("{name}")] public async Task Put(string name, string bio) { _logger.LogInformation($"methode Put de ControllerChampions appelée avec le paramètre name: {name} et bio: {bio}"); try { var champs = (await data.ChampionsMgr.GetItemsByName(name, 0, 1)).First(); champs.Bio = bio; return Ok(champs.ToDTO()); } catch (Exception ex) { _logger.LogInformation($"erreur methode Put de ControllerChampions: {ex}"); return BadRequest("erreur de nom de champion"); } } // DELETE api//5 [HttpDelete("{name}")] public async Task Delete(string name) { _logger.LogInformation($"methode Delete de ControllerChampions appelée avec le paramètre name: {name}"); try { var champ = (await data.ChampionsMgr.GetItemsByName(name, 0, 1)).First(); await data.ChampionsMgr.DeleteItem(champ); return Ok(champ.ToDTO()); } catch (Exception ex) { _logger.LogInformation($"erreur methode Delete de ControllerChampions: {ex}"); return BadRequest("erreur de nom de champion"); } } } }