using API.Dto; using API.Mapping; using Microsoft.AspNetCore.Mvc; using Model; using StubLib; namespace API.Controllers { [ApiController] [Route("[controller]")] public class ChampionController : ControllerBase { private readonly StubData data = new StubData(); // Pour plus tard pour le momment c'est avec le stub // private readonly IDataManager dataManager; private readonly ILogger _logger; public ChampionController(ILogger logger) { _logger = logger; } /* private const string Apichampion = "api/champion"; private readonly HttpClient _client; public championHttpManager(HttpClient client) { _client = client; client.BaseAddress = new Uri("à chopper dans lauchSettings.json propriété du projet"); } public async Task> getJson() { var champions = await _client.GetFromJsonAsync>(); var reponse = await _client.GetAsync("api/champion"); return champions; } public async void addchampion(ChampionDto champion) { _clientLpostAsJsonAscync(ApiChampion, champion); } */ /**** Méthodes GET ****/ [HttpGet] public async Task> GetChamps() { // Récupération de la liste des champions IEnumerable Champs = await data.ChampionsMgr.GetItems(0, data.ChampionsMgr.GetNbItems().Result); // Création de la liste de champion Dto List DtoChamps = new List(); // Chargement de la liste des champions Dto à partir des champions Champs.ToList().ForEach(c => DtoChamps.Add(c.ToDto())); return Ok(DtoChamps); } [HttpGet] [Route("{Name}")] public async Task> GetChampById(int id) { // Récupération de la liste des champions IEnumerable Champs = await data.ChampionsMgr.GetItems(id, 1); // Récupération du champion correspondant à l'id if (id >= 0 && id < data.ChampionsMgr.GetNbItems().Result) { return Ok(Champs.First().ToDto()); } return BadRequest("404"); } [HttpGet("{Name}/Skins")] public async Task> GetSkinsChamp(string name) { // Récupération de la liste des champions IEnumerable Champs = await data.ChampionsMgr.GetItemsByName(name, await data.ChampionsMgr.GetNbItemsByName(name), 1); // Récupération du champion correspondant à l'id //if (await data.ChampionsMgr.GetNbItemsByName(name).Result) { // Converstion en Champion au lieu de champion IEnumerable Champion champion = Champs.First(); // Récupération des skin du champion IEnumerable Skins = await data.SkinsMgr.GetItemsByChampion(champion, 0, data.SkinsMgr.GetNbItemsByChampion(champion).Result); // Création de la liste de skin List skins = new List(); // Ajout des skins dans la nouvelle liste Skins.ToList().ForEach(Skin => skins.Add(Skin.ToDto())); return Ok(skins); } return BadRequest(); } /**** Méthodes POST ****/ [HttpPost("Ajouter/{nom}")] public async Task PostChampName(string nom) { // Création d'un champion avec son nom Champion champion = new Champion(nom); // Ajout du champion dans la BD await data.ChampionsMgr.AddItem(champion); return CreatedAtAction(nameof(GetChampById), new { id = data.ChampionsMgr.GetNbItems().Result - 1 }, champion.ToDto()); } [HttpPost("Ajouter")] public async Task PostChamp([FromBody] ChampionDto championDto) { // Convertie le championDto en model (a était ajouté via l'API) Champion champion = championDto.ToModel(); // Ajout du champion en BD await data.ChampionsMgr.AddItem(champion); return CreatedAtAction(nameof(data.ChampionsMgr.GetItemsByName), new { Name = championDto.Name }, championDto); } [HttpPost] public async Task post([FromBody] ChampionDto championDto) { return CreatedAtAction(nameof(GetChampById), new { id = 1 }, await data.ChampionsMgr.AddItem(championDto.ToModel())); } /**** Méthodes DELETE ****/ [HttpDelete("Supprimer/{id}")] public async Task DeleteChamp(int id) { IEnumerable lcha = await data.ChampionsMgr.GetItems(id, 1); if (id >= 0 && id < data.ChampionsMgr.GetNbItems().Result) { Champion ca = lcha.First(); data.ChampionsMgr.DeleteItem(ca); return Ok(); } return BadRequest(); } /**** Méthodes PUT ****/ [HttpPut("Modifier/{nom}")] public async Task PutChampName(string nom) { Champion champion = new Champion(nom); await data.ChampionsMgr.AddItem(champion); return CreatedAtAction(nameof(GetChampById), new { id = data.ChampionsMgr.GetNbItems().Result - 1 }, champion.ToDto()); } /*[HttpPut("Modifier")] public async Task PutChamp([FromBody] ChampionDto championDto) { Champion champion = championDto.ToModel(); await data.ChampionsMgr.UpdateItem(champion); return CreatedAtAction(nameof(GetChampById), new { id = data.ChampionsMgr.GetItems(0, data.ChampionsMgr.GetNbItems().Result).Result.ToList().IndexOf(champion) }, champion); }*/ } }