< Summary

Information
Class: FAU.API.Controllers.TiposMovimientoController
Assembly: FAU.API
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/TiposMovimientoController.cs
Line coverage
68%
Covered lines: 22
Uncovered lines: 10
Coverable lines: 32
Total lines: 98
Line coverage: 68.7%
Branch coverage
40%
Covered branches: 8
Total branches: 20
Branch coverage: 40%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
ObtenerTiposMovimiento()100%11100%
CrearTipoMovimiento()50%12860%
ActualizarTipoMovimiento()33.33%301250%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.API/Controllers/TiposMovimientoController.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/tipos-movimiento")]
 10[Authorize]
 11public class TiposMovimientoController : ControllerBase
 12{
 13    private readonly ITipoMovimientoService _tipoMovimientoService;
 14    private readonly ILogger<TiposMovimientoController> _logger;
 15
 716    public TiposMovimientoController(ITipoMovimientoService tipoMovimientoService, ILogger<TiposMovimientoController> lo
 17    {
 718        _tipoMovimientoService = tipoMovimientoService;
 719        _logger = logger;
 720    }
 21
 22    /// <summary>
 23    /// Listar todos los tipos de movimiento
 24    /// GET /api/tipos-movimiento
 25    /// </summary>
 26    [HttpGet]
 27    public async Task<IActionResult> ObtenerTiposMovimiento()
 28    {
 29        try
 30        {
 331            var tipos = await _tipoMovimientoService.ObtenerTodosAsync();
 232            return Ok(ApiResponse<IEnumerable<TipoMovimientoDto>>.SuccessResult(tipos));
 33        }
 134        catch (Exception ex)
 35        {
 136            _logger.LogError(ex, "Error al obtener tipos de movimiento");
 137            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 38        }
 339    }
 40
 41    /// <summary>
 42    /// Crear un nuevo tipo de movimiento
 43    /// POST /api/tipos-movimiento
 44    /// </summary>
 45    [HttpPost]
 46    [Authorize(Roles = "Administrador")]
 47    public async Task<IActionResult> CrearTipoMovimiento([FromBody] CrearTipoMovimientoRequest request)
 48    {
 49        try
 50        {
 251            var (exito, resultado, error) = await _tipoMovimientoService.CrearAsync(request.Nombre, request.EsAlta);
 52
 253            if (!exito)
 54            {
 155                if (error?.Contains("ya existe", StringComparison.OrdinalIgnoreCase) == true)
 156                    return Conflict(ApiResponse<string>.ErrorResult(error));
 057                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al crear tipo de movimiento"));
 58            }
 59
 160            return CreatedAtAction(nameof(ObtenerTiposMovimiento), ApiResponse<TipoMovimientoDto>.SuccessResult(resultad
 61        }
 062        catch (Exception ex)
 63        {
 064            _logger.LogError(ex, "Error al crear tipo de movimiento");
 065            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 66        }
 267    }
 68
 69    /// <summary>
 70    /// Actualizar un tipo de movimiento existente
 71    /// PUT /api/tipos-movimiento/{id}
 72    /// </summary>
 73    [HttpPut("{id}")]
 74    [Authorize(Roles = "Administrador")]
 75    public async Task<IActionResult> ActualizarTipoMovimiento(long id, [FromBody] ActualizarTipoMovimientoRequest reques
 76    {
 77        try
 78        {
 279            var (exito, resultado, error) = await _tipoMovimientoService.ActualizarAsync(id, request.Nombre, request.EsA
 80
 281            if (!exito)
 82            {
 183                if (error?.Contains("no encontrado", StringComparison.OrdinalIgnoreCase) == true)
 184                    return NotFound(ApiResponse<string>.ErrorResult(error));
 085                if (error?.Contains("ya existe", StringComparison.OrdinalIgnoreCase) == true)
 086                    return Conflict(ApiResponse<string>.ErrorResult(error));
 087                return BadRequest(ApiResponse<string>.ErrorResult(error ?? "Error al actualizar tipo de movimiento"));
 88            }
 89
 190            return Ok(ApiResponse<TipoMovimientoDto>.SuccessResult(resultado!, "Tipo de movimiento actualizado exitosame
 91        }
 092        catch (Exception ex)
 93        {
 094            _logger.LogError(ex, "Error al actualizar tipo de movimiento {Id}", id);
 095            return StatusCode(500, ApiResponse<string>.ErrorResult("Error interno del servidor"));
 96        }
 297    }
 98}