using System; using DTOs; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using BowlingEF.Entities; using BowlingLib.Model; using BowlingService; using BowlingService.Interfaces; using DTOs; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace BowlingApi.Controllers { [ApiVersion("1")] [Route("api/v{version:apiVersion}/[controller]")] [ApiController] public class PartieController : ControllerBase { private IpartieService _partieService; public PartieController(IpartieService partieService) { _partieService = partieService; } /// /// Get all partie /// GET: api/parti /// /// la liste des parti /// Retourne la liste des joueurs /// Si la liste est vide /// Si une erreur est survenue // GET: api/Partie [HttpGet] [ProducesResponseType(typeof(string), StatusCodes.Status500InternalServerError)] [ProducesResponseType(typeof(string), StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(string), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(JoueurDTO), StatusCodes.Status200OK)] public async Task Get() { try { var result = await _partieService.GetAll(); if (result == null) { return NotFound(); } return Ok(result); } catch (Exception e) { return StatusCode(StatusCodes.Status500InternalServerError, e.Message); throw; } //var result = _partieService.GetAll().Result; //return Ok(result); } // GET: api/Partie/djon [HttpGet("{id}")] public async Task Get(long id) { try { if (id <= 0) return BadRequest("id est obligatoire"); var result = _partieService.GetDataWithId(id).Result; if (result == null) { return NotFound(); } return Ok(result); } catch (Exception e) { return StatusCode(StatusCodes.Status500InternalServerError, e.Message); throw; } } /// /// Creeation /// POST: api/parti /// /// /// Retourne la parti créé /// Si la parti 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] PartieDTO parti) { try { if (parti == null) { return BadRequest("partie est obligatoire"); } var createdpartie = _partieService.Add(parti).Result; return CreatedAtAction(nameof(Get), new { id = parti.Id }, createdpartie); } catch (Exception e) { return StatusCode(StatusCodes.Status500InternalServerError, e.Message); throw; } } [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 _partieService.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; } } /// /// Supprimer une partie par son id /// DELETE: api/parti/5 /// /// /// Retourne la partie supprimé /// Si la partie n'existe pas /// Si une erreur est survenue [HttpDelete("{id}")] [ProducesResponseType(typeof(string), StatusCodes.Status500InternalServerError)] [ProducesResponseType(typeof(string), StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(bool), StatusCodes.Status200OK)] [MapToApiVersion("2")] public async Task> Delete(long id) { try { var parti = _partieService.Delete(id); if (parti.Result == false) { return NotFound(); } return Ok(parti); } catch (Exception e) { StatusCode(StatusCodes.Status500InternalServerError, e.Message); throw; } } /// /// Modification partie /// PUT: api/parti/5 /// /// /// /// Retourne la modification /// Si le partie est null /// Si le partie 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(PartieDTO), StatusCodes.Status200OK)] public async Task> Put(long id, [FromBody] PartieDTO partie) { try { if (partie == null) return BadRequest("La partie est obligatoire"); var updatepartie = _partieService.Update(partie); if (updatepartie.Result == false) { return NotFound(); } return Ok(updatepartie); } catch (Exception e) { StatusCode(StatusCodes.Status500InternalServerError, e.Message); throw; } } } }