parent
89f6c0a13a
commit
a12863e619
28
app/lead.go
28
app/lead.go
|
@ -4,34 +4,6 @@ import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
)
|
)
|
||||||
|
|
||||||
// LeadActivityWrapper wraps the object with workflow params
|
|
||||||
type LeadActivityWrapper struct {
|
|
||||||
APIKey string
|
|
||||||
SagaID string
|
|
||||||
SagaType string
|
|
||||||
//
|
|
||||||
Address Address
|
|
||||||
Company string
|
|
||||||
Description string
|
|
||||||
Email string
|
|
||||||
FirstName string
|
|
||||||
LastName string
|
|
||||||
MobilePhone string
|
|
||||||
Name string
|
|
||||||
Phone string
|
|
||||||
RefererURL string
|
|
||||||
Status string
|
|
||||||
TenantID string
|
|
||||||
Title string
|
|
||||||
Type string
|
|
||||||
UTMCampaign string
|
|
||||||
UTMContent string
|
|
||||||
UTMMedium string
|
|
||||||
UTMSource string
|
|
||||||
UTMTerm string
|
|
||||||
Website string
|
|
||||||
}
|
|
||||||
|
|
||||||
// Lead is a first-class object type
|
// Lead is a first-class object type
|
||||||
type Lead struct {
|
type Lead struct {
|
||||||
ID string
|
ID string
|
||||||
|
|
|
@ -67,7 +67,7 @@ func StoreContactActivity(ctx workflow.Context, w app.ContactActivityWrapper) er
|
||||||
}
|
}
|
||||||
|
|
||||||
// NotifyContactActivity sends an email to a new lead
|
// NotifyContactActivity sends an email to a new lead
|
||||||
func NotifyContactActivity(ctx context.Context, w app.ContactActivityWrapper) error { //nolint:dupl,gocritic,lll // todo #2 need email templates
|
func NotifyContactActivity(ctx context.Context, w app.ContactActivityWrapper) error { //nolint:gocritic,lll // todo #2 need email templates
|
||||||
sugar.Info("workflow.notifyContact: 📥")
|
sugar.Info("workflow.notifyContact: 📥")
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
const textBody = `
|
const textBody = `
|
||||||
|
|
|
@ -9,39 +9,36 @@ import (
|
||||||
"code.tnxs.net/taxnexus/lib/api/crm/crm_models"
|
"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_client/outgoing_email_message"
|
||||||
"code.tnxs.net/taxnexus/lib/api/workflow/workflow_models"
|
"code.tnxs.net/taxnexus/lib/api/workflow/workflow_models"
|
||||||
"code.tnxs.net/taxnexus/lib/app"
|
|
||||||
httptransport "github.com/go-openapi/runtime/client"
|
httptransport "github.com/go-openapi/runtime/client"
|
||||||
"go.temporal.io/sdk/workflow"
|
"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
|
// StoreLeadActivity posts a new lead object to datastore
|
||||||
func StoreLeadActivity(ctx workflow.Context, w app.LeadActivityWrapper) error { //nolint:gocritic // don't care
|
func StoreLeadActivity(ctx workflow.Context, w NewLeadActivityWrapper) error { //nolint:gocritic // don't care
|
||||||
obj := &crm_models.Lead{
|
obj := &crm_models.Lead{
|
||||||
Address: w.Address.MarshalToCrm(),
|
|
||||||
Company: w.Company,
|
Company: w.Company,
|
||||||
Description: w.Description,
|
Description: w.Description,
|
||||||
Email: w.Email,
|
Email: w.Email,
|
||||||
FirstName: w.FirstName,
|
FirstName: w.FirstName,
|
||||||
LastName: w.LastName,
|
LastName: w.LastName,
|
||||||
MobilePhone: w.MobilePhone,
|
Name: w.FirstName + " " + w.LastName,
|
||||||
Phone: w.Phone,
|
|
||||||
RefererURL: w.RefererURL,
|
|
||||||
Status: w.Status,
|
|
||||||
TenantID: w.TenantID,
|
|
||||||
Title: w.Title,
|
|
||||||
Type: w.Type,
|
|
||||||
UTMCampaign: w.UTMCampaign,
|
|
||||||
UTMContent: w.UTMContent,
|
|
||||||
UTMMedium: w.UTMMedium,
|
|
||||||
UTMSource: w.UTMSource,
|
UTMSource: w.UTMSource,
|
||||||
UTMTerm: w.UTMTerm,
|
|
||||||
Website: w.Website,
|
|
||||||
Name: w.Name,
|
|
||||||
}
|
}
|
||||||
postLeadParams := leads.NewPostLeadsParamsWithTimeout(postTimeout)
|
postLeadParams := leads.NewPostLeadsParamsWithTimeout(postTimeout)
|
||||||
if obj.Name == "" {
|
|
||||||
obj.Name = obj.FirstName + " " + obj.LastName
|
|
||||||
}
|
|
||||||
postLeadParams.LeadRequest = &crm_models.LeadRequest{
|
postLeadParams.LeadRequest = &crm_models.LeadRequest{
|
||||||
Data: []*crm_models.Lead{obj},
|
Data: []*crm_models.Lead{obj},
|
||||||
}
|
}
|
||||||
|
@ -59,7 +56,7 @@ func StoreLeadActivity(ctx workflow.Context, w app.LeadActivityWrapper) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// NotifyLeadActivity sends an email to a new lead
|
// NotifyLeadActivity sends an email to a new lead
|
||||||
func NotifyLeadActivity(ctx context.Context, w app.LeadActivityWrapper) error { //nolint:dupl,gocritic,lll // todo #2 need email templates
|
func NotifyLeadActivity(ctx context.Context, w NewLeadActivityWrapper) error { //nolint:gocritic,lll // todo #2 need email templates
|
||||||
sugar.Info("workflow.notifyLead: 📥")
|
sugar.Info("workflow.notifyLead: 📥")
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
const textBody = `
|
const textBody = `
|
||||||
|
@ -83,7 +80,7 @@ Alert! New Lead Inquiry from Taxnexus.io website.
|
||||||
emailParams.OutgoingEmailMessageRequest = &workflow_models.OutgoingEmailMessageRequest{
|
emailParams.OutgoingEmailMessageRequest = &workflow_models.OutgoingEmailMessageRequest{
|
||||||
Data: []*workflow_models.OutgoingEmailMessage{
|
Data: []*workflow_models.OutgoingEmailMessage{
|
||||||
{
|
{
|
||||||
Subject: "New lead from " + w.Name,
|
Subject: "New lead from " + w.FirstName + " " + w.LastName,
|
||||||
ValidatedFromAddress: "support@taxnexus.net",
|
ValidatedFromAddress: "support@taxnexus.net",
|
||||||
ToAddress: "info@taxnexus.net",
|
ToAddress: "info@taxnexus.net",
|
||||||
FromName: "Taxnexus Onboarding",
|
FromName: "Taxnexus Onboarding",
|
||||||
|
|
|
@ -3,7 +3,6 @@ package rules
|
||||||
import (
|
import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"code.tnxs.net/taxnexus/lib/app"
|
|
||||||
"go.temporal.io/sdk/temporal"
|
"go.temporal.io/sdk/temporal"
|
||||||
temporal_workflow "go.temporal.io/sdk/workflow"
|
temporal_workflow "go.temporal.io/sdk/workflow"
|
||||||
)
|
)
|
||||||
|
@ -14,57 +13,19 @@ type NewLeadWorkflowWrapper struct {
|
||||||
SagaID string
|
SagaID string
|
||||||
SagaType string
|
SagaType string
|
||||||
//
|
//
|
||||||
// Address crm_models.Address
|
|
||||||
Company string
|
Company string
|
||||||
Description string
|
Description string
|
||||||
Email string
|
Email string
|
||||||
FirstName string
|
FirstName string
|
||||||
LastName string
|
LastName string
|
||||||
MobilePhone string
|
|
||||||
Name string
|
|
||||||
OwnerID string
|
|
||||||
PartnerAccountID string
|
|
||||||
Phone string
|
|
||||||
ProductID string
|
|
||||||
RefererURL string
|
|
||||||
Status string
|
|
||||||
TenantID string
|
|
||||||
Title string
|
|
||||||
Type string
|
|
||||||
UTMCampaign string
|
|
||||||
UTMContent string
|
|
||||||
UTMMedium string
|
|
||||||
UTMSource string
|
UTMSource string
|
||||||
UTMTerm string
|
|
||||||
Website string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewLeadWorkflow is a Temporal workflow
|
// NewLeadWorkflow is a Temporal workflow
|
||||||
func NewLeadWorkflow(ctx temporal_workflow.Context, w NewLeadWorkflowWrapper) error { //nolint:gocritic // don't care
|
func NewLeadWorkflow(ctx temporal_workflow.Context, w NewLeadWorkflowWrapper) error { //nolint:gocritic // don't care
|
||||||
sugar.Info("rules.NewLeadWorkflow: 📥")
|
sugar.Info("rules.NewLeadWorkflow: 📥")
|
||||||
sugar.Debugf("rules.NewLeadWorkflow: wrapper: %v", w)
|
sugar.Debugf("rules.NewLeadWorkflow: wrapper: %v", w)
|
||||||
transferDetails := app.LeadActivityWrapper{
|
transferDetails := NewLeadActivityWrapper(w)
|
||||||
// Address: w.Address,
|
|
||||||
Company: w.Company,
|
|
||||||
Description: w.Description,
|
|
||||||
Email: w.Email,
|
|
||||||
FirstName: w.FirstName,
|
|
||||||
LastName: w.LastName,
|
|
||||||
MobilePhone: w.MobilePhone,
|
|
||||||
Name: w.Name,
|
|
||||||
Phone: w.Phone,
|
|
||||||
RefererURL: w.RefererURL,
|
|
||||||
Status: w.Status,
|
|
||||||
TenantID: w.TenantID,
|
|
||||||
Title: w.Title,
|
|
||||||
Type: w.Type,
|
|
||||||
UTMCampaign: w.UTMCampaign,
|
|
||||||
UTMContent: w.UTMContent,
|
|
||||||
UTMMedium: w.UTMMedium,
|
|
||||||
UTMSource: w.UTMSource,
|
|
||||||
UTMTerm: w.UTMTerm,
|
|
||||||
Website: w.Website,
|
|
||||||
}
|
|
||||||
retryPolicy := &temporal.RetryPolicy{
|
retryPolicy := &temporal.RetryPolicy{
|
||||||
InitialInterval: time.Second,
|
InitialInterval: time.Second,
|
||||||
MaximumInterval: time.Minute,
|
MaximumInterval: time.Minute,
|
||||||
|
|
Loading…
Reference in New Issue