< Summary

Information
Class: FAU.API.Controllers.ProgramasController
Assembly: FAU.API
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/ProgramasController.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%
ObtenerProgramas()100%11100%
CrearPrograma()50%12860%
ActualizarPrograma()33.33%301250%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/ProgramasController.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 ProgramasController : ControllerBase
 12{
 13    private readonly IProgramaService _programaService;
 14    private readonly ILogger<ProgramasController> _logger;
 15
 716    public ProgramasController(IProgramaService programaService, ILogger<ProgramasController> logger)
 17    {
 718        _programaService = programaService;
 719        _logger = logger;
 720    }
 21
 22    /// <summary>
 23    /// Listar todos los programas vigentes
 24    /// GET /api/programas
 25    /// </summary>
 26    [HttpGet]
 27    public async Task<IActionResult> ObtenerProgramas()
 28    {
 29        try
 30        {
 331            var programas = await _programaService.ObtenerTodosAsync();
 232            return Ok(ApiResponse<IEnumerable<ProgramaDto>>.SuccessResult(programas));
 33        }
 134        catch (Exception ex)
 35        {
 136            _logger.LogError(ex, "Error al obtener programas");
 137            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 38        }
 339    }
 40
 41    /// <summary>
 42    /// Crear un nuevo programa
 43    /// POST /api/programas
 44    /// </summary>
 45    [HttpPost]
 46    [Authorize(Roles = "Administrador")]
 47    public async Task<IActionResult> CrearPrograma([FromBody] CrearProgramaRequest request)
 48    {
 49        try
 50        {
 251            var (exito, resultado, error) = await _programaService.CrearAsync(request.Codigo, request.Denominacion, requ
 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 programa"));
 58            }
 59
 160            return CreatedAtAction(nameof(ObtenerProgramas), ApiResponse<ProgramaDto>.SuccessResult(resultado!, "Program
 61        }
 062        catch (Exception ex)
 63        {
 064            _logger.LogError(ex, "Error al crear programa");
 065            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 66        }
 267    }
 68
 69    /// <summary>
 70    /// Actualizar un programa existente
 71    /// PUT /api/programas/{id}
 72    /// </summary>
 73    [HttpPut("{id}")]
 74    [Authorize(Roles = "Administrador")]
 75    public async Task<IActionResult> ActualizarPrograma(long id, [FromBody] ActualizarProgramaRequest request)
 76    {
 77        try
 78        {
 279            var (exito, resultado, error) = await _programaService.ActualizarAsync(id, request.Codigo, request.Denominac
 80
 281            if (!exito)
 82            {
 183                if (error?.Contains("no encontrado", 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 programa"));
 88            }
 89
 190            return Ok(ApiResponse<ProgramaDto>.SuccessResult(resultado!, "Programa actualizado exitosamente"));
 91        }
 092        catch (Exception ex)
 93        {
 094            _logger.LogError(ex, "Error al actualizar programa {Id}", id);
 095            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 96        }
 297    }
 98}