feat(UserConroller): Added method to get authorized user.

This commit is contained in:
Developer 02 2024-10-25 00:39:05 +02:00
parent 79167a7f9d
commit eb45c6aefa
2 changed files with 46 additions and 2 deletions

View File

@ -5,7 +5,7 @@ namespace WorkFlow.API.Controllers
{
public static class ControllerExtensions
{
public static bool? TryGetUserId(this ControllerBase controller, out int id)
public static bool TryGetUserId(this ControllerBase controller, out int? id)
{
var value = controller.User.FindFirstValue(ClaimTypes.NameIdentifier);
@ -22,7 +22,7 @@ namespace WorkFlow.API.Controllers
}
else
{
id = default;
id = null;
return false;
}
}

View File

@ -0,0 +1,44 @@
using DigitalData.Core.DTO;
using DigitalData.UserManager.Application.Contracts;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace WorkFlow.API.Controllers
{
[Route("api/[controller]")]
[ApiController]
[Authorize]
public class UserController(ILogger<UserController> logger, IUserService userService) : ControllerBase
{
[HttpGet]
public async Task<IActionResult> GetAsync()
{
try
{
if (!this.TryGetUserId(out int? id))
{
logger.LogError("Authorization failed: User ID claim not found.");
return StatusCode(StatusCodes.Status500InternalServerError, "Failed to retrieve user identity.");
}
else if(id is int id_int)
return await userService.ReadByIdAsync(id_int).ThenAsync(
Success: Ok,
Fail: IActionResult (msg, ntc) =>
{
logger.LogNotice(ntc);
return NotFound();
});
else
{
logger.LogError("Invalid user ID: Retrieved ID is null or not an integer.");
return StatusCode(StatusCodes.Status500InternalServerError, "Invalid user ID.");
}
}
catch(Exception ex)
{
logger.LogError(exception: ex, "{message}", ex.Message);
return StatusCode(StatusCodes.Status500InternalServerError);
}
}
}
}