< Summary

Information
Class: FAU.Logica.Services.RolService
Assembly: FAU.Logica
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Services/RolService.cs
Line coverage
88%
Covered lines: 61
Uncovered lines: 8
Coverable lines: 69
Total lines: 157
Line coverage: 88.4%
Branch coverage
100%
Covered branches: 16
Total branches: 16
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
GetByIdAsync()100%11100%
GetByNombreAsync()100%11100%
GetAllAsync()100%11100%
CreateAsync()100%2284.61%
UpdateAsync()100%6684.61%
AsignarPermisoAsync()100%6685.71%
RemoverPermisoAsync()100%4483.33%
DeleteAsync()100%11100%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Services/RolService.cs

#LineLine coverage
 1using FAU.DataAccess.Repositories;
 2using FAU.Entidades;
 3
 4namespace FAU.Logica.Services;
 5
 6public class RolService : IRolService
 7{
 8    private readonly IRolRepository _rolRepository;
 9    private readonly IPermisoRepository _permisoRepository;
 10    private readonly IAuditoriaService _auditoriaService;
 11    private readonly ICurrentUserContext _currentUser;
 12
 1913    public RolService(IRolRepository rolRepository, IPermisoRepository permisoRepository, IAuditoriaService auditoriaSer
 14    {
 1915        _rolRepository = rolRepository;
 1916        _permisoRepository = permisoRepository;
 1917        _auditoriaService = auditoriaService;
 1918        _currentUser = currentUser;
 1919    }
 20
 21    public async Task<Rol?> GetByIdAsync(long id)
 22    {
 223        return await _rolRepository.GetByIdAsync(id);
 224    }
 25
 26    public async Task<Rol?> GetByNombreAsync(string nombre)
 27    {
 228        return await _rolRepository.GetByNombreAsync(nombre);
 229    }
 30
 31    public async Task<IEnumerable<Rol>> GetAllAsync()
 32    {
 233        return await _rolRepository.GetAllAsync();
 234    }
 35
 36    public async Task<(bool Success, Rol? Rol, string? Error)> CreateAsync(string nombre, string? descripcion = null)
 37    {
 38        try
 39        {
 240            if (await _rolRepository.ExistsAsync(nombre))
 41            {
 142                return (false, null, "Ya existe un rol con ese nombre");
 43            }
 44
 145            var nuevoRol = new Rol
 146            {
 147                Nombre = nombre,
 148                Descripcion = descripcion
 149            };
 50
 151            var rolCreado = await _rolRepository.CreateAsync(nuevoRol);
 152            await _auditoriaService.LogAuditoriaAsync(_currentUser.UserId ?? 0, AccionEnum.CrearRol, ContextoEnum.Roles,
 153            return (true, rolCreado, null);
 54        }
 055        catch (Exception ex)
 56        {
 057            return (false, null, $"Error al crear rol: {ex.Message}");
 58        }
 259    }
 60
 61    public async Task<(bool Success, Rol? Rol, string? Error)> UpdateAsync(long id, string nombre, string? descripcion =
 62    {
 63        try
 64        {
 365            var rol = await _rolRepository.GetByIdAsync(id);
 366            if (rol == null)
 67            {
 168                return (false, null, "Rol no encontrado");
 69            }
 70
 71            // Verificar si el nuevo nombre ya existe (si es diferente al actual)
 272            if (rol.Nombre != nombre && await _rolRepository.ExistsAsync(nombre))
 73            {
 174                return (false, null, "Ya existe un rol con ese nombre");
 75            }
 76
 177            rol.Nombre = nombre;
 178            rol.Descripcion = descripcion;
 79
 180            var rolActualizado = await _rolRepository.UpdateAsync(rol);
 181            await _auditoriaService.LogAuditoriaAsync(_currentUser.UserId ?? 0, AccionEnum.ActualizarRol, ContextoEnum.R
 182            return (true, rolActualizado, null);
 83        }
 084        catch (Exception ex)
 85        {
 086            return (false, null, $"Error al actualizar rol: {ex.Message}");
 87        }
 388    }
 89
 90    public async Task<(bool Success, string? Error)> AsignarPermisoAsync(long rolId, long permisoId)
 91    {
 92        try
 93        {
 494            var rol = await _rolRepository.GetByIdAsync(rolId);
 495            if (rol == null)
 96            {
 197                return (false, "Rol no encontrado");
 98            }
 99
 3100            var permiso = await _permisoRepository.GetByIdAsync(permisoId);
 3101            if (permiso == null)
 102            {
 1103                return (false, "Permiso no encontrado");
 104            }
 105
 3106            if (rol.Permisos.Any(p => p.Id == permisoId))
 107            {
 1108                return (false, "El rol ya tiene este permiso asignado");
 109            }
 110
 1111            rol.Permisos.Add(permiso);
 1112            await _rolRepository.UpdateAsync(rol);
 1113            await _auditoriaService.LogAuditoriaAsync(_currentUser.UserId ?? 0, AccionEnum.ActualizarRol, ContextoEnum.R
 114
 1115            return (true, null);
 116        }
 0117        catch (Exception ex)
 118        {
 0119            return (false, $"Error al asignar permiso: {ex.Message}");
 120        }
 4121    }
 122
 123    public async Task<(bool Success, string? Error)> RemoverPermisoAsync(long rolId, long permisoId)
 124    {
 125        try
 126        {
 3127            var rol = await _rolRepository.GetByIdAsync(rolId);
 3128            if (rol == null)
 129            {
 1130                return (false, "Rol no encontrado");
 131            }
 132
 3133            var permiso = rol.Permisos.FirstOrDefault(p => p.Id == permisoId);
 2134            if (permiso == null)
 135            {
 1136                return (false, "El rol no tiene este permiso asignado");
 137            }
 138
 1139            rol.Permisos.Remove(permiso);
 1140            await _rolRepository.UpdateAsync(rol);
 1141            await _auditoriaService.LogAuditoriaAsync(_currentUser.UserId ?? 0, AccionEnum.ActualizarRol, ContextoEnum.R
 142
 1143            return (true, null);
 144        }
 0145        catch (Exception ex)
 146        {
 0147            return (false, $"Error al remover permiso: {ex.Message}");
 148        }
 3149    }
 150
 151    public async Task DeleteAsync(long id)
 152    {
 1153        await _auditoriaService.LogAuditoriaAsync(_currentUser.UserId ?? 0, AccionEnum.ActualizarRol, ContextoEnum.Roles
 1154        await _rolRepository.DeleteAsync(id);
 1155    }
 156}
 157