using SIGCM2.Application.Abstractions;
using SIGCM2.Application.Abstractions.Persistence;
using SIGCM2.Application.Roles.Dtos;
using SIGCM2.Domain.Exceptions;

namespace SIGCM2.Application.Roles.Get;

public sealed class GetRolByCodigoQueryHandler : ICommandHandler<GetRolByCodigoQuery, RolDto>
{
    private readonly IRolRepository _repository;

    public GetRolByCodigoQueryHandler(IRolRepository repository)
    {
        _repository = repository;
    }

    public async Task<RolDto> Handle(GetRolByCodigoQuery query)
    {
        var rol = await _repository.GetByCodigoAsync(query.Codigo);
        if (rol is null)
            throw new RolNotFoundException(query.Codigo);

        return new RolDto(rol.Id, rol.Codigo, rol.Nombre, rol.Descripcion, rol.Activo, rol.FechaCreacion, rol.FechaModificacion);
    }
}
