public async Task <bool> Handle(SynchronizeClaimsCommand request, CancellationToken cancellationToken)
        {
            if (!request.IsValid())
            {
                NotifyValidationErrors(request);
                return(false);
            }

            var userClaims = (await _userService.GetClaimByName(request.Username)).ToList();

            foreach (var claim in request.Claims)
            {
                var actualUserClaims = userClaims.Find(f => f.Type == claim.Type);
                if (actualUserClaims == null)
                {
                    await _userService.SaveClaim(request.Username, claim);
                }
                else
                {
                    var newValue     = claim.Value;
                    var currentValue = actualUserClaims.Value;
                    if (currentValue != newValue)
                    {
                        await _userService.RemoveClaim(request.Username, actualUserClaims.Type, actualUserClaims.Value);

                        await _userService.SaveClaim(request.Username, claim);
                    }
                }
            }

            if (await Commit())
            {
                await Bus.RaiseEvent(new ClaimsSyncronizedEvent(request.Username, request.Claims));

                return(true);
            }

            return(false);
        }
        public Task <bool> SynchronizeClaims(string username, IEnumerable <ClaimViewModel> claims)
        {
            var registerCommand = new SynchronizeClaimsCommand(username, claims.Select(s => new Claim(s.Type, s.Value)));

            return(Bus.SendCommand(registerCommand));
        }