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;
}
}
}
}