< 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: 73
Uncovered lines: 3
Coverable lines: 76
Total lines: 153
Line coverage: 96%
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.GetByUsernameWithRolesAsync(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.PrimerNombre,
 167                        Apellido = usuario.Persona.PrimerApellido,
 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                    }).ToList()
 177                } : null
 178            };
 79
 180            return Ok(ApiResponse<LoginResponse>.SuccessResult(response, "Login exitoso"));
 81        }
 182        catch (Exception ex)
 83        {
 184            _logger.LogError(ex, "Error en login");
 185            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 86        }
 387    }
 88
 89    /// <summary>
 90    /// Registro de nuevo usuario. Requiere autenticación con rol Administrador.
 91    /// POST /api/auth/register
 92    /// </summary>
 93    [HttpPost("register")]
 94    [Authorize(Roles = "Administrador")]
 95    public async Task<IActionResult> Register([FromBody] RegisterRequest request)
 96    {
 97        try
 98        {
 299            var (success, usuario, error) = await _authService.RegisterAsync(
 2100                request.Username,
 2101                request.Password,
 2102                request.PersonaId);
 103
 2104            if (!success)
 105            {
 1106                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al registrar usuario"));
 107            }
 108
 1109            var usuarioDto = new UsuarioDto
 1110            {
 1111                Id = usuario!.Id,
 1112                Username = usuario.Username,
 1113                Estado = usuario.Estado,
 1114                PersonaId = usuario.PersonaId
 1115            };
 116
 1117            return Ok(ApiResponse<UsuarioDto>.SuccessResult(usuarioDto, "Usuario registrado exitosamente"));
 118        }
 0119        catch (Exception ex)
 120        {
 0121            _logger.LogError(ex, "Error en registro");
 0122            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 123        }
 2124    }
 125
 126    /// <summary>
 127    /// Listar todos los permisos disponibles
 128    /// GET /api/auth/permisos
 129    /// </summary>
 130    [HttpGet("permisos")]
 131    [Authorize]
 132    public async Task<IActionResult> GetPermisos()
 133    {
 134        try
 135        {
 2136            var permisos = await _permisoRepository.GetAllAsync();
 137
 4138            var permisosDto = permisos.Select(p => new PermisoDto
 4139            {
 4140                Id = p.Id,
 4141                Nombre = p.Nombre,
 4142                Descripcion = p.Descripcion
 4143            }).ToList();
 144
 1145            return Ok(ApiResponse<List<PermisoDto>>.SuccessResult(permisosDto));
 146        }
 1147        catch (Exception ex)
 148        {
 1149            _logger.LogError(ex, "Error al obtener permisos");
 1150            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 151        }
 2152    }
 153}