< Summary

Information
Class: FAU.API.Controllers.PeriodosController
Assembly: FAU.API
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/PeriodosController.cs
Line coverage
61%
Covered lines: 27
Uncovered lines: 17
Coverable lines: 44
Total lines: 110
Line coverage: 61.3%
Branch coverage
57%
Covered branches: 8
Total branches: 14
Branch coverage: 57.1%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
AbrirPeriodo()70%161061.53%
GetPeriodoActivo()50%3250%
GetPeriodo()0%620%
MapearPeriodo(...)100%11100%

File(s)

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

#LineLine coverage
 1using FAU.API.Security;
 2using FAU.Entidades;
 3using FAU.Logica.DTOs;
 4using FAU.Logica.Services;
 5using Microsoft.AspNetCore.Authorization;
 6using Microsoft.AspNetCore.Mvc;
 7
 8namespace FAU.API.Controllers;
 9
 10[ApiController]
 11[Route("api/liquidacion/[controller]")]
 12[Authorize(Roles = "Administrador")]
 13public class PeriodosController : ControllerBase
 14{
 15    private readonly IPeriodoService _periodoService;
 16    private readonly ILogger<PeriodosController> _logger;
 17
 318    public PeriodosController(IPeriodoService periodoService, ILogger<PeriodosController> logger)
 19    {
 320        _periodoService = periodoService;
 321        _logger = logger;
 322    }
 23
 24    [HttpPost]
 25    public async Task<IActionResult> AbrirPeriodo([FromBody] AbrirPeriodoRequest request)
 26    {
 27        try
 28        {
 229            if (!ModelState.IsValid)
 30            {
 031                return BadRequest(ApiResponse<string>.ErrorResult("Solicitud de apertura de período inválida"));
 32            }
 33
 234            var (success, periodo, error) = await _periodoService.AbrirPeriodoAsync(request.Anio, request.Mes);
 35
 236            if (!success)
 37            {
 138                if (error?.Contains("Ya existe un período abierto", StringComparison.OrdinalIgnoreCase) == true)
 39                {
 040                    return Conflict(ApiResponse<string>.ErrorResult(error));
 41                }
 42
 143                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al abrir el período"));
 44            }
 45
 146            var dto = MapearPeriodo(periodo!);
 147            return CreatedAtAction(nameof(GetPeriodo), new { id = periodo!.Id }, ApiResponse<PeriodoDto>.SuccessResult(d
 48        }
 049        catch (Exception ex)
 50        {
 051            _logger.LogError(ex, "Error al abrir período");
 052            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 53        }
 254    }
 55
 56    [HttpGet("activo")]
 57    public async Task<IActionResult> GetPeriodoActivo()
 58    {
 59        try
 60        {
 161            var periodo = await _periodoService.ObtenerActivoAsync();
 162            if (periodo == null)
 63            {
 164                return NotFound(ApiResponse<string>.ErrorResult("No hay un período abierto"));
 65            }
 66
 067            return Ok(ApiResponse<PeriodoDto>.SuccessResult(MapearPeriodo(periodo)));
 68        }
 069        catch (Exception ex)
 70        {
 071            _logger.LogError(ex, "Error al obtener período activo");
 072            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 73        }
 174    }
 75
 76    [HttpGet("{id}")]
 77    public async Task<IActionResult> GetPeriodo(long id)
 78    {
 79        try
 80        {
 081            var periodo = await _periodoService.ObtenerPorIdAsync(id);
 082            if (periodo == null)
 83            {
 084                return NotFound(ApiResponse<string>.ErrorResult("Período no encontrado"));
 85            }
 86
 087            return Ok(ApiResponse<PeriodoDto>.SuccessResult(MapearPeriodo(periodo)));
 88        }
 089        catch (Exception ex)
 90        {
 091            _logger.LogError(ex, "Error al obtener período {Id}", id);
 092            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 93        }
 094    }
 95
 96    private static PeriodoDto MapearPeriodo(Periodo periodo)
 97    {
 198        return new PeriodoDto
 199        {
 1100            Id = periodo.Id,
 1101            Anio = periodo.Anio,
 1102            Mes = periodo.Mes,
 1103            Estado = periodo.Estado,
 1104            SnapshotId = periodo.SnapshotId,
 1105            FechaApertura = periodo.FechaApertura,
 1106            UsuarioApertura = periodo.UsuarioApertura,
 1107            HashSnapshot = periodo.HashSnapshot
 1108        };
 109    }
 110}