44 lines
833 B
Go
44 lines
833 B
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
|
|
"wucher/internal/queue"
|
|
)
|
|
|
|
type EmailJob = queue.EmailJob
|
|
|
|
type EmailQueue = queue.EmailJobProducer
|
|
|
|
func EncodeEmailJob(job EmailJob) ([]byte, error) {
|
|
return json.Marshal(job.Canonical())
|
|
}
|
|
|
|
func DecodeEmailJob(b []byte) (*EmailJob, error) {
|
|
var job EmailJob
|
|
if err := json.Unmarshal(b, &job); err != nil {
|
|
return nil, err
|
|
}
|
|
job = job.Canonical()
|
|
if err := job.Validate(); err != nil {
|
|
return nil, err
|
|
}
|
|
return &job, nil
|
|
}
|
|
|
|
type emailQueueAdapter struct {
|
|
producer queue.EmailJobProducer
|
|
}
|
|
|
|
func (a emailQueueAdapter) Enqueue(ctx context.Context, job EmailJob) error {
|
|
return a.producer.Enqueue(ctx, job)
|
|
}
|
|
|
|
func AdaptEmailQueue(producer queue.EmailJobProducer) EmailQueue {
|
|
if producer == nil {
|
|
return nil
|
|
}
|
|
return emailQueueAdapter{producer: producer}
|
|
}
|