private void RegisterInstitutionUser(RegisterNewInstitutionUserCommand command,
                                             User user,
                                             out InstitutionUser institutionUser)
        {
            institutionUser = new InstitutionUser(Guid.NewGuid(),
                                                  user.Id,
                                                  command.SocialReason,
                                                  command.FantasyName,
                                                  command.CNPJ);

            _institutionUserRepository.Add(institutionUser);
        }
        public async Task <ICommandResult> Handle(RegisterNewInstitutionUserCommand command,
                                                  CancellationToken cancellationToken)
        {
            using (var transaction = _uow.BeginTransaction())
            {
                try
                {
                    if (!RegisterUser(command.Email,
                                      command.Password,
                                      EUserType.Institution, out User user, out IdentityResult resultUser))
                    {
                        return(await CanceledTask(_bus.RaiseEvent(new DomainNotification(command.MessageType,
                                                                                         "E-mail já está cadastrado!"))));
                    }

                    if (!RegisterRole(user, RolesConfiguration.ROLE_INSTITUTION, out IdentityResult resultRole))
                    {
                        return(await CanceledTask(_bus.RaiseEvent(new DomainNotification(command.MessageType,
                                                                                         $"Ocorreu erro ao atribuir uma Role \n: {resultRole.Errors.ToList()[0].Description}"))));
                    }

                    RegisterAddress(command.Address, user);

                    RegisterInstitutionUser(command, user, out InstitutionUser institutionUser);

                    RegisterPhones(command.Phones, institutionUser);

                    RegisterUserInstitutionNotificationTypes(command.UserNotificationTypes, user);

                    if (Commit(transaction))
                    {
                        await _bus.RaiseEvent(new PendingUserAccountEvent(user.Email));
                    }

                    return(await CompletedTask(institutionUser));
                }
                catch (Exception exception)
                {
                    RollBack(transaction);
                    throw exception;
                }
            }
        }
예제 #3
0
 public IActionResult Register([FromBody] RegisterNewInstitutionUserCommand command)
 => Response(bus.SendCommand(command).Result);