using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using Refit; namespace Core.Cerberos.BFF.Api.Controllers { [Route("api/[controller]")] [ApiController] public class BaseController(ILogger logger) : ControllerBase { private readonly ILogger _logger = logger; protected Guid TrackingId => (Guid)(HttpContext.Items["TrackingId"] ?? Guid.NewGuid()); protected async Task Handle(Func>> apiCall) where T : class { var response = await apiCall().ConfigureAwait(false); _logger.LogInformation($"{TrackingId} - {response.RequestMessage?.Method} {response.RequestMessage?.RequestUri} - Status: {response.StatusCode}"); return FromAPIResponse(response); } private IActionResult FromAPIResponse(ApiResponse response) where T : class { var errorContent = JsonConvert.DeserializeObject(response.Error?.Content ?? string.Empty) ?? string.Empty; return StatusCode((int)response.StatusCode, (response.Content is not null) ? response.Content : errorContent); } } }