using Distribution.Infra.Authorization; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace Distribution.Features.Auth; [ApiController] [Route("api/auth")] public class AuthController(AuthService service, ICurrentUserService currentUser) : ControllerBase { private static IActionResult ToActionResult(AuthHexResponse result) => result.Success ? new OkObjectResult(result) : new ObjectResult(result) { StatusCode = result.StatusCode is >= 400 and < 600 ? result.StatusCode : 401 }; [HttpPost("login")] [AllowAnonymous] public async Task Login(LoginRequest request, CancellationToken ct) => ToActionResult(await service.LoginAsync(request, ct)); [HttpPost("register")] [AllowAnonymous] public async Task Register(RegisterRequest request, CancellationToken ct) => ToActionResult(await service.RegisterAsync(request, ct)); [HttpGet("me")] [Authorize] public async Task Me(CancellationToken ct) { var userId = currentUser.UserId ?? throw new UnauthorizedAccessException(); return ToActionResult(await service.GetUserDetailsAsync(userId, ct)); } [HttpPost("logout")] [Authorize] public async Task Logout(CancellationToken ct) { var token = Request.Headers.Authorization.ToString().Replace("Bearer ", "", StringComparison.OrdinalIgnoreCase); return ToActionResult(await service.LogoutAsync(token, ct)); } }