< Summary

Information
Class: FAU.API.Controllers.AuthController
Assembly: FAU.API
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/AuthController.cs
Line coverage
96%
Covered lines: 79
Uncovered lines: 3
Coverable lines: 82
Total lines: 160
Line coverage: 96.3%
Branch coverage
66%
Covered branches: 8
Total branches: 12
Branch coverage: 66.6%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Login()62.5%88100%
Register()75%4483.33%
GetPermisos()100%11100%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/AuthController.cs

#LineLine coverage
 1using FAU.Logica.DTOs;
 2using FAU.Logica.Services;
 3using FAU.DataAccess.Repositories;
 4using Microsoft.AspNetCore.Authorization;
 5using Microsoft.AspNetCore.Mvc;
 6
 7namespace FAU.API.Controllers;
 8
 9/// <summary>
 10/// Controlador de autenticación
 11/// </summary>
 12[ApiController]
 13[Route("api/[controller]")]
 14public class AuthController : ControllerBase
 15{
 16    private readonly IAuthService _authService;
 17    private readonly IUsuarioService _usuarioService;
 18    private readonly IPermisoRepository _permisoRepository;
 19    private readonly ILogger<AuthController> _logger;
 20
 721    public AuthController(
 722        IAuthService authService,
 723        IUsuarioService usuarioService,
 724        IPermisoRepository permisoRepository,
 725        ILogger<AuthController> logger)
 26    {
 727        _authService = authService;
 728        _usuarioService = usuarioService;
 729        _permisoRepository = permisoRepository;
 730        _logger = logger;
 731    }
 32
 33    /// <summary>
 34    /// Login de usuario - Endpoint principal de autenticación
 35    /// POST /api/auth/login
 36    /// </summary>
 37    [HttpPost("login")]
 38    [AllowAnonymous]
 39    public async Task<IActionResult> Login([FromBody] LoginRequest request)
 40    {
 41        try
 42        {
 343            var (success, token, error) = await _authService.LoginAsync(request.Username, request.Password);
 44
 245            if (!success)
 46            {
 147                return Unauthorized(ApiResponse<string>.ErrorResult(error ?? "Credenciales inválidas"));
 48            }
 49
 150            var usuario = await _usuarioService.GetByUsernameAsync(request.Username);
 51
 152            var response = new LoginResponse
 153            {
 154                Success = true,
 155                Token = token,
 156                Usuario = usuario != null ? new UsuarioDto
 157                {
 158                    Id = usuario.Id,
 159                    Username = usuario.Username,
 160                    Estado = usuario.Estado,
 161                    PersonaId = usuario.PersonaId,
 162                    Persona = usuario.Persona != null ? new PersonaDto
 163                    {
 164                        Id = usuario.Persona.Id,
 165                        Cedula = usuario.Persona.Cedula,
 166                        Nombre = usuario.Persona.Nombre,
 167                        Apellido = usuario.Persona.Apellido,
 168                        Email = usuario.Persona.Email,
 169                        Telefono = usuario.Persona.Telefono
 170                    } : null,
 171                    Roles = usuario.Roles.Select(r => new RolDto
 172                    {
 173                        Id = r.Id,
 174                        Nombre = r.Nombre,
 175                        Descripcion = r.Descripcion,
 176                        Permisos = r.Permisos.Select(p => new PermisoDto
 177                        {
 178                            Id = p.Id,
 179                            Nombre = p.Nombre,
 180                            Descripcion = p.Descripcion
 181                        }).ToList()
 182                    }).ToList()
 183                } : null
 184            };
 85
 186            return Ok(ApiResponse<LoginResponse>.SuccessResult(response, "Login exitoso"));
 87        }
 188        catch (Exception ex)
 89        {
 190            _logger.LogError(ex, "Error en login");
 191            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 92        }
 393    }
 94
 95    /// <summary>
 96    /// Registro de nuevo usuario (público)
 97    /// NOTA: Este endpoint permite registro público. Considere deshabilitarlo en producción.
 98    /// POST /api/auth/register
 99    /// </summary>
 100    [HttpPost("register")]
 101    [AllowAnonymous]
 102    public async Task<IActionResult> Register([FromBody] RegisterRequest request)
 103    {
 104        try
 105        {
 2106            var (success, usuario, error) = await _authService.RegisterAsync(
 2107                request.Username,
 2108                request.Password,
 2109                request.PersonaId);
 110
 2111            if (!success)
 112            {
 1113                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al registrar usuario"));
 114            }
 115
 1116            var usuarioDto = new UsuarioDto
 1117            {
 1118                Id = usuario!.Id,
 1119                Username = usuario.Username,
 1120                Estado = usuario.Estado,
 1121                PersonaId = usuario.PersonaId
 1122            };
 123
 1124            return Ok(ApiResponse<UsuarioDto>.SuccessResult(usuarioDto, "Usuario registrado exitosamente"));
 125        }
 0126        catch (Exception ex)
 127        {
 0128            _logger.LogError(ex, "Error en registro");
 0129            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 130        }
 2131    }
 132
 133    /// <summary>
 134    /// Listar todos los permisos disponibles
 135    /// GET /api/auth/permisos
 136    /// </summary>
 137    [HttpGet("permisos")]
 138    [Authorize]
 139    public async Task<IActionResult> GetPermisos()
 140    {
 141        try
 142        {
 2143            var permisos = await _permisoRepository.GetAllAsync();
 144
 4145            var permisosDto = permisos.Select(p => new PermisoDto
 4146            {
 4147                Id = p.Id,
 4148                Nombre = p.Nombre,
 4149                Descripcion = p.Descripcion
 4150            }).ToList();
 151
 1152            return Ok(ApiResponse<List<PermisoDto>>.SuccessResult(permisosDto));
 153        }
 1154        catch (Exception ex)
 155        {
 1156            _logger.LogError(ex, "Error al obtener permisos");
 1157            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 158        }
 2159    }
 160}