44 lines
1.2 KiB
Go
44 lines
1.2 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"sync"
|
|
|
|
"github.com/gochat/gochat/internal/model"
|
|
"github.com/gochat/gochat/internal/worker"
|
|
)
|
|
|
|
const TaskTypeCsatTemplateCreate = "csat:template_create"
|
|
|
|
type csatTemplateCreateJob struct {
|
|
TemplateID uint `json:"template_id"`
|
|
Request CreateCsatTemplateRequest `json:"request"`
|
|
}
|
|
|
|
var csatTemplateRegistrations sync.Map
|
|
|
|
// RegisterCsatTemplateJobs wires Chatwoot WhatsApp/Twilio CSAT template
|
|
// creation into the durable worker path.
|
|
func RegisterCsatTemplateJobs(wp *worker.WorkerPool, svc *CsatTemplateService) {
|
|
if wp == nil || svc == nil {
|
|
return
|
|
}
|
|
if _, loaded := csatTemplateRegistrations.LoadOrStore(wp, struct{}{}); loaded {
|
|
return
|
|
}
|
|
wp.Register(TaskTypeCsatTemplateCreate, svc.performTemplateCreateJob)
|
|
}
|
|
|
|
func (s *CsatTemplateService) performTemplateCreateJob(ctx context.Context, job *model.BackgroundJob) error {
|
|
var payload csatTemplateCreateJob
|
|
if err := json.Unmarshal(job.Payload, &payload); err != nil {
|
|
return fmt.Errorf("unmarshal csat template job: %w", err)
|
|
}
|
|
if payload.TemplateID == 0 {
|
|
return fmt.Errorf("invalid csat template job payload: %#v", payload)
|
|
}
|
|
return s.performTemplateCreate(ctx, payload.TemplateID, payload.Request)
|
|
}
|