public IBaseCommandResult Handle(CreateUserCommand command)
        {
            _repository.MockDataCreator(); //note: comment THIS LINE to avoid the creation of FAKE MockData

            // Fail Fast Validation
            command.Validate();
            if (command.Invalid)
            {
                return(new BaseCommandResult(false, "Need to fix the errors on User", command.Notifications));
            }

            var userByUsername = _repository.GetByLogin(command.UserName);

            if (userByUsername != null)
            {
                return(new BaseCommandResult(true, "Username Already exists.", null));
            }

            // if i pass the validation, i should create a new user
            var user = new User(command.AditionalInfo,
                                new Name(command.FirstName, command.LastName),
                                new Document(command.CountryRegistryNumber, command.StateRegistryNumber),
                                new Phone(command.PhoneNumber1, command.PhoneNumber2, command.MobilePhoneNumber1, command.MobilePhoneNumber2),
                                new Email(command.EmailAddress),
                                new Address(command.Street, command.StreetNumber, command.NeighborHood, command.City, command.ZipCode),
                                new UserAccount(command.UserName, command.Password));

            // Save on Database
            _repository.Create(user);

            // Note: Here I`ll simply add all CLAIMS to this New User, so basically the user will access everything. As described in README.MD
            // you should adapt this rule to your business (like creating claims based on a "Profile" or a Screen to select claims to the user)
            // because this sample is not a sample of "real business" but development, we will simply give user all claims.
            var claims        = _claimRepository.Get();
            var claimsForUser = new List <UserClaim>();

            foreach (Claim cla in claims)
            {
                claimsForUser.Add(new UserClaim(user, cla));
            }

            _userClaimRepository.AddUserClaims(claimsForUser);
            // Return the Value
            return(new BaseCommandResult(true, "User Saved with Success! You can use it for login now.", null));
        }