Merge remote-tracking branch 'origin/Manage_Update'
continuous-integration/drone/push Build is passing Details

# Conflicts:
#	Sources/BowlingApi/BowlingApi.csproj
#	Sources/BowlingApi/bowling.db
pull/11/head
Victor Perez NGOUNOU 2 years ago
commit c92d3781b6

@ -10,8 +10,12 @@
<PropertyGroup Condition=" '$(RunConfiguration)' == 'https' " />
<PropertyGroup Condition=" '$(RunConfiguration)' == 'http' " />
<PropertyGroup Condition=" '$(RunConfiguration)' == 'RestFull' " />
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Debug\net6.0\BowlingApi.xml</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.0" />
<!--<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.0" />-->
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.11" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.13" />
@ -37,4 +41,5 @@
<None Remove="Microsoft.EntityFrameworkCore.Tools" />
<None Remove="Microsoft.EntityFrameworkCore.Sqlite" />
</ItemGroup>
</Project>

@ -7,6 +7,7 @@ namespace BowlingApi.Controllers;
[ApiController]
[Route("api/[controller]")]
public class JoueurController:Controller
{
private IJoueurService _joueurService;
@ -16,8 +17,18 @@ public class JoueurController:Controller
_joueurService = joueurService;
}
// GET: api/Joueur
/// <summary>
/// Get all Players
/// GET: api/joueur
/// </summary>
/// <returns>la liste des Joueurs </returns>
/// <response code="200">Retourne la liste des joueurs</response>
/// <response code="404">Si la liste est vide</response>
/// <response code="500">Si une erreur est survenue</response>
[HttpGet]
[ProducesResponseType(typeof(string), StatusCodes.Status500InternalServerError)]
[ProducesResponseType(typeof(string), StatusCodes.Status404NotFound)]
[ProducesResponseType(typeof(IEnumerable<JoueurDTO>), StatusCodes.Status200OK)]
public async Task<IActionResult> Get()
{
try
@ -36,8 +47,59 @@ public class JoueurController:Controller
}
}
// GET: api/Joueur/Djon
/// <summary>
/// Get player with pagination
/// Get : api/Joueur?page=1&pageSize=10
/// </summary>
/// <returns>la liste des Joueurs </returns>
/// <response code="200">Retourne la liste des joueurs</response>
/// <response code="404">Si la liste est vide</response>
/// <response code="500">Si une erreur est survenue</response>
[HttpGet("{page}/{pageSize}")]
[ProducesResponseType(typeof(string), StatusCodes.Status500InternalServerError)]
[ProducesResponseType(typeof(string), StatusCodes.Status404NotFound)]
[ProducesResponseType(typeof(IEnumerable<JoueurDTO>), StatusCodes.Status200OK)]
public async Task<IActionResult> 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;
}
}
/// <summary>
/// Get a player by name
/// GET: api/Joueur/Djon
/// </summary>
/// <param name="name"></param>
/// <response code="200">Retourne le joueur</response>
/// <response code="400">Si le nom du joueur est null</response>
/// <response code="404">Si le joueur n'existe pas</response>
/// <response code="500">Si une erreur est survenue</response>
[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<IActionResult> Get(string name)
{
try
@ -59,8 +121,18 @@ public class JoueurController:Controller
}
}
// POST: api/Joueur
/// <summary>
/// Creer un joueur
/// POST: api/Joueur
/// </summary>
/// <param name="joueur"></param>
/// <response code="201">Retourne le joueur créé</response>
/// <response code="400">Si le joueur est null</response>
/// <response code="500">Si une erreur est survenue</response>
[HttpPost]
[ProducesResponseType(typeof(string), StatusCodes.Status500InternalServerError)]
[ProducesResponseType(typeof(string), StatusCodes.Status400BadRequest)]
[ProducesResponseType(typeof(JoueurDTO), StatusCodes.Status201Created)]
public async Task<ActionResult<JoueurDTO>> Post([FromBody] JoueurDTO joueur)
{
try
@ -80,21 +152,34 @@ public class JoueurController:Controller
}
}
[HttpPut("{name}")]
public async Task<ActionResult<JoueurDTO>> Put(string name,[FromBody] JoueurDTO joueur)
/// <summary>
/// Modifier un joueur
/// PUT: api/Joueur/5
/// </summary>
/// <param name="id"></param>
/// <param name="joueur"></param>
/// <response code="200">Retourne le joueur modifié</response>
/// <response code="400">Si le joueur est null</response>
/// <response code="404">Si le joueur n'existe pas</response>
/// <response code="500">Si une erreur est survenue</response>
[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<ActionResult<JoueurDTO>> Put(long id,[FromBody] JoueurDTO joueur)
{
try
{
if(joueur == null)
return BadRequest("Le joueur est obligatoire");
var updateJoueur = _joueurService.Update(joueur);
if (updateJoueur.Result == null)
var updateJoueur = _joueurService.Update(id,joueur);
if (updateJoueur.Result == false)
{
return NotFound();
}
return Ok(updateJoueur);
return Ok(joueur);
}
catch (Exception e)
{

@ -1,11 +1,8 @@
using AutoMapper;
using BowlingEF.Context;
using BowlingLib.Model;
using BowlingRepository;
using BowlingRepository.Interface;
using BowlingService;
using BowlingService.Interfaces;
using Business;
using Mapper;
using Microsoft.EntityFrameworkCore;
@ -16,7 +13,11 @@ var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddSwaggerGen(c=>
{
c.SwaggerDoc("v1", new() { Title = "APi Bowling APP", Version = "v1" });
c.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, "BowlingApi.xml"));
});
builder.Services.AddAutoMapper(typeof(JoueurProfile));
builder.Services.AddScoped<IJoueurService, JoueurService>();
@ -43,9 +44,19 @@ var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "API du projet Bowling APP v1");
});
}
app.UseRouting();
app.UseEndpoints(endpoint=>
{
endpoint.MapControllers();
});
app.UseHttpsRedirection();
app.UseAuthorization();

@ -35,7 +35,8 @@ public class JoueurRepository:IJoueurRepository
public async Task<JoueurEntity> GetJoueur(long id)
{
return await _context.Joueurs.FindAsync(id);
var data= await _context.Joueurs.FindAsync(id);
return data;
}
public async Task<IEnumerable<JoueurEntity>> GetAllJoueur()

@ -7,7 +7,7 @@ public interface IJoueurService
{
Task<JoueurDTO> Add(JoueurDTO data);
Task<bool> Delete(JoueurDTO data);
Task<bool> Update(JoueurDTO data);
Task<bool> Update(long id,JoueurDTO data);
Task<JoueurDTO> GetDataWithName(string name);
Task<IEnumerable<JoueurDTO>> GetAll();
}

@ -123,12 +123,12 @@ namespace BowlingService
return _joueur;
}
public async Task<bool> Update(JoueurDTO _joueur)
public async Task<bool> Update(long id,JoueurDTO _joueur)
{
bool result = false;
try
{
JoueurEntity entity = _joueurRepository.GetJoueur(_joueur.Id).Result;
JoueurEntity entity = _joueurRepository.GetJoueur(id).Result;
if (entity!= null)
{
entity.Pseudo = _joueur.Pseudo;

@ -129,7 +129,7 @@ public class TestController
var joueurController = new JoueurController(null);
// Act
var result = await joueurController.Put(null, null);
var result = await joueurController.Put(0, null);
// Assert
result.Should().BeOfType<ActionResult<JoueurDTO>>();
@ -145,11 +145,11 @@ public class TestController
// Arrange
var joueur = new JoueurDTO { Id = 1, Pseudo = "John Doe" };
var joueurServiceMock = new Mock<IJoueurService>();
joueurServiceMock.Setup(x => x.Update(joueur)).ReturnsAsync(true);
joueurServiceMock.Setup(x => x.Update(joueur.Id,joueur)).ReturnsAsync(true);
var joueurController = new JoueurController(joueurServiceMock.Object);
// Act
var result = await joueurController.Put(joueur.Pseudo, joueur);
var result = await joueurController.Put(joueur.Id, joueur);
// Assert
result.Should().BeOfType<ActionResult<JoueurDTO>>();

Loading…
Cancel
Save