public async Task <UserGetFullApiModel> Login(string login, string password, UserContactTypeEnum contactType)
        {
            var contact = login.ToLower();
            var hash    = _passwordManager.GetHash(password);

            User user = await _repository.FirstOrDefaultAsync(x => x.Email == contact && x.Password == hash);

            if (user == null)
            {
                throw new ArgumentException($"Login or password is not valid");
            }

            var userModel = _dataMapper.Parse <User, UserGetFullApiModel>(user);

            return(userModel);
        }
        public async Task <UserGetFullApiModel> Registration(string login, string password, string userName, UserContactTypeEnum contactType,
                                                             UserProfileAddApiModel userProfile)
        {
            if (await _repository.AnyAsync(x => x.Email == login))
            {
                throw new ArgumentException($"User with this email already exist");
            }
            if (await _repository.AnyAsync(x => x.UserName == userName))
            {
                throw new ArgumentException($"User with this userName already exist");
            }

            var contact = login.ToLower();
            var hash    = _passwordManager.GetHash(password);

            User user = await CreateByEmail(contact, hash);

            user.SetId();
            user.UserName            = userName;
            user.UserProfile         = _dataMapper.Parse <UserProfileAddApiModel, UserProfile>(userProfile);
            user.UserProfileId       = user.Id;
            user.UserProfile.Id      = user.Id;
            user.UserProfile.Created = DateTime.UtcNow;
            user.UserProfile.Updated = user.UserProfile.Created;

            await _repository.Add(user);

            user.UserRoles = (await _userRoleRepository.AddRoles(user.Id, RoleHelper.Current.User.Id)).ToList();

            var userModel = _dataMapper.Parse <User, UserGetFullApiModel>(user);

            return(userModel);
        }