public async Task <UserSignInResult> HandleAsync(SignInCommand command)
        {
            var commandHandlerAnswer = new CommandHandlerAggregateAnswer
            {
                ValidationResult = loginValidationHandler.Validate(command)
            };

            var userSignInResult = new UserSignInResult {
                SignInResult = SignInResult.Failed
            };

            if (command.IsValid)
            {
                var user = await userManager.FindByEmailAsync(command.Email);

                if (user != null)
                {
                    var result = await signInManager.PasswordSignInAsync(user, command.Password, command.Remember, true);

                    if (result.Succeeded)
                    {
                        await MergeClaims(user);

                        return(new UserSignInResult
                        {
                            User = user,
                            Token = tokenBuilder.CreateToken(user),
                            SignInResult = result
                        });
                    }
                }
            }
            return(userSignInResult);
        }
        public async Task <ICommandHandlerAggregateAnswer> HandleAsync(PersonCreateCommand command)
        {
            var answer = new CommandHandlerAggregateAnswer
            {
                ValidationResult = this.createValidationHandler.Validate(command),
                AggregateRoot    = await personRepository.Insert(new Person(command))
            };

            await personRepository.UnitOfWork.SaveChangesAsync();

            return(answer);
        }
        public async Task <ICommandHandlerAggregateAnswer> HandleAsync(CurrencyCreateCommand command)
        {
            var commandHandlerAnswer = new CommandHandlerAggregateAnswer
            {
                ValidationResult = this.createValidationHandler.Validate <CurrencyCreateCommand>(command)
            };

            if (commandHandlerAnswer.ValidationResult.IsValid)
            {
                commandHandlerAnswer.AggregateRoot =
                    await currencyRepository.Insert(new Currency(command));
            }
            return(commandHandlerAnswer);
        }
        public async Task <ApplicationUser> HandleAsync(UserUpdateImageCommand command)
        {
            var commandHandlerAnswer = new CommandHandlerAggregateAnswer
            {
                ValidationResult = updateImageValidationHandler.Validate(command)
            };
            var user = await userManager.FindByIdAsync(command.Id.ToString());

            if (commandHandlerAnswer.ValidationResult.IsValid)
            {
                user.Update(command);
                await userManager.UpdateAsync(user);
            }
            return(user);
        }
        public async Task <IdentityResult> HandleAsync(UserRegisterCommand command)
        {
            var commandHandlerAnswer = new CommandHandlerAggregateAnswer
            {
                ValidationResult = registerValidationHandler.Validate(command)
            };

            var identityResult = new IdentityResult();

            if (commandHandlerAnswer.ValidationResult.IsValid)
            {
                var user = new ApplicationUser(command);
                identityResult = await userManager.CreateAsync(user);
            }
            return(identityResult);
        }
        public async Task <ICommandHandlerAggregateAnswer> HandleAsync(PersonUpdateCommand command)
        {
            var answer = new CommandHandlerAggregateAnswer();
            var person = await personRepository.Query(command.Id);

            if (person.IsNotNull())
            {
                answer.ValidationResult = this.updateValidationHandler.Validate(command);

                if (command.IsValid)
                {
                    answer.AggregateRoot = await personRepository.Update(person.Take(command));
                }
            }
            return(answer);
        }
        public async Task <ICommandHandlerAggregateAnswer> HandleAsync(CurrencyUpdateCommand command)
        {
            var currency = await currencyRepository.Query(command.Id);

            var commandHandlerAnswer = new CommandHandlerAggregateAnswer
            {
                ValidationResult = this.updateValidationHandler.Validate <CurrencyUpdateCommand>(command)
            };

            if (commandHandlerAnswer.ValidationResult.IsValid)
            {
                commandHandlerAnswer.AggregateRoot =
                    currencyRepository.Update(currency.Update(command));
            }
            return(commandHandlerAnswer);
        }
        public async Task <IdentityResult> HandleAsync(UserUpdateCommand command)
        {
            var commandHandlerAnswer = new CommandHandlerAggregateAnswer
            {
                ValidationResult = updateValidationHandler.Validate(command)
            };
            var identityResult = new IdentityResult();

            if (commandHandlerAnswer.ValidationResult.IsValid)
            {
                var user = await userManager.FindByEmailAsync(command.Email);

                user.Update(command);
                identityResult = await userManager.UpdateAsync(user);
            }
            return(identityResult);
        }