package logic import ( "context" "strconv" "lone-services/pkg/redis" "lone-services/pkg/utils" ) func smsCodeRedisKey(scene int32, mobile string) string { return utils.CodeKey + strconv.Itoa(int(scene)) + ":" + mobile } func verifyAndConsumeSmsCode(ctx context.Context, scene int32, mobile, code string) (bool, error) { if code == utils.StringEmpty { return false, nil } codeKey := smsCodeRedisKey(scene, mobile) cached, err := redis.Client.Get(ctx, codeKey).Result() if err == redis.Nil { return false, nil } if err != nil { return false, err } if cached != code { return false, nil } if delErr := redis.Client.Del(ctx, codeKey).Err(); delErr != nil { return false, delErr } return true, nil }