package examples import ( "fmt" "tyapi-server/internal/shared/validator" ) // UserRegistrationData 用户注册数据示例 type UserRegistrationData struct { Phone string `validate:"required,phone"` Password string `validate:"required,strong_password"` ConfirmPassword string `validate:"required,eqfield=Password"` Email string `validate:"omitempty,email"` Username string `validate:"required,username"` } // ProductData 产品数据示例 type ProductData struct { Name string `validate:"required,min=2,max=100"` Code string `validate:"required,product_code"` Price float64 `validate:"price,min=0"` CategoryID string `validate:"required,uuid"` Description string `validate:"omitempty,max=500"` } // ValidatorUsageExample 验证器使用示例 func ValidatorUsageExample() { // 创建业务验证器实例 bv := validator.NewBusinessValidator() fmt.Println("=== 验证器使用示例 ===") // 1. 使用结构体验证 fmt.Println("\n1. 结构体验证示例:") userData := UserRegistrationData{ Phone: "13800138000", Password: "Password123", ConfirmPassword: "Password123", Email: "user@example.com", Username: "testuser", } if err := bv.ValidateStruct(userData); err != nil { fmt.Printf("验证失败: %v\n", err) } else { fmt.Println("用户数据验证通过") } // 2. 使用单个字段验证 fmt.Println("\n2. 单个字段验证示例:") // 验证手机号 if err := bv.ValidatePhone("13800138000"); err != nil { fmt.Printf("手机号验证失败: %v\n", err) } else { fmt.Println("手机号验证通过") } // 验证密码 if err := bv.ValidatePassword("Password123"); err != nil { fmt.Printf("密码验证失败: %v\n", err) } else { fmt.Println("密码验证通过") } // 验证统一社会信用代码 if err := bv.ValidateSocialCreditCode("91110000123456789X"); err != nil { fmt.Printf("统一社会信用代码验证失败: %v\n", err) } else { fmt.Println("统一社会信用代码验证通过") } // 验证身份证号 if err := bv.ValidateIDCard("110101199001011234"); err != nil { fmt.Printf("身份证号验证失败: %v\n", err) } else { fmt.Println("身份证号验证通过") } // 验证URL if err := bv.ValidateURL("https://www.example.com"); err != nil { fmt.Printf("URL验证失败: %v\n", err) } else { fmt.Println("URL验证通过") } // 3. 验证失败示例 fmt.Println("\n3. 验证失败示例:") invalidUserData := UserRegistrationData{ Phone: "invalid_phone", Password: "weak", ConfirmPassword: "different", Email: "invalid_email", Username: "123invalid", // 数字开头 } if err := bv.ValidateStruct(invalidUserData); err != nil { fmt.Printf("预期的验证失败: %v\n", err) } // 4. 业务逻辑中的验证示例 fmt.Println("\n4. 业务逻辑验证示例:") businessValidationExample(bv) } // businessValidationExample 业务逻辑验证示例 func businessValidationExample(bv *validator.BusinessValidator) { // 模拟用户注册业务逻辑 registerUser := func(phone, password, confirmPassword string) error { // 验证手机号 if err := bv.ValidatePhone(phone); err != nil { return fmt.Errorf("手机号验证失败: %w", err) } // 验证密码强度 if err := bv.ValidatePassword(password); err != nil { return fmt.Errorf("密码验证失败: %w", err) } // 验证密码确认 if password != confirmPassword { return fmt.Errorf("两次输入的密码不一致") } // 验证字符串长度 if err := bv.ValidateStringLength(phone, "手机号", 11, 11); err != nil { return fmt.Errorf("手机号长度验证失败: %w", err) } // 这里可以添加更多业务逻辑验证... fmt.Println("用户注册验证通过,可以继续业务逻辑") return nil } // 测试用户注册 if err := registerUser("13800138000", "Password123", "Password123"); err != nil { fmt.Printf("用户注册失败: %v\n", err) } // 模拟产品创建业务逻辑 createProduct := func(name, code string, price float64) error { // 验证必填字段 if err := bv.ValidateRequired(name, "产品名称"); err != nil { return err } // 验证产品代码 if err := bv.ValidateProductCode(code); err != nil { return fmt.Errorf("产品代码验证失败: %w", err) } // 验证价格 if err := bv.ValidatePrice(price); err != nil { return fmt.Errorf("价格验证失败: %w", err) } // 验证字符串长度 if err := bv.ValidateStringLength(name, "产品名称", 2, 100); err != nil { return fmt.Errorf("产品名称长度验证失败: %w", err) } fmt.Println("产品创建验证通过,可以继续业务逻辑") return nil } // 测试产品创建 if err := createProduct("测试产品", "TEST_PRODUCT_001", 99.99); err != nil { fmt.Printf("产品创建失败: %v\n", err) } }