🎯 GamingHub.API
Couche API - Controllers et configuration ASP.NET Core
📋 À implémenter ici
Controllers (Controllers/)
AuthController.cs- Register, LoginTournamentsController.cs- CRUD tournoisTeamsController.cs- CRUD équipes
Middleware (Middleware/)
GlobalExceptionHandler.cs- Gestion globale des erreurs
⚠️ Règles importantes
- ✅ Controllers doivent être minimalistes - Déléguer aux services
- ✅ Utiliser les attributs [Authorize] pour protéger les endpoints
- ✅ Retourner des DTOs (pas des entités Domain)
- ✅ Logger les actions importantes avec Serilog
📝 Exemple de controller
[ApiController]
[Route("api/[controller]")]
public class TournamentsController : ControllerBase
{
private readonly ITournamentService _tournamentService;
private readonly ILogger<TournamentsController> _logger;
public TournamentsController(
ITournamentService tournamentService,
ILogger<TournamentsController> logger)
{
_tournamentService = tournamentService;
_logger = logger;
}
[HttpPost]
[Authorize(Roles = "Organizer,Admin")]
public async Task<IActionResult> Create([FromBody] CreateTournamentDto dto)
{
_logger.LogInformation("Creating tournament {Name}", dto.Name);
var tournament = await _tournamentService.CreateAsync(dto);
return CreatedAtAction(nameof(GetById), new { id = tournament.Id }, tournament);
}
[HttpGet("{id:guid}")]
public async Task<IActionResult> GetById(Guid id)
{
var tournament = await _tournamentService.GetByIdAsync(id);
if (tournament == null)
return NotFound();
return Ok(tournament);
}
}
📝 Middleware d'erreurs
public class GlobalExceptionHandler
{
private readonly RequestDelegate _next;
private readonly ILogger<GlobalExceptionHandler> _logger;
public GlobalExceptionHandler(RequestDelegate next, ILogger<GlobalExceptionHandler> logger)
{
_next = next;
_logger = logger;
}
public async Task InvokeAsync(HttpContext context)
{
try
{
await _next(context);
}
catch (DomainException ex)
{
_logger.LogWarning(ex, "Domain exception occurred");
context.Response.StatusCode = 400;
await context.Response.WriteAsJsonAsync(new { error = ex.Message });
}
catch (Exception ex)
{
_logger.LogError(ex, "Unhandled exception occurred");
context.Response.StatusCode = 500;
await context.Response.WriteAsJsonAsync(new { error = "An error occurred" });
}
}
}
🔧 Configuration dans Program.cs
N'oubliez pas de configurer :
- JWT Authentication
- FluentValidation
- DbContext
- Services (DI)
- Middleware global d'erreurs