feat: 迁移商务登录品牌和三步找回密码

This commit is contained in:
Yvan
2026-11-03 19:07:30 +08:00
parent 317c253ba9
commit 8048dfb514
39 changed files with 2190 additions and 283 deletions
@@ -0,0 +1,38 @@
package gameplatform
import (
"context"
"kra/internal/biz/business"
"kra/internal/biz/integration"
"os"
"regexp"
)
type passwordSMS struct {
uc *integration.SMSUsecase
provider string
}
func NewPasswordSMS(sender integration.SMSSender) business.PasswordResetSMS {
provider := os.Getenv("SW_PASSWORD_RESET_SMS_PROVIDER")
if provider == "" {
provider = "tencent"
}
return &passwordSMS{uc: integration.NewSMSUsecase(sender), provider: provider}
}
var localMobile = regexp.MustCompile(`^\d{11}$`)
func (s *passwordSMS) SendCode(ctx context.Context, phone, code string) error {
if localMobile.MatchString(phone) {
phone = "+86" + phone
}
message := &integration.SMSMessage{Provider: s.provider, Phone: phone}
if s.provider == "aliyun" {
message.NamedParams = map[string]string{"code": code}
} else {
message.Params = []string{code}
}
_, err := s.uc.Send(ctx, message)
return err
}
@@ -0,0 +1,35 @@
package gameplatform
import (
"context"
"kra/internal/biz/integration"
"testing"
)
type resetSMSSender struct{ message *integration.SMSMessage }
func (s *resetSMSSender) Send(_ context.Context, m *integration.SMSMessage) (*integration.SMSResult, error) {
s.message = m
return &integration.SMSResult{}, nil
}
func TestPasswordSMSUsesConfiguredProviderAndTemplateShape(t *testing.T) {
for _, provider := range []string{"tencent", "aliyun"} {
t.Run(provider, func(t *testing.T) {
t.Setenv("SW_PASSWORD_RESET_SMS_PROVIDER", provider)
sender := &resetSMSSender{}
if err := NewPasswordSMS(sender).SendCode(context.Background(), "13800138000", "123456"); err != nil {
t.Fatal(err)
}
m := sender.message
if m.Phone != "+8613800138000" || m.Provider != provider {
t.Fatalf("手机号或提供商不正确: %+v", m)
}
if provider == "tencent" && (len(m.Params) != 1 || m.Params[0] != "123456") {
t.Fatal("腾讯云参数未按模板顺序传递")
}
if provider == "aliyun" && m.NamedParams["code"] != "123456" {
t.Fatal("阿里云参数未使用 code 键")
}
})
}
}
+1
View File
@@ -24,6 +24,7 @@ import (
var ProviderSet = wire.NewSet(
gameplatform.NewPasswords,
gameplatform.NewPasswordSMS,
cache.New,
email.NewEmailRepo,
sms.NewSender,