public async Task RegisterAsync([FromBody] UserFullDto request, string invitationCode) { if (request == null) { throw new ArgumentNullException(nameof(request)); } request.NormalizeAsRequest(); using (var uow = UowManager.CurrentOrCreateNew(true)) { if (!(await((IUserDomainService)DomainService).IsUsernameValidAsync(request.Username))) { throw new ValidateEntityPropertiesException(nameof(request.Username)); } Invitation invitation = await InvitationDomainService.UseInvitationAsync(invitationCode); User newUser = request.MapToEntity(); newUser.MaxSitesCount = invitation.AvailableSitesCount; newUser.UserRoles = new List <UserRole>() { new UserRole() { User = newUser, RoleId = invitation.RoleId } }; await DomainService.CreateAsync(newUser); await uow.CompleteAsync(); } }
public async Task CreateAsync([FromBody] WidgetEventFullDto request) { if (request == null) { throw new ArgumentNullException(nameof(request)); } request.NormalizeAsRequest(); using (var uow = UowManager.CurrentOrCreateNew(true)) { await DomainService.CreateAsync(request.MapToEntity()); await uow.CompleteAsync(); } }
public virtual async Task <Result <TReadDto> > CreateAsync(TCreateDto dto, string createdBy, CancellationToken cancellationToken) { var validatableObject = dto as IObjectValidatable; if (validatableObject != null) { var objectValidationErrors = validatableObject.Validate().ToList(); if (objectValidationErrors.Any()) { return(Result.ObjectValidationFail <TReadDto>(objectValidationErrors)); } } var bo = Mapper.Map <TEntity>(dto); var result = await DomainService.CreateAsync(cancellationToken, bo, createdBy).ConfigureAwait(false); if (result.IsFailure) { switch (result.ErrorType) { case ErrorType.ObjectValidationFailed: return(Result.ObjectValidationFail <TReadDto>(result.ObjectValidationErrors)); case ErrorType.DatabaseValidationFailed: return(Result.ObjectValidationFail <TReadDto>(result.ObjectValidationErrors)); case ErrorType.ObjectDoesNotExist: return(Result.ObjectDoesNotExist <TReadDto>()); default: throw new ArgumentException(); } } var readDto = Mapper.Map <TReadDto>(bo); if (HubContext != null) { await HubContext.CreatedAsync(readDto); } return(Result.Ok(readDto)); }
public async Task <LeadFullDto> CompleteBookingAsync(int siteId, [FromBody] CompleteBookingRequest request) { if (request == null) { throw new ArgumentNullException(nameof(request)); } LeadFullDto leadFullDto = request.MapToLeadFullDto(siteId); leadFullDto.NormalizeAsRequest(); Lead createdLead; using (var uow = UowManager.CurrentOrCreateNew()) { Session.UserId = (await SiteDomainService.RetrieveAsync(siteId)).UserId; Lead stubEntity = await DomainService.CreateAsync(leadFullDto.MapToEntity()); await uow.CompleteAsync(); createdLead = await DomainService.RetrieveAsync(stubEntity.Id, false); } LeadFullDto createLeadFullDto = new LeadFullDto(); createLeadFullDto.MapFromEntity(createdLead); #region Send EMAIL notifications Task <SendGrid.Response> sendCompleteBookingEmailTask = TestDriveEmailService .SendCompleteBookingEmail( new EmailAddress(createdLead.UserEmail, $"{createdLead.FirstName} {createdLead.SecondName}"), new CompleteBookingEmailTemplate(createdLead, request.TimeZoneOffset)); Task <SendGrid.Response> sendNewLeadNotificationEmailTask = TestDriveEmailService .SendNewLeadNotificationEmail( createdLead.Site.EmailAdresses.Select(r => new EmailAddress(r)).ToList(), new NewLeadNotificationEmailTemplate(createdLead, request.TimeZoneOffset)); Task <SendGrid.Response> sendAdfEmailTask = TestDriveEmailService .SendAdfEmail( createdLead.Site.AdfEmailAdresses.Select(r => new EmailAddress(r)).ToList(), new EleadAdfTemplate(createdLead, request.BookingVehicle, request.TimeZoneOffset)); await Task.WhenAll(sendCompleteBookingEmailTask, sendNewLeadNotificationEmailTask, sendAdfEmailTask); // responses can be analyzed below via send...EmailTask.Result #endregion #region Send SMS notifications await SmsService.SendSms(createdLead.Site.PhoneNumbers, new NewLeadNotificationSmsTemplate(createdLead, request.TimeZoneOffset)); #endregion #region Sales person notifications if (createdLead.Expert != null && !String.IsNullOrWhiteSpace(createdLead.Expert.Email)) { await TestDriveEmailService.SendNewLeadNotificationEmail( new List <EmailAddress>() { new EmailAddress(createdLead.Expert.Email) }, new ExpertNotificationEmailTemplate(createdLead, request.TimeZoneOffset)); } if (createdLead.Expert != null && !String.IsNullOrWhiteSpace(createdLead.Expert.PhoneNumber) && createdLead.Site.Id != 1070) { await SmsService.SendSms(new List <string>() { createdLead.Expert.PhoneNumber }, new NewLeadNotificationSmsTemplate(createdLead, request.TimeZoneOffset)); } #endregion return(createLeadFullDto); }