< 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: 163
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 Microsoft.AspNetCore.Authorization;
 4using Microsoft.AspNetCore.Mvc;
 5
 6namespace FAU.API.Controllers;
 7
 8[ApiController]
 9[Route("api/dependientes")]
 10[Authorize(Roles = "Administrador")]
 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    public async Task<IActionResult> GetDependientes(
 28        [FromQuery] string? cedulaTitular = null,
 29        [FromQuery] string? tipo = null,
 30        [FromQuery] bool? activo = null,
 31        [FromQuery] int page = 1,
 32        [FromQuery] int pageSize = 20)
 33    {
 34        try
 35        {
 236            if (page < 1) page = 1;
 237            if (pageSize < 1 || pageSize > 100) pageSize = 20;
 38
 239            var resultado = await _dependienteService.GetDependientesPagedAsync(page, pageSize, cedulaTitular, tipo, act
 140            return Ok(ApiResponse<object>.SuccessResult(resultado));
 41        }
 142        catch (Exception ex)
 43        {
 144            _logger.LogError(ex, "Error al obtener dependientes");
 145            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 46        }
 247    }
 48
 49    /// <summary>
 50    /// Listar tipos de dependiente disponibles
 51    /// GET /api/dependientes/tipos
 52    /// </summary>
 53    [HttpGet("tipos")]
 54    public IActionResult GetTipos()
 55    {
 156        var tipos = new[]
 157        {
 158            new { valor = "hijo",                 etiqueta = "Hijo" },
 159            new { valor = "conyuge_sin_ingresos", etiqueta = "Cónyuge sin ingresos" }
 160        };
 161        return Ok(ApiResponse<object>.SuccessResult(tipos));
 62    }
 63
 64    /// <summary>
 65    /// Obtener dependiente por ID
 66    /// GET /api/dependientes/{id}
 67    /// </summary>
 68    [HttpGet("{id}")]
 69    public async Task<IActionResult> GetDependiente(long id)
 70    {
 71        try
 72        {
 373            var dependiente = await _dependienteService.GetDependienteByIdAsync(id);
 274            if (dependiente == null)
 175                return NotFound(ApiResponse<string>.ErrorResult("Dependiente no encontrado"));
 76
 177            return Ok(ApiResponse<object>.SuccessResult(dependiente));
 78        }
 179        catch (Exception ex)
 80        {
 181            _logger.LogError(ex, "Error al obtener dependiente {Id}", id);
 182            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 83        }
 384    }
 85
 86    /// <summary>
 87    /// Listar dependientes de una persona por cédula
 88    /// GET /api/dependientes/persona/{cedula}
 89    /// </summary>
 90    [HttpGet("persona/{cedula}")]
 91    public async Task<IActionResult> GetDependientesByPersona(string cedula)
 92    {
 93        try
 94        {
 295            var dependientes = await _dependienteService.GetDependientesByPersonaAsync(cedula);
 196            return Ok(ApiResponse<object>.SuccessResult(dependientes));
 97        }
 198        catch (Exception ex)
 99        {
 1100            _logger.LogError(ex, "Error al obtener dependientes de persona {Cedula}", cedula);
 1101            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 102        }
 2103    }
 104
 105    /// <summary>
 106    /// Crear dependiente
 107    /// POST /api/dependientes
 108    /// </summary>
 109    [HttpPost]
 110    public async Task<IActionResult> CreateDependiente([FromBody] CreateDependienteRequest request)
 111    {
 112        try
 113        {
 5114            var (success, dependiente, error) = await _dependienteService.CreateDependienteAsync(request);
 4115            if (!success)
 116            {
 3117                if (error?.Contains("Ya existe", StringComparison.OrdinalIgnoreCase) == true)
 1118                    return Conflict(ApiResponse<string>.ErrorResult(error));
 2119                if (error?.Contains("No se encontró", StringComparison.OrdinalIgnoreCase) == true)
 1120                    return NotFound(ApiResponse<string>.ErrorResult(error));
 1121                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al crear dependiente"));
 122            }
 123
 1124            return CreatedAtAction(
 1125                nameof(GetDependiente),
 1126                new { id = dependiente!.Id },
 1127                ApiResponse<object>.SuccessResult(new { id = dependiente.Id, creado = true }, "Dependiente creado exitos
 128        }
 1129        catch (Exception ex)
 130        {
 1131            _logger.LogError(ex, "Error al crear dependiente");
 1132            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 133        }
 5134    }
 135
 136    /// <summary>
 137    /// Actualizar dependiente
 138    /// PUT /api/dependientes/{id}
 139    /// </summary>
 140    [HttpPut("{id}")]
 141    public async Task<IActionResult> UpdateDependiente(long id, [FromBody] UpdateDependienteRequest request)
 142    {
 143        try
 144        {
 5145            var (success, _, error) = await _dependienteService.UpdateDependienteAsync(id, request);
 4146            if (!success)
 147            {
 3148                if (error?.Contains("no encontrado", StringComparison.OrdinalIgnoreCase) == true)
 1149                    return NotFound(ApiResponse<string>.ErrorResult(error));
 2150                if (error?.Contains("Ya existe", StringComparison.OrdinalIgnoreCase) == true)
 1151                    return Conflict(ApiResponse<string>.ErrorResult(error));
 1152                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al actualizar dependiente"));
 153            }
 154
 1155            return Ok(ApiResponse<object>.SuccessResult(new { actualizado = true }, "Dependiente actualizado exitosament
 156        }
 1157        catch (Exception ex)
 158        {
 1159            _logger.LogError(ex, "Error al actualizar dependiente {Id}", id);
 1160            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 161        }
 5162    }
 163}