< Summary

Information
Class: FAU.API.Controllers.DependienteController
Assembly: FAU.API
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/DependienteController.cs
Line coverage
100%
Covered lines: 59
Uncovered lines: 0
Coverable lines: 59
Total lines: 169
Line coverage: 100%
Branch coverage
84%
Covered branches: 27
Total branches: 32
Branch coverage: 84.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
GetDependientes()50%66100%
GetTipos()100%11100%
GetDependiente()100%22100%
GetDependientesByPersona()100%11100%
CreateDependiente()91.66%1212100%
UpdateDependiente()91.66%1212100%

File(s)

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

#LineLine coverage
 1using FAU.Logica.DTOs;
 2using FAU.Logica.Services;
 3using FAU.Entidades;
 4using Microsoft.AspNetCore.Authorization;
 5using Microsoft.AspNetCore.Mvc;
 6
 7namespace FAU.API.Controllers;
 8
 9[ApiController]
 10[Route("api/dependientes")]
 11public class DependienteController : ControllerBase
 12{
 13    private readonly IDependienteService _dependienteService;
 14    private readonly ILogger<DependienteController> _logger;
 15
 1816    public DependienteController(IDependienteService dependienteService, ILogger<DependienteController> logger)
 17    {
 1818        _dependienteService = dependienteService;
 1819        _logger = logger;
 1820    }
 21
 22    /// <summary>
 23    /// Listar dependientes con filtros y paginación
 24    /// GET /api/dependientes?cedulaTitular=&amp;tipo=&amp;activo=&amp;page=&amp;pageSize=
 25    /// </summary>
 26    [HttpGet]
 27    [FAU.API.Security.RequirePermission(PermisoEnum.VerDependientes)]
 28    public async Task<IActionResult> GetDependientes(
 29        [FromQuery] string? cedulaTitular = null,
 30        [FromQuery] string? tipo = null,
 31        [FromQuery] bool? activo = null,
 32        [FromQuery] int page = 1,
 33        [FromQuery] int pageSize = 20)
 34    {
 35        try
 36        {
 237            if (page < 1) page = 1;
 238            if (pageSize < 1 || pageSize > 100) pageSize = 20;
 39
 240            var resultado = await _dependienteService.GetDependientesPagedAsync(page, pageSize, cedulaTitular, tipo, act
 141            return Ok(ApiResponse<object>.SuccessResult(resultado));
 42        }
 143        catch (Exception ex)
 44        {
 145            _logger.LogError(ex, "Error al obtener dependientes");
 146            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 47        }
 248    }
 49
 50    /// <summary>
 51    /// Listar tipos de dependiente disponibles
 52    /// GET /api/dependientes/tipos
 53    /// </summary>
 54    [HttpGet("tipos")]
 55    [FAU.API.Security.RequirePermission(PermisoEnum.VerDependientes)]
 56    public IActionResult GetTipos()
 57    {
 158        var tipos = new[]
 159        {
 160            new { valor = "hijo",                 etiqueta = "Hijo" },
 161            new { valor = "conyuge_sin_ingresos", etiqueta = "Cónyuge sin ingresos" }
 162        };
 163        return Ok(ApiResponse<object>.SuccessResult(tipos));
 64    }
 65
 66    /// <summary>
 67    /// Obtener dependiente por ID
 68    /// GET /api/dependientes/{id}
 69    /// </summary>
 70    [HttpGet("{id}")]
 71    [FAU.API.Security.RequirePermission(PermisoEnum.VerDependientes)]
 72    public async Task<IActionResult> GetDependiente(long id)
 73    {
 74        try
 75        {
 376            var dependiente = await _dependienteService.GetDependienteByIdAsync(id);
 277            if (dependiente == null)
 178                return NotFound(ApiResponse<string>.ErrorResult("Dependiente no encontrado"));
 79
 180            return Ok(ApiResponse<object>.SuccessResult(dependiente));
 81        }
 182        catch (Exception ex)
 83        {
 184            _logger.LogError(ex, "Error al obtener dependiente {Id}", id);
 185            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 86        }
 387    }
 88
 89    /// <summary>
 90    /// Listar dependientes de una persona por cédula
 91    /// GET /api/dependientes/persona/{cedula}
 92    /// </summary>
 93    [HttpGet("persona/{cedula}")]
 94    [FAU.API.Security.RequirePermission(PermisoEnum.VerDependientes)]
 95    public async Task<IActionResult> GetDependientesByPersona(string cedula)
 96    {
 97        try
 98        {
 299            var dependientes = await _dependienteService.GetDependientesByPersonaAsync(cedula);
 1100            return Ok(ApiResponse<object>.SuccessResult(dependientes));
 101        }
 1102        catch (Exception ex)
 103        {
 1104            _logger.LogError(ex, "Error al obtener dependientes de persona {Cedula}", cedula);
 1105            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 106        }
 2107    }
 108
 109    /// <summary>
 110    /// Crear dependiente
 111    /// POST /api/dependientes
 112    /// </summary>
 113    [HttpPost]
 114    [FAU.API.Security.RequirePermission(PermisoEnum.CrearDependientes)]
 115    public async Task<IActionResult> CreateDependiente([FromBody] CreateDependienteRequest request)
 116    {
 117        try
 118        {
 5119            var (success, dependiente, error) = await _dependienteService.CreateDependienteAsync(request);
 4120            if (!success)
 121            {
 3122                if (error?.Contains("Ya existe", StringComparison.OrdinalIgnoreCase) == true)
 1123                    return Conflict(ApiResponse<string>.ErrorResult(error));
 2124                if (error?.Contains("No se encontró", StringComparison.OrdinalIgnoreCase) == true)
 1125                    return NotFound(ApiResponse<string>.ErrorResult(error));
 1126                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al crear dependiente"));
 127            }
 128
 1129            return CreatedAtAction(
 1130                nameof(GetDependiente),
 1131                new { id = dependiente!.Id },
 1132                ApiResponse<object>.SuccessResult(new { id = dependiente.Id, creado = true }, "Dependiente creado exitos
 133        }
 1134        catch (Exception ex)
 135        {
 1136            _logger.LogError(ex, "Error al crear dependiente");
 1137            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 138        }
 5139    }
 140
 141    /// <summary>
 142    /// Actualizar dependiente
 143    /// PUT /api/dependientes/{id}
 144    /// </summary>
 145    [HttpPut("{id}")]
 146    [FAU.API.Security.RequirePermission(PermisoEnum.ActualizarDependientes)]
 147    public async Task<IActionResult> UpdateDependiente(long id, [FromBody] UpdateDependienteRequest request)
 148    {
 149        try
 150        {
 5151            var (success, _, error) = await _dependienteService.UpdateDependienteAsync(id, request);
 4152            if (!success)
 153            {
 3154                if (error?.Contains("no encontrado", StringComparison.OrdinalIgnoreCase) == true)
 1155                    return NotFound(ApiResponse<string>.ErrorResult(error));
 2156                if (error?.Contains("Ya existe", StringComparison.OrdinalIgnoreCase) == true)
 1157                    return Conflict(ApiResponse<string>.ErrorResult(error));
 1158                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al actualizar dependiente"));
 159            }
 160
 1161            return Ok(ApiResponse<object>.SuccessResult(new { actualizado = true }, "Dependiente actualizado exitosament
 162        }
 1163        catch (Exception ex)
 164        {
 1165            _logger.LogError(ex, "Error al actualizar dependiente {Id}", id);
 1166            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 167        }
 5168    }
 169}