< 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: 82
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.Http;
 5using Microsoft.AspNetCore.Mvc;
 6using FAU.Entidades;
 7
 8namespace FAU.API.Controllers;
 9
 10/// <summary>
 11/// Controlador de auditoría
 12/// </summary>
 13[ApiController]
 14[Route("api/[controller]")]
 15[Produces("application/json")]
 16public class AuditoriaController : ControllerBase
 17{
 18    private readonly IAuditoriaService _auditoriaService;
 19    private readonly ILogger<AuditoriaController> _logger;
 20
 221    public AuditoriaController(IAuditoriaService auditoriaService, ILogger<AuditoriaController> logger)
 22    {
 223        _auditoriaService = auditoriaService;
 224        _logger = logger;
 225    }
 26
 27    /// <summary>
 28    /// Obtiene la bitácora de auditoría con paginación y filtros opcionales.
 29    /// GET /api/auditoria/auditoria?page=1&amp;pageSize=50&amp;contexto=Bancos&amp;accion=CrearBanco&amp;usuario=admin&
 30    /// </summary>
 31    [HttpGet("auditoria")]
 32    [Authorize(Roles = "Administrador,Supervisor")]
 33    [ProducesResponseType(typeof(ApiResponse<PagedResult<BitacoraDto>>), StatusCodes.Status200OK)]
 34    [ProducesResponseType(typeof(ApiResponse<string>), StatusCodes.Status500InternalServerError)]
 35    public async Task<IActionResult> GetBitacorasAsync(
 36        [FromQuery] int page = 1,
 37        [FromQuery] int pageSize = 50,
 38        [FromQuery] string? contexto = null,
 39        [FromQuery] string? accion = null,
 40        [FromQuery] string? usuario = null,
 41        [FromQuery] DateTime? desde = null,
 42        [FromQuery] DateTime? hasta = null)
 43    {
 44        try
 45        {
 246            if (page < 1) page = 1;
 247            if (pageSize < 1) pageSize = 50;
 248            if (pageSize > 200) pageSize = 200;
 49
 250            var (items, total) = await _auditoriaService.GetPagedAsync(
 251                page, pageSize, contexto, accion, usuario, desde, hasta);
 52
 153            var dtos = items.Select(b => new BitacoraDto
 154            {
 155                Id = b.Id,
 156                UsuarioNombre = b.Usuario.Username,
 157                AccionNombre = b.Accion.Nombre,
 158                ContextoNombre = b.Contexto.Nombre,
 159                Host = b.Host,
 160                Fecha = b.Fecha,
 161                Entidad = b.Entidad,
 162                EntidadId = b.EntidadId,
 163                Detalle = b.Detalle
 164            });
 65
 166            var resultado = new PagedResult<BitacoraDto>
 167            {
 168                Items = dtos,
 169                Page = page,
 170                PageSize = pageSize,
 171                TotalCount = total
 172            };
 73
 174            return Ok(ApiResponse<PagedResult<BitacoraDto>>.SuccessResult(resultado, "Bitácoras obtenidas correctamente"
 75        }
 176        catch (Exception ex)
 77        {
 178            _logger.LogError(ex, "Error al obtener la auditoría");
 179            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 80        }
 281    }
 82}