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; private IChampionsManager _dataManager; private readonly ILogger _logger; public ControllerChampions(IDataManager manager, ILogger log) { _dataManager = manager.ChampionsMgr; _logger = log; } [HttpGet] [ProducesResponseType(typeof(ChampionPageDTO), 200)] public async Task GetChampions([FromQuery] int index = 0, int count = 10, string? name = "") { _logger.LogInformation($"methode Get de ControllerChampions appelée"); int nbChampions = await _dataManager.GetNbItems(); _logger.LogInformation($"Nombre de champions : {nbChampions}"); var champs = (await _dataManager.GetItemsByName(name, index, int.MaxValue)) .Where(champ => string.IsNullOrEmpty(name) || champ.Name.Contains(name, StringComparison.InvariantCultureIgnoreCase)) .Take(count) .Select(Model => Model.ToDTO()); var page = new ChampionPageDTO { Data = champs, Index = index, Count = champs.Count(), TotalCount = nbChampions }; return Ok(page); } [HttpGet] [Route("{name}")] [ProducesResponseType(typeof(ChampionDTO), 200)] public async Task GetChampionByName(string name) { _logger.LogInformation($"methode GetChampion de ControllerChampions appelée avec le paramètre {name}"); try { var champs = await _dataManager.GetItemsByName(name, 0, 1); if (champs.Any()) { return Ok(champs.First().ToDTO()); } else { return NotFound(); } } catch (Exception ex) { _logger.LogError($"erreur methode Get de ControllerChampions: {ex}"); return BadRequest("erreur de nom de champion"); } } [HttpPost] public async Task AddChampion(ChampionDTO champDTO) { _logger.LogInformation($"methode Post de ControllerChampions appelée avec le paramètre {champDTO.Name}"); try { // Check if the champion already exists in the database var champs = await _dataManager.GetItemsByName(champDTO.Name, 0, 1); if (champs.Any()) { return BadRequest("le champion existe deja"); } Champion tmp = champDTO.ToModel(); Champion champion = await _dataManager.AddItem(tmp); ChampionDTO dtoChamp = champion.ToDTO(); return CreatedAtAction(nameof(GetChampionByName), new { name = dtoChamp.Name }, dtoChamp); } catch (Exception ex) { _logger.LogError($"erreur methode Post de ControllerChampions: {ex}"); return BadRequest("erreur lors de l'ajout du champion"); } } [HttpPut("{name}")] public async Task UpdateChampion(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 _dataManager.GetItemsByName(name, 0, 1)).First(); champs.Bio = bio; return Ok(champs.ToDTO()); } catch (Exception ex) { _logger.LogError($"erreur methode Put de ControllerChampions: {ex}"); return BadRequest("erreur de nom de champion"); } } [HttpDelete("{name}")] public async Task DeleteChampion(string name) { _logger.LogInformation($"methode Delete de ControllerChampions appelée avec le paramètre name: {name}"); try { var champ = (await _dataManager.GetItemsByName(name, 0, 1)).First(); _dataManager.DeleteItem(champ); return Ok(champ.ToDTO()); } catch (Exception ex) { _logger.LogError($"erreur methode Delete de ControllerChampions: {ex}"); return BadRequest("erreur de nom de champion"); } } } [ApiController] [Route("api/v2/[controller]")] [ApiVersion("2.0")] public class ControllerChampionsSecondVersion : Controller { private readonly ILogger _logger; public ControllerChampionsSecondVersion(ILogger log) { _logger = log; } [HttpGet()] public string Get(int id) { return "Version 2 of GET"; } [HttpPost] public void Post([FromBody] string value) { } [HttpPut("{id}")] public void Put(int id, [FromBody] string value) { } [HttpDelete("{id}")] public void Delete(int id) { } } }