/// <summary>
        /// Orquesta todos los trabajos necesarios para obtener un usuario en base de datos.
        /// </summary>
        /// <param name="id">Identificador del usuario que se pretende obtener</param>
        /// <returns></returns>
        public async Task <UserDto> GetUserById(int id)
        {
            var userAll   = _userRepository.GetAllWithTracking();
            var userFound = await _userLogic.QueryToGetUserById(userAll, id).FirstOrDefaultAsync();

            _userLogic.ValidateIfUserFoundIsNull(userFound);
            return(MapperUser.MapFromEntityToDto(userFound));
        }
        /// <summary>
        /// Orquesta todos los trabajos necesarios para añadir un usuario en base de datos.
        /// </summary>
        /// <param name="userDto">Objeto usuario que se va a añadir</param>
        /// <returns></returns>
        public async Task AddUser(UserDto userDto)
        {
            var userAll = _userRepository.GetAll();

            _userLogic.LogicToAdd(userAll, userDto);
            var user = MapperUser.MapFromDtoToEntity(userDto);

            _userRepository.Add(user);
            await _uow.CommitAsync();
        }
        /// <summary>
        /// Orquesta todos los trabajos necesarios para actualizar un usuario en base de datos.
        /// </summary>
        /// <param name="userDto">Datos usuario a actualizar</param>
        /// <returns></returns>
        public async Task UpdateUser(UserDto userDto)
        {
            var userAll = _userRepository.GetAllWithTracking();

            _userLogic.LogicToUpdate(userAll, userDto);
            var user = MapperUser.MapFromDtoToEntity(userDto);

            _userRepository.Update(user);
            await _uow.CommitAsync();
        }
        public async Task <IEnumerable <UserDto> > GetUserAll()
        {
            var userAll = await _userRepository.GetAll().ToListAsync();

            return(MapperUser.MapFromEntityListToDtoList(userAll));
        }