You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
API_SQLuedo/API_SQLuedo/API/Controllers/UsersController.cs

130 lines
4.8 KiB

using DbContextLib;
using Entities.SQLudeoDB;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Model;
using Model.Business;
using Model.DTO;
using Model.Mappers;
using Services;
namespace API.Controllers
{
[Route("api/[controller]")]
[Authorize]
[ApiController]
public class UsersController : Controller
{
private IDataService<UserDTO?> _dataService;
private readonly ILogger<UsersController> _logger;
public UsersController(IDataService<UserDTO?> dataService, ILogger<UsersController> logger)
{
_dataService = dataService;
_logger = logger;
}
[HttpGet("users/{page}/{number}")]
public async Task<IActionResult> GetUsers(int page, int number)
{
var nbUser = (await _dataService.UserService.GetItems(page, number)).ToList().Count();
if(nbUser == 0)
{
_logger.LogError("[ERREUR] Aucun utilisateur trouvé.");
return StatusCode(204);
}
_logger.LogInformation("[INFORMATION] {nb} Utilisateur(s) trouvé(s)", nbUser);
return Ok(_dataService.UserService.GetItems(page, number));
}
[HttpGet("user/id/{id}")]
public async Task<IActionResult> GetUserById(int id)
{
try
{
_logger.LogInformation("[INFORMATION] Utilisateur avec l'id {id} a été trouvé.", id);
return Ok(await _dataService.UserService.GetItems(1, 1, UserProperty.Id.ToString(), id));
}
catch (InvalidOperationException)
{
_logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id {id}.", id);
return NotFound();
}
}
[HttpGet("user/username/{username}")]
public async Task<IActionResult> GetUserByUsername(string username)
{
try
{
_logger.LogInformation("[INFORMATION] Utilisateur avec le username {username} a été trouvé.", username);
return Ok(await _dataService.UserService.GetItems(1, 1, UserProperty.Username.ToString(), username));
}
catch (InvalidOperationException)
{
_logger.LogError("[ERREUR] Aucun utilisateur trouvé avec le username {username}.", username);
return NotFound();
}
}
[HttpDelete]
public async Task<IActionResult> DeleteUser(int id)
{
var success = await _dataService.UserService.DeleteItem(id);
if(success)
{
_logger.LogInformation("[INFORMATION] L'utilisateur avec l'id {id} a été supprimé.", id);
return Ok(_dataService.UserService.DeleteItem(id));
} else
{
_logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id {id}.", id);
return NotFound();
}
}
[HttpPost]
public async Task<IActionResult> CreateUser([FromBody]UserDTO dto)
{
if (dto.Username == null || dto.Password == null || dto.Email == null)
{
return BadRequest();
}
try
{
_logger.LogInformation("[INFORMATION] Un utilisateur a été créé : username - {username}, password - {password}, email - {email}, isAdmin - {isAdmin}", dto.Username, dto.Password, dto.Email, dto.IsAdmin);
var user = await _dataService.UserService.AddItem(dto);
return Created(nameof(GetUsers), user);
}
catch (InvalidOperationException)
{
return StatusCode(409);
}
}
[HttpPut]
public async Task<IActionResult> UpdateUser(int id, [FromBody] UserDTO userDTO)
{
if(id != userDTO.Id)
{
_logger.LogError("[ERREUR] Problème ID - La mise à jour de l'utilisateur avec l'id {id} a échouée.", id);
return BadRequest();
}
if(!ModelState.IsValid)
{
_logger.LogError("[ERREUR] Problème controlleur - La mise à jour de l'utilisateur avec l'id {id} a échouée.", id);
return BadRequest();
}
if(userDTO != null)
{
_logger.LogInformation("[INFORMATION] La mise à jour de l'utilisateur avec l'id {id} a été effectuée", id);
return Ok(_dataService.UserService.UpdateItem<UserDTO>(id, userDTO));
}
_logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id {id}.", id);
return NotFound();
}
}
}