Files
gochat/internal/service/csat_template_worker.go
T

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)
}