< Summary

Information
Class: FAU.API.Controllers.AcreedoresController
Assembly: FAU.API
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/AcreedoresController.cs
Line coverage
78%
Covered lines: 51
Uncovered lines: 14
Coverable lines: 65
Total lines: 163
Line coverage: 78.4%
Branch coverage
55%
Covered branches: 10
Total branches: 18
Branch coverage: 55.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
GetAcreedores()100%1181.25%
GetAcreedor()100%2284.21%
CreateAcreedor()50%9871.42%
UpdateAcreedor()50%12860%

File(s)

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

#LineLine coverage
 1using FAU.Entidades;
 2using FAU.Logica.DTOs;
 3using FAU.Logica.Services;
 4using Microsoft.AspNetCore.Authorization;
 5using Microsoft.AspNetCore.Mvc;
 6
 7namespace FAU.API.Controllers;
 8
 9/// <summary>
 10/// Gestión del catálogo de acreedores
 11/// </summary>
 12[ApiController]
 13[Route("api/acreedores")]
 14[Authorize]
 15public class AcreedoresController : ControllerBase
 16{
 17    private readonly IAcreedorService _acreedorService;
 18    private readonly ILogger<AcreedoresController> _logger;
 19
 920    public AcreedoresController(
 921        IAcreedorService acreedorService,
 922        ILogger<AcreedoresController> logger)
 23    {
 924        _acreedorService = acreedorService;
 925        _logger = logger;
 926    }
 27
 28    /// <summary>
 29    /// Listar acreedores con paginación y filtros
 30    /// GET /api/acreedores?page=1&pageSize=20&q=&activo=&categoria=
 31    /// </summary>
 32    [HttpGet]
 33    [FAU.API.Security.RequirePermission(PermisoEnum.VerAcreedores)]
 34    public async Task<IActionResult> GetAcreedores(
 35        [FromQuery] int page = 1,
 36        [FromQuery] int pageSize = 20,
 37        [FromQuery] string? q = null,
 38        [FromQuery] bool? activo = null,
 39        [FromQuery] string? categoria = null)
 40    {
 41        try
 42        {
 343            var resultado = await _acreedorService.GetPagedAsync(page, pageSize, q, activo, categoria);
 44
 345            var response = new
 346            {
 347                items = resultado.Items,
 348                page = resultado.Page,
 349                pageSize = resultado.PageSize,
 350                totalCount = resultado.TotalCount,
 351                totalPages = resultado.TotalPages,
 352                hasPreviousPage = resultado.HasPreviousPage,
 353                hasNextPage = resultado.HasNextPage,
 354            };
 55
 356            return Ok(ApiResponse<object>.SuccessResult(response));
 57        }
 058        catch (Exception ex)
 59        {
 060            _logger.LogError(ex, "Error al obtener acreedores");
 061            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 62        }
 363    }
 64
 65    /// <summary>
 66    /// Obtener detalle de un acreedor por ID
 67    /// GET /api/acreedores/{id}
 68    /// </summary>
 69    [HttpGet("{id}")]
 70    [FAU.API.Security.RequirePermission(PermisoEnum.VerAcreedores)]
 71    public async Task<IActionResult> GetAcreedor(long id)
 72    {
 73        try
 74        {
 275            var acreedor = await _acreedorService.GetByIdAsync(id);
 76
 277            if (acreedor == null)
 178                return NotFound(ApiResponse<string>.ErrorResult("Acreedor no encontrado"));
 79
 180            var response = new
 181            {
 182                id = acreedor.Id,
 183                codigo = acreedor.Codigo,
 184                nombre = acreedor.Nombre,
 185                categoriaDeficit = acreedor.CategoriaDeficit,
 186                ordenLegalDeficit = acreedor.OrdenLegalDeficit,
 187                formatoArchivo = acreedor.FormatoArchivo,
 188                contacto = acreedor.Contacto,
 189                activo = acreedor.Activo,
 190            };
 91
 192            return Ok(ApiResponse<object>.SuccessResult(response));
 93        }
 094        catch (Exception ex)
 95        {
 096            _logger.LogError(ex, "Error al obtener acreedor {Id}", id);
 097            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 98        }
 299    }
 100
 101    /// <summary>
 102    /// Crear un nuevo acreedor
 103    /// POST /api/acreedores
 104    /// </summary>
 105    [HttpPost]
 106    [FAU.API.Security.RequirePermission(PermisoEnum.CrearAcreedor)]
 107    public async Task<IActionResult> CreateAcreedor([FromBody] CreateAcreedorRequest request)
 108    {
 109        try
 110        {
 2111            var (success, acreedor, error) = await _acreedorService.CreateAsync(request);
 112
 2113            if (!success)
 114            {
 1115                if (error?.Contains("ya existe", StringComparison.OrdinalIgnoreCase) == true)
 1116                    return Conflict(ApiResponse<string>.ErrorResult(error));
 117
 0118                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al crear acreedor"));
 119            }
 120
 1121            var response = new { id = acreedor!.Id, creado = true };
 122
 1123            return CreatedAtAction(
 1124                nameof(GetAcreedor),
 1125                new { id = acreedor.Id },
 1126                ApiResponse<object>.SuccessResult(response, "Acreedor creado exitosamente"));
 127        }
 0128        catch (Exception ex)
 129        {
 0130            _logger.LogError(ex, "Error al crear acreedor");
 0131            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 132        }
 2133    }
 134
 135    /// <summary>
 136    /// Editar un acreedor existente (incluye activar/desactivar)
 137    /// PUT /api/acreedores/{id}
 138    /// </summary>
 139    [HttpPut("{id}")]
 140    [FAU.API.Security.RequirePermission(PermisoEnum.ActualizarAcreedor)]
 141    public async Task<IActionResult> UpdateAcreedor(long id, [FromBody] UpdateAcreedorRequest request)
 142    {
 143        try
 144        {
 2145            var (success, _, error) = await _acreedorService.UpdateAsync(id, request);
 146
 2147            if (!success)
 148            {
 1149                if (error?.Contains("no encontrado", StringComparison.OrdinalIgnoreCase) == true)
 1150                    return NotFound(ApiResponse<string>.ErrorResult(error));
 151
 0152                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al actualizar acreedor"));
 153            }
 154
 1155            return Ok(ApiResponse<object>.SuccessResult(new { actualizado = true }, "Acreedor actualizado exitosamente")
 156        }
 0157        catch (Exception ex)
 158        {
 0159            _logger.LogError(ex, "Error al actualizar acreedor {Id}", id);
 0160            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 161        }
 2162    }
 163}