< 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
0%
Covered lines: 0
Uncovered lines: 61
Coverable lines: 61
Total lines: 155
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 6
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
Listar()100%210%
Obtener()0%620%
Crear()0%620%
Actualizar()100%210%
DarBaja()100%210%
ObtenerUsuarioId()0%620%
EsNoEncontrado(...)100%210%

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
 022    public CompPersonal048018Controller(
 023        ICompPersonal048018Service servicio,
 024        ICurrentUserContext usuarioActual,
 025        ILogger<CompPersonal048018Controller> logger)
 26    {
 027        _servicio = servicio;
 028        _usuarioActual = usuarioActual;
 029        _logger = logger;
 030    }
 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        {
 042            var resultado = await _servicio.ObtenerPaginadoAsync(pagina, tamano, busqueda, estado);
 043            return Ok(ApiResponse<PagedResult<CompPersonal048018Dto>>.SuccessResult(resultado));
 44        }
 045        catch (Exception ex)
 46        {
 047            _logger.LogError(ex, "Error al listar Compensación Personal (048.018)");
 048            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 49        }
 050    }
 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        {
 059            var item = await _servicio.ObtenerPorIdAsync(id);
 060            return item is null
 061                ? NotFound(ApiResponse<string>.ErrorResult("Compensación Personal no encontrada"))
 062                : 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        }
 069    }
 70
 71    [HttpPost]
 72    [ProducesResponseType(typeof(ApiResponse<CompPersonal048018Dto>), StatusCodes.Status201Created)]
 73    public async Task<IActionResult> Crear([FromBody] CrearCompPersonal048018Request request)
 74    {
 75        try
 76        {
 077            var item = await _servicio.CrearAsync(request, ObtenerUsuarioId(), _usuarioActual.Host);
 078            return CreatedAtAction(
 079                nameof(Obtener),
 080                new { id = item.Id },
 081                ApiResponse<CompPersonal048018Dto>.SuccessResult(item, "Compensación Personal creada exitosamente"));
 82        }
 083        catch (ArgumentException ex)
 84        {
 085            return EsNoEncontrado(ex.Message)
 086                ? NotFound(ApiResponse<string>.ErrorResult(ex.Message))
 087                : BadRequest(ApiResponse<string>.ErrorResult(ex.Message));
 88        }
 089        catch (InvalidOperationException ex)
 90        {
 091            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        }
 098    }
 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        {
 0106            var item = await _servicio.ActualizarAsync(id, request, ObtenerUsuarioId(), _usuarioActual.Host);
 0107            return Ok(ApiResponse<CompPersonal048018Dto>.SuccessResult(
 0108                item, "Compensación Personal actualizada exitosamente"));
 109        }
 0110        catch (ArgumentException ex)
 111        {
 0112            return NotFound(ApiResponse<string>.ErrorResult(ex.Message));
 113        }
 0114        catch (InvalidOperationException ex)
 115        {
 0116            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        }
 0123    }
 124
 125    [HttpDelete("{id:long}")]
 126    [ProducesResponseType(StatusCodes.Status204NoContent)]
 127    public async Task<IActionResult> DarBaja(long id)
 128    {
 129        try
 130        {
 0131            await _servicio.DarBajaAsync(id, ObtenerUsuarioId(), _usuarioActual.Host);
 0132            return NoContent();
 133        }
 0134        catch (ArgumentException ex)
 135        {
 0136            return NotFound(ApiResponse<string>.ErrorResult(ex.Message));
 137        }
 0138        catch (InvalidOperationException ex)
 139        {
 0140            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        }
 0147    }
 148
 149    private long ObtenerUsuarioId() =>
 0150        _usuarioActual.UserId
 0151        ?? throw new UnauthorizedAccessException("No se pudo identificar al usuario autenticado.");
 152
 153    private static bool EsNoEncontrado(string mensaje) =>
 0154        mensaje.Contains("no encontr", StringComparison.OrdinalIgnoreCase);
 155}