public CreateChildAgencyInvitationRequest(UserDescriptionInfo userRegistrationInfo,
                                           // Think about removing such a special property from there
                                           ChildAgencyInvitationInfo childAgencyRegistrationInfo)
 {
     UserRegistrationInfo        = userRegistrationInfo;
     ChildAgencyRegistrationInfo = childAgencyRegistrationInfo;
 }
Exemplo n.º 2
0
        public async Task <Result <Agent> > Add(UserDescriptionInfo agentRegistration,
                                                string externalIdentity,
                                                string email)
        {
            var(_, isFailure, error) = await Validate(agentRegistration, externalIdentity);

            if (isFailure)
            {
                return(Result.Failure <Agent>(error));
            }

            var createdAgent = new Agent
            {
                Title        = agentRegistration.Title,
                FirstName    = agentRegistration.FirstName,
                LastName     = agentRegistration.LastName,
                Position     = agentRegistration.Position,
                Email        = email,
                IdentityHash = HashGenerator.ComputeSha256(externalIdentity),
                Created      = _dateTimeProvider.UtcNow()
            };

            _context.Agents.Add(createdAgent);
            await _context.SaveChangesAsync();

            return(Result.Success(createdAgent));
        }
Exemplo n.º 3
0
        public async Task <IActionResult> UpdateCurrentAgent([FromBody] UserDescriptionInfo newInfo)
        {
            var agentRegistrationInfo = await _agentService.UpdateCurrentAgent(newInfo, await _agentContextService.GetAgent());

            await _agentContextInternal.RefreshAgentContext();

            return(Ok(agentRegistrationInfo));
        }
Exemplo n.º 4
0
 public UserInvitationData(UserDescriptionInfo userRegistrationInfo,
                           // Think about removing such a special property from there
                           RegistrationAgencyInfo childAgencyRegistrationInfo,
                           int[] roleIds)
 {
     UserRegistrationInfo        = userRegistrationInfo;
     ChildAgencyRegistrationInfo = childAgencyRegistrationInfo;
     RoleIds = roleIds;
 }
Exemplo n.º 5
0
 public AgentInvitationInfo(UserDescriptionInfo userRegistrationInfo, RegistrationAgencyInfo?childAgencyRegistrationInfo,
                            UserInvitationTypes userInvitationType, int agencyId, int agentId, string email)
 {
     UserRegistrationInfo        = userRegistrationInfo;
     ChildAgencyRegistrationInfo = childAgencyRegistrationInfo;
     UserInvitationType          = userInvitationType;
     AgencyId = agencyId;
     Email    = email;
     AgentId  = agentId;
 }
Exemplo n.º 6
0
        public async Task <UserDescriptionInfo> UpdateCurrentAgent(UserDescriptionInfo newInfo, AgentContext agentContext)
        {
            var agentToUpdate = await _context.Agents.SingleAsync(a => a.Id == agentContext.AgentId);

            agentToUpdate.FirstName = newInfo.FirstName;
            agentToUpdate.LastName  = newInfo.LastName;
            agentToUpdate.Title     = newInfo.Title;
            agentToUpdate.Position  = newInfo.Position;

            _context.Agents.Update(agentToUpdate);
            await _context.SaveChangesAsync();

            return(newInfo);
        }
Exemplo n.º 7
0
        private async ValueTask <Result> Validate(UserDescriptionInfo agentRegistration, string externalIdentity)
        {
            var fieldValidateResult = GenericValidator <UserDescriptionInfo> .Validate(v =>
            {
                v.RuleFor(a => a.Title).NotEmpty();
                v.RuleFor(a => a.FirstName).NotEmpty();
                v.RuleFor(a => a.LastName).NotEmpty();
            }, agentRegistration);

            if (fieldValidateResult.IsFailure)
            {
                return(fieldValidateResult);
            }

            return(await CheckIdentityIsUnique(externalIdentity));
        }
Exemplo n.º 8
0
        public Task <Result> RegisterWithAgency(UserDescriptionInfo agentData, RegistrationAgencyInfo registrationAgencyInfo, string externalIdentity,
                                                string email)
        {
            return(Result.Success()
                   .Ensure(IsIdentityPresent, "User should have identity")
                   .Bind(Validate)
                   .BindWithTransaction(_context, () => Result.Success()
                                        .Bind(CreateRootAgency)
                                        .Bind(CreateAgent)
                                        .Tap(AddMasterAgentAgencyRelation))
                   .Bind(LogSuccess)
                   .Bind(SendRegistrationMailToAdmins)
                   .OnFailure(LogFailure));


            bool IsIdentityPresent() => !string.IsNullOrWhiteSpace(externalIdentity);


            Result Validate()
            => AgencyValidator.Validate(registrationAgencyInfo);


            Task <Result <AgencyInfo> > CreateRootAgency()
            => _agencyService.Create(registrationAgencyInfo, parentAgencyId: null);


            async Task <Result <(AgencyInfo, Agent)> > CreateAgent(AgencyInfo agency)
            {
                var(_, isFailure, agent, error) = await _agentService.Add(agentData, externalIdentity, email);

                return(isFailure
                    ? Result.Failure <(AgencyInfo, Agent)>(error)
                    : Result.Success((agency, agent)));
            }

            async Task AddMasterAgentAgencyRelation((AgencyInfo agency, Agent agent) agencyAgentInfo)
            {
                var(agency, agent) = agencyAgentInfo;

                // assign all roles to master agent
                var roleIds = await _context.AgentRoles.Select(x => x.Id).ToArrayAsync();

                await AddAgentAgencyRelation(agent,
                                             AgentAgencyRelationTypes.Master,
                                             agency.Id.Value,
                                             roleIds);
            }

            async Task <Result> SendRegistrationMailToAdmins(AgencyInfo agency)
            {
                var agent = $"{agentData.Title} {agentData.FirstName} {agentData.LastName}";

                if (!string.IsNullOrWhiteSpace(agentData.Position))
                {
                    agent += $" ({agentData.Position})";
                }

                var messageData = new RegistrationDataForAdmin
                {
                    Agency = new RegistrationDataForAdmin.RootAgencyRegistrationMailData
                    {
                        Id                     = agency.Id.ToString(),
                        Name                   = agency.Name,
                        CountryCode            = agency.CountryCode,
                        City                   = agency.City,
                        Address                = agency.Address,
                        Phone                  = agency.Phone,
                        PostalCode             = agency.PostalCode,
                        Fax                    = agency.Fax,
                        PreferredCurrency      = EnumFormatters.FromDescription(agency.PreferredCurrency),
                        PreferredPaymentMethod = EnumFormatters.FromDescription(agency.PreferredPaymentMethod),
                        Website                = agency.Website
                    },
                    AgentEmail = email,
                    AgentName  = agent
                };

                return(await _notificationService.Send(messageData : messageData,
                                                       notificationType : NotificationTypes.MasterAgentSuccessfulRegistration,
                                                       emails : _notificationOptions.AdministratorsEmails));
            }

            Result <AgencyInfo> LogSuccess((AgencyInfo, Agent) registrationData)
            {
                var(agency, agent) = registrationData;
                _logger.LogAgentRegistrationSuccess(agent.Email);
                return(Result.Success(agency));
            }

            void LogFailure(string error)
            {
                _logger.LogAgentRegistrationFailed(error);
            }
        }
Exemplo n.º 9
0
 public RegisterInvitedAgencyRequest(UserDescriptionInfo registrationInfo, RegistrationAgencyInfo childAgencyRegistrationInfo, string invitationCode)
 {
     RegistrationInfo            = registrationInfo;
     ChildAgencyRegistrationInfo = childAgencyRegistrationInfo;
     InvitationCode = invitationCode;
 }
Exemplo n.º 10
0
 public static UserInvitationData ToUserInvitationData(this UserDescriptionInfo info)
 => new (info, default, default);
 public RegisterAgentWithAgencyRequest(UserDescriptionInfo agent, RegistrationAgencyInfo agency)
 {
     Agent  = agent;
     Agency = agency;
 }
Exemplo n.º 12
0
 public RegisterInvitedAgentRequest(UserDescriptionInfo registrationInfo, string invitationCode)
 {
     RegistrationInfo = registrationInfo;
     InvitationCode   = invitationCode;
 }
Exemplo n.º 13
0
 public SendAdminInvitationRequest(UserDescriptionInfo registrationInfo, int[] roleIds)
 {
     RegistrationInfo = registrationInfo;
     RoleIds          = roleIds;
 }
Exemplo n.º 14
0
 public void Deconstruct(out UserDescriptionInfo registrationInfo, out int[] roleIds)
 {
     registrationInfo = RegistrationInfo;
     roleIds          = RoleIds;
 }