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 logger, IUserService userService) : ControllerBase { [HttpGet] public async Task 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); } } } }