public CreateChildAgencyInvitationRequest(UserDescriptionInfo userRegistrationInfo, // Think about removing such a special property from there ChildAgencyInvitationInfo childAgencyRegistrationInfo) { UserRegistrationInfo = userRegistrationInfo; ChildAgencyRegistrationInfo = childAgencyRegistrationInfo; }
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)); }
public async Task <IActionResult> UpdateCurrentAgent([FromBody] UserDescriptionInfo newInfo) { var agentRegistrationInfo = await _agentService.UpdateCurrentAgent(newInfo, await _agentContextService.GetAgent()); await _agentContextInternal.RefreshAgentContext(); return(Ok(agentRegistrationInfo)); }
public UserInvitationData(UserDescriptionInfo userRegistrationInfo, // Think about removing such a special property from there RegistrationAgencyInfo childAgencyRegistrationInfo, int[] roleIds) { UserRegistrationInfo = userRegistrationInfo; ChildAgencyRegistrationInfo = childAgencyRegistrationInfo; RoleIds = roleIds; }
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; }
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); }
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)); }
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); } }
public RegisterInvitedAgencyRequest(UserDescriptionInfo registrationInfo, RegistrationAgencyInfo childAgencyRegistrationInfo, string invitationCode) { RegistrationInfo = registrationInfo; ChildAgencyRegistrationInfo = childAgencyRegistrationInfo; InvitationCode = invitationCode; }
public static UserInvitationData ToUserInvitationData(this UserDescriptionInfo info) => new (info, default, default);
public RegisterAgentWithAgencyRequest(UserDescriptionInfo agent, RegistrationAgencyInfo agency) { Agent = agent; Agency = agency; }
public RegisterInvitedAgentRequest(UserDescriptionInfo registrationInfo, string invitationCode) { RegistrationInfo = registrationInfo; InvitationCode = invitationCode; }
public SendAdminInvitationRequest(UserDescriptionInfo registrationInfo, int[] roleIds) { RegistrationInfo = registrationInfo; RoleIds = roleIds; }
public void Deconstruct(out UserDescriptionInfo registrationInfo, out int[] roleIds) { registrationInfo = RegistrationInfo; roleIds = RoleIds; }