< Summary

Information
Class: FAU.API.Controllers.AuditoriaController
Assembly: FAU.API
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/AuditoriaController.cs
Line coverage
100%
Covered lines: 33
Uncovered lines: 0
Coverable lines: 33
Total lines: 78
Line coverage: 100%
Branch coverage
50%
Covered branches: 3
Total branches: 6
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%
GetBitacorasAsync()50%66100%

File(s)

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

#LineLine coverage
 1using FAU.Logica.DTOs;
 2using FAU.Logica.Services;
 3using Microsoft.AspNetCore.Authorization;
 4using Microsoft.AspNetCore.Mvc;
 5using FAU.Entidades;
 6
 7namespace FAU.API.Controllers;
 8
 9/// <summary>
 10/// Controlador de auditoría
 11/// </summary>
 12[ApiController]
 13[Route("api/[controller]")]
 14public class AuditoriaController : ControllerBase
 15{
 16    private readonly IAuditoriaService _auditoriaService;
 17    private readonly ILogger<AuditoriaController> _logger;
 18
 219    public AuditoriaController(IAuditoriaService auditoriaService, ILogger<AuditoriaController> logger)
 20    {
 221        _auditoriaService = auditoriaService;
 222        _logger = logger;
 223    }
 24
 25    /// <summary>
 26    /// Obtiene la bitácora de auditoría con paginación y filtros opcionales.
 27    /// GET /api/auditoria/auditoria?page=1&amp;pageSize=50&amp;contexto=Bancos&amp;accion=CrearBanco&amp;usuario=admin&
 28    /// </summary>
 29    [HttpGet("auditoria")]
 30    [FAU.API.Security.RequirePermission(PermisoEnum.VerAuditoria)]
 31    public async Task<IActionResult> GetBitacorasAsync(
 32        [FromQuery] int page = 1,
 33        [FromQuery] int pageSize = 50,
 34        [FromQuery] string? contexto = null,
 35        [FromQuery] string? accion = null,
 36        [FromQuery] string? usuario = null,
 37        [FromQuery] DateTime? desde = null,
 38        [FromQuery] DateTime? hasta = null)
 39    {
 40        try
 41        {
 242            if (page < 1) page = 1;
 243            if (pageSize < 1) pageSize = 50;
 244            if (pageSize > 200) pageSize = 200;
 45
 246            var (items, total) = await _auditoriaService.GetPagedAsync(
 247                page, pageSize, contexto, accion, usuario, desde, hasta);
 48
 149            var dtos = items.Select(b => new BitacoraDto
 150            {
 151                Id = b.Id,
 152                UsuarioNombre = b.Usuario.Username,
 153                AccionNombre = b.Accion.Nombre,
 154                ContextoNombre = b.Contexto.Nombre,
 155                Host = b.Host,
 156                Fecha = b.Fecha,
 157                Entidad = b.Entidad,
 158                EntidadId = b.EntidadId,
 159                Detalle = b.Detalle
 160            });
 61
 162            var resultado = new PagedResult<BitacoraDto>
 163            {
 164                Items = dtos,
 165                Page = page,
 166                PageSize = pageSize,
 167                TotalCount = total
 168            };
 69
 170            return Ok(ApiResponse<PagedResult<BitacoraDto>>.SuccessResult(resultado, "Bitácoras obtenidas correctamente"
 71        }
 172        catch (Exception ex)
 73        {
 174            _logger.LogError(ex, "Error al obtener la auditoría");
 175            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 76        }
 277    }
 78}