< Summary

Information
Class: FAU.API.Controllers.GradosController
Assembly: FAU.API
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/GradosController.cs
Line coverage
72%
Covered lines: 26
Uncovered lines: 10
Coverable lines: 36
Total lines: 102
Line coverage: 72.2%
Branch coverage
50%
Covered branches: 10
Total branches: 20
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
ObtenerGrados()100%11100%
CrearGrado()75%10866.66%
ActualizarGrado()33.33%231257.14%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/GradosController.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 GradosController : ControllerBase
 12{
 13    private readonly IGradoService _gradoService;
 14    private readonly ILogger<GradosController> _logger;
 15
 716    public GradosController(IGradoService gradoService, ILogger<GradosController> logger)
 17    {
 718        _gradoService = gradoService;
 719        _logger = logger;
 720    }
 21
 22    /// <summary>
 23    /// Listar todos los grados vigentes
 24    /// GET /api/grados
 25    /// </summary>
 26    [HttpGet]
 27    public async Task<IActionResult> ObtenerGrados()
 28    {
 29        try
 30        {
 331            var grados = await _gradoService.ObtenerTodosAsync();
 232            return Ok(ApiResponse<IEnumerable<GradoDto>>.SuccessResult(grados));
 33        }
 134        catch (Exception ex)
 35        {
 136            _logger.LogError(ex, "Error al obtener grados");
 137            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 38        }
 339    }
 40
 41    /// <summary>
 42    /// Crear un nuevo grado
 43    /// POST /api/grados
 44    /// </summary>
 45    [HttpPost]
 46    [Authorize(Roles = "Administrador")]
 47    public async Task<IActionResult> CrearGrado([FromBody] CrearGradoRequest request)
 48    {
 49        try
 50        {
 251            var (exito, resultado, error) = await _gradoService.CrearAsync(
 252                request.Codigo, request.Denominacion, request.Orden,
 253                request.EscalafonId, request.EsOficial, request.EsSubalterno, request.Vigente);
 54
 255            if (!exito)
 56            {
 157                if (error?.Contains("ya existe", StringComparison.OrdinalIgnoreCase) == true)
 058                    return Conflict(ApiResponse<string>.ErrorResult(error));
 159                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al crear grado"));
 60            }
 61
 162            return CreatedAtAction(nameof(ObtenerGrados), ApiResponse<GradoDto>.SuccessResult(resultado!, "Grado creado 
 63        }
 064        catch (Exception ex)
 65        {
 066            _logger.LogError(ex, "Error al crear grado");
 067            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 68        }
 269    }
 70
 71    /// <summary>
 72    /// Actualizar un grado existente
 73    /// PUT /api/grados/{id}
 74    /// </summary>
 75    [HttpPut("{id}")]
 76    [Authorize(Roles = "Administrador")]
 77    public async Task<IActionResult> ActualizarGrado(long id, [FromBody] ActualizarGradoRequest request)
 78    {
 79        try
 80        {
 281            var (exito, resultado, error) = await _gradoService.ActualizarAsync(
 282                id, request.Codigo, request.Denominacion, request.Orden,
 283                request.EscalafonId, request.EsOficial, request.EsSubalterno, request.Vigente);
 84
 285            if (!exito)
 86            {
 187                if (error?.Contains("no encontrado", StringComparison.OrdinalIgnoreCase) == true)
 188                    return NotFound(ApiResponse<string>.ErrorResult(error));
 089                if (error?.Contains("ya existe", StringComparison.OrdinalIgnoreCase) == true)
 090                    return Conflict(ApiResponse<string>.ErrorResult(error));
 091                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al actualizar grado"));
 92            }
 93
 194            return Ok(ApiResponse<GradoDto>.SuccessResult(resultado!, "Grado actualizado exitosamente"));
 95        }
 096        catch (Exception ex)
 97        {
 098            _logger.LogError(ex, "Error al actualizar grado {Id}", id);
 099            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 100        }
 2101    }
 102}