using BowlingEF.Entities; using BowlingService.Interfaces; using DTOs; using Microsoft.AspNetCore.Mvc; namespace BowlingApi.Controllers; [ApiVersion("1.0")] [ApiController] [Route("api/v{version:apiVersion}/[controller]")] public class JoueurController:Controller { private IJoueurService _joueurService; public JoueurController(IJoueurService joueurService) { _joueurService = joueurService; } /// /// Get all Players /// GET: api/joueur /// /// la liste des Joueurs /// Retourne la liste des joueurs /// Si la liste est vide /// Si une erreur est survenue [HttpGet] [ProducesResponseType(typeof(string), StatusCodes.Status500InternalServerError)] [ProducesResponseType(typeof(string), StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Get() { try { var result = await _joueurService.GetAll(); if (result == null) { return NotFound(); } return Ok(result); } catch (Exception e) { return StatusCode(StatusCodes.Status500InternalServerError, e.Message); throw; } } /// /// Get player with pagination /// Get : api/Joueur?page=1&pageSize=10 /// /// la liste des Joueurs /// Retourne la liste des joueurs /// Si la liste est vide /// Si une erreur est survenue [HttpGet("{page}/{pageSize}")] [ProducesResponseType(typeof(string), StatusCodes.Status500InternalServerError)] [ProducesResponseType(typeof(string), StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task Get(int page=1,int pageSize=10) { try { var result = await _joueurService.GetAll(); if (result == null) { return NotFound(); } var data = result.Skip((page - 1) * pageSize).Take(pageSize); Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(new { totalCount = result.Count(), pageSize = pageSize, currentPage = page, totalPages = (int)Math.Ceiling(result.Count() / (double)pageSize) })); return Ok(data); } catch (Exception e) { return StatusCode(StatusCodes.Status500InternalServerError, e.Message); throw; } } /// /// Get a player by name /// GET: api/Joueur/Djon /// /// /// Retourne le joueur /// Si le nom du joueur est null /// Si le joueur n'existe pas /// Si une erreur est survenue [HttpGet("{name}")] [ProducesResponseType(typeof(string), StatusCodes.Status500InternalServerError)] [ProducesResponseType(typeof(string), StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(string), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(JoueurDTO), StatusCodes.Status200OK)] public async Task Get(string name) { try { if(String.IsNullOrWhiteSpace(name)) return BadRequest("Le nom du joueur est obligatoire"); var result = _joueurService.GetDataWithName(name).Result; if (result == null) { return NotFound(); } return Ok(result); } catch (Exception e) { return StatusCode(StatusCodes.Status500InternalServerError, e.Message); throw; } } /// /// Creer un joueur /// POST: api/Joueur /// /// /// Retourne le joueur créé /// Si le joueur est null /// Si une erreur est survenue [HttpPost] [ProducesResponseType(typeof(string), StatusCodes.Status500InternalServerError)] [ProducesResponseType(typeof(string), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(JoueurDTO), StatusCodes.Status201Created)] public async Task> Post([FromBody] JoueurDTO joueur) { try { if (joueur== null) { return BadRequest("Le joueur est obligatoire"); } var createdJoueur = _joueurService.Add(joueur).Result; return CreatedAtAction(nameof(Get), new { id = createdJoueur.Id }, createdJoueur); } catch (Exception e) { return StatusCode(StatusCodes.Status500InternalServerError, e.Message); throw; } } /// /// Modifier un joueur /// PUT: api/Joueur/5 /// /// /// /// Retourne le joueur modifié /// Si le joueur est null /// Si le joueur n'existe pas /// Si une erreur est survenue [HttpPut("{id}")] [ProducesResponseType(typeof(string), StatusCodes.Status500InternalServerError)] [ProducesResponseType(typeof(string), StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(string), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(JoueurDTO), StatusCodes.Status200OK)] public async Task> Put(long id,[FromBody] JoueurDTO joueur) { try { if(joueur == null) return BadRequest("Le joueur est obligatoire"); var updateJoueur = _joueurService.Update(id,joueur); if (updateJoueur.Result == false) { return NotFound(); } return Ok(joueur); } catch (Exception e) { StatusCode(StatusCodes.Status500InternalServerError, e.Message); throw; } } }