Example #1
0
        public async Task RequestTutorEmailQuery_Ok()
        {
            var query = new RequestTutorEmailQuery(new Guid("DB8A3DB9-94B5-41AB-9377-AB0B00D81BCD"));
            var res   = await fixture.QueryBus.QueryAsync(query, default);

            res.Should().NotBeEmpty();
        }
        public async Task DoOperationAsync(RequestTutorMessage message2, IBinder binder, CancellationToken token)
        {
            var query  = new RequestTutorEmailQuery(message2.LeadId);
            var result = await _queryBus.QueryAsync(query, token);

            foreach (var obj in result)
            {
                CultureInfo.DefaultThreadCurrentCulture = obj.TutorLanguage.ChangeCultureBaseOnCountry(obj.TutorCountry);
                var body = ResourceWrapper.GetString("unread_message_request_email_body");


                var code           = _dataProtectionService.ProtectData(obj.TutorId.ToString(), DateTimeOffset.UtcNow.AddDays(5));
                var identifierChat = ShortId.Generate(true, false);

                var url         = _urlBuilder.BuildChatEndpoint(code, new { utm_source = "request-tutor-email" });
                var commandChat = new CreateShortUrlCommand(identifierChat, url.PathAndQuery, DateTime.UtcNow.AddDays(5));
                await _commandBus.DispatchAsync(commandChat, token);

                var request = string.Empty;
                //TODO -  whatsapp link
                if (!string.IsNullOrEmpty(obj.Request))
                {
                    request = ResourceWrapper.GetString("unread_message_request_email_body_lead_request")
                              .InjectSingleValue("Request", obj.Request);
                }


                var whatsAppLink = new UriBuilder($"https://wa.me/{obj.StudentPhoneNumber.Replace("+", string.Empty)}")
                                   .AddQuery(new
                {
                    text = ResourceWrapper.GetString("unread_message_request_email_body_whatsapp_text").InjectSingleValue("CourseName", obj.CourseName),
                });

                var identifierWhatsApp = ShortId.Generate(true, false);
                var commandWhatsApp    = new CreateShortUrlCommand(identifierWhatsApp, whatsAppLink.ToString(), DateTime.UtcNow.AddDays(30));
                await _commandBus.DispatchAsync(commandWhatsApp, token);

                var urlShortWhatsApp = _urlBuilder.BuildShortUrlEndpoint(identifierWhatsApp, new
                {
                    eventCategory = "After tutor Submit",
                    eventAction   = "Whatsapp email",
                    eventLabel    = $"Tutor{obj.TutorId}, Student {obj.StudentId}"
                });
                body = body.InjectSingleValue("Request", request);

                body = body.InjectSingleValue("WhatsappLink", urlShortWhatsApp);

                var htmlBodyDirection = CultureInfo.CurrentCulture.TextInfo.IsRightToLeft ? "rtl" : "ltr";
                body = body.Inject(new
                {
                    Request       = request,
                    WhatsappLink  = whatsAppLink.ToString(),
                    UserFirstName = obj.TutorFirstName,
                    link          = _urlBuilder.BuildShortUrlEndpoint(identifierChat /*, obj.TutorCountry*/),
                    obj.StudentName,
                    obj.CourseName,
                    FirstMessageStudentName = obj.StudentName
                });
                var message = new SendGridMessage()
                {
                    Subject = ResourceWrapper.GetString("unread_message_request_email_subject").InjectSingleValue("FirstMessageStudentName", obj.StudentName)
                              .Inject(obj),
                    HtmlContent = $"<html><body dir=\"{htmlBodyDirection}\">{body.Replace(Environment.NewLine, "<br><br>")}</body></html>",
                };
                message.AddFromResource(CultureInfo.DefaultThreadCurrentCulture);
                message.AddTo(obj.TutorEmail);
                var emailProvider =
                    await binder.BindAsync <IAsyncCollector <SendGridMessage> >(new SendGridAttribute()
                {
                    ApiKey = "SendgridKey"
                }, token);

                await emailProvider.AddAsync(message, token);
            }
        }