< Summary

Information
Class: FAU.API.Controllers.UnidadesController
Assembly: FAU.API
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/UnidadesController.cs
Line coverage
68%
Covered lines: 22
Uncovered lines: 10
Coverable lines: 32
Total lines: 98
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%
ObtenerUnidades()100%11100%
CrearUnidad()50%12860%
ActualizarUnidad()33.33%301250%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/UnidadesController.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[ApiController]
 9[Route("api/[controller]")]
 10[Authorize]
 11public class UnidadesController : ControllerBase
 12{
 13    private readonly IUnidadService _unidadService;
 14    private readonly ILogger<UnidadesController> _logger;
 15
 816    public UnidadesController(IUnidadService unidadService, ILogger<UnidadesController> logger)
 17    {
 818        _unidadService = unidadService;
 819        _logger = logger;
 820    }
 21
 22    /// <summary>
 23    /// Listar todas las unidades vigentes con sus sub-unidades anidadas
 24    /// GET /api/unidades
 25    /// </summary>
 26    [HttpGet]
 27    public async Task<IActionResult> ObtenerUnidades()
 28    {
 29        try
 30        {
 431            var unidades = await _unidadService.ObtenerTodosAsync();
 332            return Ok(ApiResponse<IEnumerable<UnidadDto>>.SuccessResult(unidades));
 33        }
 134        catch (Exception ex)
 35        {
 136            _logger.LogError(ex, "Error al obtener unidades");
 137            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 38        }
 439    }
 40
 41    /// <summary>
 42    /// Crear una nueva unidad
 43    /// POST /api/unidades
 44    /// </summary>
 45    [HttpPost]
 46    [Authorize(Roles = "Administrador")]
 47    public async Task<IActionResult> CrearUnidad([FromBody] CrearUnidadRequest request)
 48    {
 49        try
 50        {
 251            var (exito, resultado, error) = await _unidadService.CrearAsync(request.Codigo, request.Denominacion, reques
 52
 253            if (!exito)
 54            {
 155                if (error?.Contains("ya existe", StringComparison.OrdinalIgnoreCase) == true)
 156                    return Conflict(ApiResponse<string>.ErrorResult(error));
 057                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al crear unidad"));
 58            }
 59
 160            return CreatedAtAction(nameof(ObtenerUnidades), ApiResponse<UnidadDto>.SuccessResult(resultado!, "Unidad cre
 61        }
 062        catch (Exception ex)
 63        {
 064            _logger.LogError(ex, "Error al crear unidad");
 065            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 66        }
 267    }
 68
 69    /// <summary>
 70    /// Actualizar una unidad existente
 71    /// PUT /api/unidades/{id}
 72    /// </summary>
 73    [HttpPut("{id}")]
 74    [Authorize(Roles = "Administrador")]
 75    public async Task<IActionResult> ActualizarUnidad(long id, [FromBody] ActualizarUnidadRequest request)
 76    {
 77        try
 78        {
 279            var (exito, resultado, error) = await _unidadService.ActualizarAsync(id, request.Codigo, request.Denominacio
 80
 281            if (!exito)
 82            {
 183                if (error?.Contains("no encontrada", StringComparison.OrdinalIgnoreCase) == true)
 184                    return NotFound(ApiResponse<string>.ErrorResult(error));
 085                if (error?.Contains("ya existe", StringComparison.OrdinalIgnoreCase) == true)
 086                    return Conflict(ApiResponse<string>.ErrorResult(error));
 087                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al actualizar unidad"));
 88            }
 89
 190            return Ok(ApiResponse<UnidadDto>.SuccessResult(resultado!, "Unidad actualizada exitosamente"));
 91        }
 092        catch (Exception ex)
 93        {
 094            _logger.LogError(ex, "Error al actualizar unidad {Id}", id);
 095            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 96        }
 297    }
 98}