diff --git a/internal/sms/sms.go b/internal/sms/sms.go new file mode 100644 index 0000000..8873915 --- /dev/null +++ b/internal/sms/sms.go @@ -0,0 +1,30 @@ +package sms + +import "gotest/internal/config" + +// Sender 短信发送接口,统一抽象不同短信通道的发送行为 +type Sender interface { + // Send 向指定手机号发送验证码 + Send(phone string, code string) error +} + +// NewSender 根据配置创建短信发送实例 +// 规则:DevMode 为 true 时无论 Provider 是什么都返回 MockSender; +// 否则按 Provider 返回 aliyun/tencent,默认 mock。 +func NewSender(cfg *config.SMSConfig) Sender { + // 开发模式直接返回 MockSender,不真实发送 + if cfg.DevMode { + return &MockSender{} + } + + // 根据 Provider 选择具体短信通道 + switch cfg.Provider { + case "aliyun": + return NewAliyunSender(&cfg.Aliyun) + case "tencent": + return NewTencentSender(&cfg.Tencent) + default: + // 未识别的 Provider 默认使用 mock,避免配置错误导致服务不可用 + return &MockSender{} + } +}