45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
package schedule
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"encoding/gob"
|
|
|
|
"likedream-goframe/internal/framework/logger"
|
|
payloadmodel "likedream-goframe/internal/framework/model/email"
|
|
mailservice "likedream-goframe/internal/service/email"
|
|
"likedream-goframe/internal/utils"
|
|
|
|
"github.com/hibiken/asynq"
|
|
"github.com/samber/oops"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
type EmailTaskHandler struct{}
|
|
|
|
func (h *EmailTaskHandler) ProcessTask(ctx context.Context, task *asynq.Task) (err error) {
|
|
defer utils.Pass(&err)
|
|
|
|
var payload payloadmodel.SendPayload
|
|
if e := gob.NewDecoder(bytes.NewReader(task.Payload())).Decode(&payload); e != nil {
|
|
utils.OkOrPanic(e, oops.WithContext(ctx).Wrap)
|
|
}
|
|
|
|
logger.Logger.Info("start sending email", zap.String("to", payload.To))
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
logger.Logger.Error("send email failed", zap.String("to", payload.To), zap.Error(r.(error)))
|
|
panic(r)
|
|
}
|
|
}()
|
|
|
|
svc := mailservice.NewV1()
|
|
cfg := mailservice.ConfigFromPayload(payload)
|
|
if e := svc.SendMessageNow(ctx, cfg, payload.To, payload.Subject, payload.Body); e != nil {
|
|
utils.OkOrPanic(e, oops.WithContext(ctx).Wrap)
|
|
}
|
|
|
|
logger.Logger.Info("email sent", zap.String("to", payload.To))
|
|
return nil
|
|
}
|