< Summary

Information
Class: FAU.API.Controllers.CompPersonal048018Controller
Assembly: FAU.API
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/CompPersonal048018Controller.cs
Line coverage
80%
Covered lines: 49
Uncovered lines: 12
Coverable lines: 61
Total lines: 155
Line coverage: 80.3%
Branch coverage
83%
Covered branches: 5
Total branches: 6
Branch coverage: 83.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Listar()100%11100%
Obtener()100%2262.5%
Crear()100%2280%
Actualizar()100%1172.72%
DarBaja()100%1170%
ObtenerUsuarioId()50%22100%
EsNoEncontrado(...)100%11100%

File(s)

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

#LineLine coverage
 1using FAU.Logica.DTOs;
 2using FAU.Logica.Services;
 3using Microsoft.AspNetCore.Authorization;
 4using Microsoft.AspNetCore.Mvc;
 5
 6namespace FAU.API.Controllers;
 7
 8/// <summary>
 9/// Gestión de Compensación Personal (048.018, "COMP PERS #400 Y 250") — importe
 10/// individual por persona, vigente hasta que se dé de baja.
 11/// </summary>
 12[ApiController]
 13[Route("api/comp-personal-048018")]
 14[Authorize(Roles = "Administrador,Supervisor,Usuario")]
 15[Produces("application/json")]
 16public class CompPersonal048018Controller : ControllerBase
 17{
 18    private readonly ICompPersonal048018Service _servicio;
 19    private readonly ICurrentUserContext _usuarioActual;
 20    private readonly ILogger<CompPersonal048018Controller> _logger;
 21
 1422    public CompPersonal048018Controller(
 1423        ICompPersonal048018Service servicio,
 1424        ICurrentUserContext usuarioActual,
 1425        ILogger<CompPersonal048018Controller> logger)
 26    {
 1427        _servicio = servicio;
 1428        _usuarioActual = usuarioActual;
 1429        _logger = logger;
 1430    }
 31
 32    [HttpGet]
 33    [ProducesResponseType(typeof(ApiResponse<PagedResult<CompPersonal048018Dto>>), StatusCodes.Status200OK)]
 34    public async Task<IActionResult> Listar(
 35        [FromQuery] int pagina = 1,
 36        [FromQuery] int tamano = 20,
 37        [FromQuery] string? busqueda = null,
 38        [FromQuery] string? estado = null)
 39    {
 40        try
 41        {
 242            var resultado = await _servicio.ObtenerPaginadoAsync(pagina, tamano, busqueda, estado);
 143            return Ok(ApiResponse<PagedResult<CompPersonal048018Dto>>.SuccessResult(resultado));
 44        }
 145        catch (Exception ex)
 46        {
 147            _logger.LogError(ex, "Error al listar Compensación Personal (048.018)");
 148            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 49        }
 250    }
 51
 52    [HttpGet("{id:long}")]
 53    [ProducesResponseType(typeof(ApiResponse<CompPersonal048018Dto>), StatusCodes.Status200OK)]
 54    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status404NotFound)]
 55    public async Task<IActionResult> Obtener(long id)
 56    {
 57        try
 58        {
 259            var item = await _servicio.ObtenerPorIdAsync(id);
 260            return item is null
 261                ? NotFound(ApiResponse<string>.ErrorResult("Compensación Personal no encontrada"))
 262                : Ok(ApiResponse<CompPersonal048018Dto>.SuccessResult(item));
 63        }
 064        catch (Exception ex)
 65        {
 066            _logger.LogError(ex, "Error al obtener Compensación Personal {Id}", id);
 067            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 68        }
 269    }
 70
 71    [HttpPost]
 72    [ProducesResponseType(typeof(ApiResponse<CompPersonal048018Dto>), StatusCodes.Status201Created)]
 73    public async Task<IActionResult> Crear([FromBody] CrearCompPersonal048018Request request)
 74    {
 75        try
 76        {
 477            var item = await _servicio.CrearAsync(request, ObtenerUsuarioId(), _usuarioActual.Host);
 178            return CreatedAtAction(
 179                nameof(Obtener),
 180                new { id = item.Id },
 181                ApiResponse<CompPersonal048018Dto>.SuccessResult(item, "Compensación Personal creada exitosamente"));
 82        }
 283        catch (ArgumentException ex)
 84        {
 285            return EsNoEncontrado(ex.Message)
 286                ? NotFound(ApiResponse<string>.ErrorResult(ex.Message))
 287                : BadRequest(ApiResponse<string>.ErrorResult(ex.Message));
 88        }
 189        catch (InvalidOperationException ex)
 90        {
 191            return Conflict(ApiResponse<string>.ErrorResult(ex.Message));
 92        }
 093        catch (Exception ex)
 94        {
 095            _logger.LogError(ex, "Error al crear Compensación Personal");
 096            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 97        }
 498    }
 99
 100    [HttpPut("{id:long}")]
 101    [ProducesResponseType(typeof(ApiResponse<CompPersonal048018Dto>), StatusCodes.Status200OK)]
 102    public async Task<IActionResult> Actualizar(long id, [FromBody] ActualizarCompPersonal048018Request request)
 103    {
 104        try
 105        {
 3106            var item = await _servicio.ActualizarAsync(id, request, ObtenerUsuarioId(), _usuarioActual.Host);
 1107            return Ok(ApiResponse<CompPersonal048018Dto>.SuccessResult(
 1108                item, "Compensación Personal actualizada exitosamente"));
 109        }
 1110        catch (ArgumentException ex)
 111        {
 1112            return NotFound(ApiResponse<string>.ErrorResult(ex.Message));
 113        }
 1114        catch (InvalidOperationException ex)
 115        {
 1116            return Conflict(ApiResponse<string>.ErrorResult(ex.Message));
 117        }
 0118        catch (Exception ex)
 119        {
 0120            _logger.LogError(ex, "Error al actualizar Compensación Personal {Id}", id);
 0121            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 122        }
 3123    }
 124
 125    [HttpDelete("{id:long}")]
 126    [ProducesResponseType(StatusCodes.Status204NoContent)]
 127    public async Task<IActionResult> DarBaja(long id)
 128    {
 129        try
 130        {
 3131            await _servicio.DarBajaAsync(id, ObtenerUsuarioId(), _usuarioActual.Host);
 1132            return NoContent();
 133        }
 1134        catch (ArgumentException ex)
 135        {
 1136            return NotFound(ApiResponse<string>.ErrorResult(ex.Message));
 137        }
 1138        catch (InvalidOperationException ex)
 139        {
 1140            return Conflict(ApiResponse<string>.ErrorResult(ex.Message));
 141        }
 0142        catch (Exception ex)
 143        {
 0144            _logger.LogError(ex, "Error al dar de baja Compensación Personal {Id}", id);
 0145            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 146        }
 3147    }
 148
 149    private long ObtenerUsuarioId() =>
 10150        _usuarioActual.UserId
 10151        ?? throw new UnauthorizedAccessException("No se pudo identificar al usuario autenticado.");
 152
 153    private static bool EsNoEncontrado(string mensaje) =>
 2154        mensaje.Contains("no encontr", StringComparison.OrdinalIgnoreCase);
 155}