74 lines
2.3 KiB
Go
74 lines
2.3 KiB
Go
package smslogic
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/perfect-panel/server/pkg/logger"
|
|
|
|
"github.com/hibiken/asynq"
|
|
"github.com/perfect-panel/server/internal/model/log"
|
|
"github.com/perfect-panel/server/internal/svc"
|
|
"github.com/perfect-panel/server/pkg/constant"
|
|
"github.com/perfect-panel/server/pkg/sms"
|
|
"github.com/perfect-panel/server/queue/types"
|
|
)
|
|
|
|
type SmsSendCount struct {
|
|
Count int `json:"count"`
|
|
CreateAt int64 `json:"create_at"`
|
|
}
|
|
|
|
type SendSmsLogic struct {
|
|
svcCtx *svc.ServiceContext
|
|
}
|
|
|
|
func NewSendSmsLogic(svcCtx *svc.ServiceContext) *SendSmsLogic {
|
|
return &SendSmsLogic{
|
|
svcCtx: svcCtx,
|
|
}
|
|
}
|
|
func (l *SendSmsLogic) ProcessTask(ctx context.Context, task *asynq.Task) error {
|
|
var payload types.SendSmsPayload
|
|
if err := json.Unmarshal(task.Payload(), &payload); err != nil {
|
|
logger.WithContext(ctx).Error("[SendSmsLogic] Unmarshal payload failed",
|
|
logger.Field("error", err.Error()),
|
|
logger.Field("payload", task.Payload()),
|
|
)
|
|
return nil
|
|
}
|
|
client, err := sms.NewSender(l.svcCtx.Config.Mobile.Platform, l.svcCtx.Config.Mobile.PlatformConfig)
|
|
if err != nil {
|
|
logger.WithContext(ctx).Error("[SendSmsLogic] New send sms client failed", logger.Field("error", err.Error()), logger.Field("payload", payload))
|
|
return err
|
|
}
|
|
createSms := &log.MessageLog{
|
|
Type: log.Mobile.String(),
|
|
Platform: l.svcCtx.Config.Mobile.Platform,
|
|
To: fmt.Sprintf("+%s%s", payload.TelephoneArea, payload.Telephone),
|
|
Subject: constant.ParseVerifyType(payload.Type).String(),
|
|
Content: "",
|
|
}
|
|
err = client.SendCode(payload.TelephoneArea, payload.Telephone, payload.Content)
|
|
|
|
createSms.Content = client.GetSendCodeContent(payload.Content)
|
|
|
|
if err != nil {
|
|
logger.WithContext(ctx).Error("[SendSmsLogic] Send sms failed", logger.Field("error", err.Error()), logger.Field("payload", payload))
|
|
if l.svcCtx.Config.Model != constant.DevMode {
|
|
createSms.Status = 2
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|
|
createSms.Status = 1
|
|
logger.WithContext(ctx).Info("[SendSmsLogic] Send sms", logger.Field("telephone", payload.Telephone), logger.Field("content", createSms.Content))
|
|
err = l.svcCtx.LogModel.InsertMessageLog(ctx, createSms)
|
|
if err != nil {
|
|
logger.WithContext(ctx).Error("[SendSmsLogic] Send sms failed", logger.Field("error", err.Error()), logger.Field("payload", payload))
|
|
return nil
|
|
}
|
|
return nil
|
|
}
|