package rules import ( "bytes" "context" "html/template" "code.tnxs.net/taxnexus/lib/api/crm/crm_client/leads" "code.tnxs.net/taxnexus/lib/api/crm/crm_models" "code.tnxs.net/taxnexus/lib/api/workflow/workflow_client/outgoing_email_message" "code.tnxs.net/taxnexus/lib/api/workflow/workflow_models" httptransport "github.com/go-openapi/runtime/client" "go.temporal.io/sdk/workflow" ) // NewLeadActivityWrapper wraps the object with workflow params type NewLeadActivityWrapper struct { APIKey string SagaID string SagaType string // Company string Description string Email string FirstName string LastName string UTMSource string } // StoreLeadActivity posts a new lead object to datastore func StoreLeadActivity(ctx workflow.Context, w NewLeadActivityWrapper) error { //nolint:gocritic // don't care sugar.Info("rules.StoreLeadActivity: 📥") sugar.Debugf("rules.StoreLeadActivity: 📏 ctx: %v", ctx) obj := &crm_models.Lead{ Company: w.Company, Description: w.Description, Email: w.Email, FirstName: w.FirstName, LastName: w.LastName, Name: w.FirstName + " " + w.LastName, UTMSource: w.UTMSource, } postLeadParams := leads.NewPostLeadsParamsWithTimeout(postTimeout) postLeadParams.LeadRequest = &crm_models.LeadRequest{ Data: []*crm_models.Lead{obj}, } _, err := crmClient.Leads.PostLeads(postLeadParams, httptransport.APIKeyAuth( "X-API-Key", "header", w.APIKey, )) if err != nil { return err } sugar.Info("rules.StoreLeadActivity: 👍 📤") return nil } // NotifyLeadActivity sends an email to a new lead func NotifyLeadActivity(ctx context.Context, w NewLeadActivityWrapper) error { //nolint:gocritic,lll // todo #2 need email templates sugar.Info("rules.NotifyLeadActivity: 📥") sugar.Debugf("rules.StoreLeadActivity: 📏 ctx: %v", ctx) var buf bytes.Buffer const textBody = ` Alert! New Lead Inquiry from Taxnexus.io website. Taxnexus ID: {{.ID}} First Name: {{.FirstName}} Last Name: {{.LastName}} Email: {{.Email}} Message: {{.Description}} -- end -- ` t := template.Must(template.New("textBody").Parse(textBody)) err := t.Execute(&buf, w) if err != nil { return err } emailParams := outgoing_email_message.NewPostOutgoingEmailMessagesParamsWithTimeout(postTimeout) emailParams.OutgoingEmailMessageRequest = &workflow_models.OutgoingEmailMessageRequest{ Data: []*workflow_models.OutgoingEmailMessage{ { Subject: "New lead from " + w.FirstName + " " + w.LastName, ValidatedFromAddress: "support@taxnexus.net", ToAddress: "info@taxnexus.net", FromName: "Taxnexus Onboarding", Text: buf.String(), HTML: "
" + buf.String() + "", }, }, } _, err = workflowClient.OutgoingEmailMessage.PostOutgoingEmailMessages(emailParams, httptransport.APIKeyAuth( "X-API-Key", "header", w.APIKey, )) if err != nil { return err } sugar.Info("rules.NotifyLeadActivity: 👍 📤") return nil }