< Summary

Information
Class: FAU.API.Controllers.SituacionesController
Assembly: FAU.API
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/SituacionesController.cs
Line coverage
68%
Covered lines: 22
Uncovered lines: 10
Coverable lines: 32
Total lines: 111
Line coverage: 68.7%
Branch coverage
40%
Covered branches: 8
Total branches: 20
Branch coverage: 40%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
ObtenerSituaciones()100%11100%
CrearSituacion()50%12860%
ActualizarSituacion()33.33%301250%

File(s)

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

#LineLine coverage
 1using FAU.Logica.DTOs;
 2using FAU.Logica.Services;
 3using Microsoft.AspNetCore.Authorization;
 4using Microsoft.AspNetCore.Http;
 5using Microsoft.AspNetCore.Mvc;
 6
 7namespace FAU.API.Controllers;
 8
 9[ApiController]
 10[Route("api/[controller]")]
 11[Authorize]
 12[Produces("application/json")]
 13public class SituacionesController : ControllerBase
 14{
 15    private readonly ISituacionService _situacionService;
 16    private readonly ILogger<SituacionesController> _logger;
 17
 718    public SituacionesController(ISituacionService situacionService, ILogger<SituacionesController> logger)
 19    {
 720        _situacionService = situacionService;
 721        _logger = logger;
 722    }
 23
 24    /// <summary>
 25    /// Listar todas las situaciones vigentes
 26    /// GET /api/situaciones
 27    /// </summary>
 28    [HttpGet]
 29    [ProducesResponseType(typeof(ApiResponse<IEnumerable<SituacionDto>>), StatusCodes.Status200OK)]
 30    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 31    public async Task<IActionResult> ObtenerSituaciones()
 32    {
 33        try
 34        {
 335            var situaciones = await _situacionService.ObtenerTodosAsync();
 236            return Ok(ApiResponse<IEnumerable<SituacionDto>>.SuccessResult(situaciones));
 37        }
 138        catch (Exception ex)
 39        {
 140            _logger.LogError(ex, "Error al obtener situaciones");
 141            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 42        }
 343    }
 44
 45    /// <summary>
 46    /// Crear una nueva situación
 47    /// POST /api/situaciones
 48    /// </summary>
 49    [HttpPost]
 50    [Authorize(Roles = "Administrador")]
 51    [ProducesResponseType(typeof(ApiResponse<SituacionDto>), StatusCodes.Status201Created)]
 52    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status400BadRequest)]
 53    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status409Conflict)]
 54    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 55    public async Task<IActionResult> CrearSituacion([FromBody] CrearSituacionRequest request)
 56    {
 57        try
 58        {
 259            var (exito, resultado, error) = await _situacionService.CrearAsync(request);
 60
 261            if (!exito)
 62            {
 163                if (error?.Contains("ya existe", StringComparison.OrdinalIgnoreCase) == true)
 164                    return Conflict(ApiResponse<string>.ErrorResult(error));
 065                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al crear situación"));
 66            }
 67
 168            return CreatedAtAction(nameof(ObtenerSituaciones), ApiResponse<SituacionDto>.SuccessResult(resultado!, "Situ
 69        }
 070        catch (Exception ex)
 71        {
 072            _logger.LogError(ex, "Error al crear situación");
 073            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 74        }
 275    }
 76
 77    /// <summary>
 78    /// Actualizar una situación existente
 79    /// PUT /api/situaciones/{id}
 80    /// </summary>
 81    [HttpPut("{id}")]
 82    [Authorize(Roles = "Administrador")]
 83    [ProducesResponseType(typeof(ApiResponse<SituacionDto>), StatusCodes.Status200OK)]
 84    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status400BadRequest)]
 85    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status404NotFound)]
 86    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status409Conflict)]
 87    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 88    public async Task<IActionResult> ActualizarSituacion(long id, [FromBody] ActualizarSituacionRequest request)
 89    {
 90        try
 91        {
 292            var (exito, resultado, error) = await _situacionService.ActualizarAsync(id, request);
 93
 294            if (!exito)
 95            {
 196                if (error?.Contains("no encontrada", StringComparison.OrdinalIgnoreCase) == true)
 197                    return NotFound(ApiResponse<string>.ErrorResult(error));
 098                if (error?.Contains("ya existe", StringComparison.OrdinalIgnoreCase) == true)
 099                    return Conflict(ApiResponse<string>.ErrorResult(error));
 0100                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al actualizar situación"));
 101            }
 102
 1103            return Ok(ApiResponse<SituacionDto>.SuccessResult(resultado!, "Situación actualizada exitosamente"));
 104        }
 0105        catch (Exception ex)
 106        {
 0107            _logger.LogError(ex, "Error al actualizar situación {Id}", id);
 0108            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 109        }
 2110    }
 111}