package analytics import ( "context" "encoding/json" "github.com/hibiken/asynq" ) type EventPublisher interface { Publish(ctx context.Context, event AnalyticsEvent) error } type AsynqClient interface { EnqueueContext(ctx context.Context, task *asynq.Task, opts ...asynq.Option) (*asynq.TaskInfo, error) } type asynqEventPublisher struct { client AsynqClient } func NewEventPublisher(client AsynqClient) EventPublisher { return &asynqEventPublisher{client: client} } func (p *asynqEventPublisher) Publish(ctx context.Context, event AnalyticsEvent) error { payload, err := json.Marshal(event) if err != nil { return err } task := asynq.NewTask(string(event.EventType), payload) _, err = p.client.EnqueueContext(ctx, task, asynq.Queue(QueueAnalytics)) return err }