Files
game-ideas/src/GameIdeas/Server/GameIdeas.WebAPI/Controllers/UserController.cs
Egamorf 757e9db08d
All checks were successful
Game Ideas build for PR / build_blazor_app (pull_request) Successful in 52s
Crud on users
2025-04-27 19:56:17 +02:00

121 lines
3.5 KiB
C#

using GameIdeas.Shared.Constants;
using GameIdeas.Shared.Dto;
using GameIdeas.WebAPI.Exceptions;
using GameIdeas.WebAPI.Services.Users;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace GameIdeas.WebAPI.Controllers;
[ApiController]
[Route("api/[controller]")]
public class UserController(
IUserReadService userReadService,
IUserWriteService userWriteService,
ILoggerFactory loggerFactory) : Controller
{
private readonly ILogger<UserController> logger = loggerFactory.CreateLogger<UserController>();
[HttpPost("Login")]
public async Task<ActionResult<TokenDto>> Login([FromBody] UserDto model)
{
try
{
return Ok(await userReadService.Login(model));
}
catch (UserInvalidException e)
{
logger.LogInformation(e, "Missing informations for authentication");
return StatusCode(406, e.Message);
}
catch (UserUnauthorizedException e)
{
logger.LogWarning(e, "Authentication invalid with there informations");
return Unauthorized(e.Message);
}
catch (Exception e)
{
logger.LogError(e, "Internal error while search games");
return StatusCode(500, e.Message);
}
}
[Authorize(Roles = GlobalConstants.ADMINISTRATOR)]
[HttpGet("Roles")]
public async Task<ActionResult<IEnumerable<RoleDto>>> GetRoles()
{
try
{
return Ok(await userReadService.GetRoles());
}
catch (Exception e)
{
logger.LogError(e, "Internal error while get roles");
return StatusCode(500, e.Message);
}
}
[Authorize(Roles = GlobalConstants.ADMINISTRATOR)]
[HttpGet]
public async Task<ActionResult<UserListDto>> GetUsers([FromQuery] UserFilterDto filter)
{
try
{
return Ok(await userReadService.GetUsers(filter));
}
catch (Exception e)
{
logger.LogError(e, "Internal error while get users");
return StatusCode(500, e.Message);
}
}
[Authorize(Roles = GlobalConstants.ADMINISTRATOR)]
[HttpPost("Create")]
public async Task<ActionResult<IdDto>> CreateUser([FromBody] UserDto user)
{
try
{
var id = new IdDto() { Id = await userWriteService.CreateUser(user) };
return Created("/Create", id);
}
catch (Exception e)
{
logger.LogError(e, "Internal error while create user");
return StatusCode(500, e.Message);
}
}
[Authorize(Roles = GlobalConstants.ADMINISTRATOR)]
[HttpPut("Update/{userId}")]
public async Task<ActionResult<IdDto>> UpdateUser(string userId, [FromBody] UserDto user)
{
try
{
var id = new IdDto() { Id = await userWriteService.UpdateUser(userId, user) };
return Created("/Update", id);
}
catch (Exception e)
{
logger.LogError(e, "Internal error while update user");
return StatusCode(500, e.Message);
}
}
[Authorize(Roles = GlobalConstants.ADMINISTRATOR)]
[HttpDelete("Delete/{userId}")]
public async Task<ActionResult<IdDto>> DeleteUser(string userId)
{
try
{
var id = new IdDto() { Id = await userWriteService.DeleteUser(userId) };
return Created("/Delete", id);
}
catch (Exception e)
{
logger.LogError(e, "Internal error while delete user");
return StatusCode(500, e.Message);
}
}
}