Beispiel #1
0
        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));
        }
Beispiel #4
0
        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);
        }