signup_request.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. // Package requests 处理请求数据和表单验证逻辑
  2. package requests
  3. import (
  4. "github.com/gin-gonic/gin"
  5. "github.com/thedevsaddam/govalidator"
  6. "github.com/runningwater/gohub/app/requests/validators"
  7. )
  8. type SignupPhoneExistRequest struct {
  9. Phone string `json:"phone,omitempty" valid:"phone"`
  10. }
  11. type SignupEmailExistRequest struct {
  12. Email string `json:"email,omitempty" valid:"email"`
  13. }
  14. func ValidateSignupPhoneExist(data any, c *gin.Context) map[string][]string {
  15. // 自定义验证规则
  16. rules := govalidator.MapData{
  17. "phone": []string{"required", "digits:11"},
  18. }
  19. // 自定义错误信息
  20. messages := govalidator.MapData{
  21. "phone": []string{
  22. "required:手机号不能为空",
  23. "digits:手机号必须是11位数字",
  24. },
  25. }
  26. // 执行验证
  27. return validate(data, rules, messages)
  28. }
  29. func ValidateSignupEmailExist(data any, c *gin.Context) map[string][]string {
  30. // 自定义验证规则
  31. rules := govalidator.MapData{
  32. "email": []string{"required", "min:4", "max:30", "email"},
  33. }
  34. // 自定义错误信息
  35. messages := govalidator.MapData{
  36. "email": []string{
  37. "required:Email 不能为空",
  38. "min:Email 长度需大于 4",
  39. "max:Email 长度需小于 30",
  40. "email:Email 格式不正确,请提供有效的邮箱地址",
  41. },
  42. }
  43. // 执行验证
  44. return validate(data, rules, messages)
  45. }
  46. // SignupUsingPhoneRequest 用于手机注册的请求结构体
  47. // 该结构体包含了手机号码、验证码、姓名、密码和确认密码等字段
  48. type SignupUsingPhoneRequest struct {
  49. Phone string `json:"phone,omitempty" valid:"phone"`
  50. VerifyCode string `json:"verify_code,omitempty" valid:"verify_code"`
  51. Name string `valid:"name" json:"name,omitempty"`
  52. Password string `valid:"password" json:"password,omitempty"`
  53. PasswordConfirm string `valid:"password_confirm" json:"password_confirm,omitempty"`
  54. }
  55. // SignupUsingPhone 验证手机号码注册表单
  56. func SignupUsingPhone(data any, c *gin.Context) map[string][]string {
  57. // 自定义验证规则
  58. rules := govalidator.MapData{
  59. "phone": []string{"required", "digits:11", "not_exists:users,phone"},
  60. "verify_code": []string{"required", "digits:6"},
  61. "name": []string{"required", "alpha_num", "between:3,20", "not_exists:users,name"},
  62. "password": []string{"required", "min:6"},
  63. "password_confirm": []string{"required"},
  64. }
  65. // 自定义错误信息
  66. messages := govalidator.MapData{
  67. "phone": []string{
  68. "required:手机号不能为空",
  69. "digits:手机号必须是 11 位数字",
  70. },
  71. "verify_code": []string{
  72. "required:验证码不能为空",
  73. "digits:验证码必须是 6 位数字",
  74. },
  75. "name": []string{
  76. "required:姓名不能为空",
  77. "alpha_num:姓名格式错误,只允许数字和英文",
  78. "between:姓名长度需在 3~20 之间",
  79. },
  80. "password": []string{
  81. "required:密码不能为空",
  82. "min:密码长度需大于 6",
  83. },
  84. "password_confirm": []string{
  85. "required:确认密码框不能为空",
  86. },
  87. }
  88. errs := validate(data, rules, messages)
  89. // 检查密码和确认密码是否匹配
  90. _data := data.(*SignupUsingPhoneRequest)
  91. errs = validators.ValidatePasswordConfirm(_data.Password, _data.PasswordConfirm, errs)
  92. errs = validators.ValidateVerifyCode(_data.Phone, _data.VerifyCode, errs)
  93. return errs
  94. }
  95. // SignupUsingEmailRequest 用于邮箱注册的请求结构体
  96. // !该结构体包含了邮箱、验证码、姓名、密码和确认密码等字段
  97. type SignupUsingEmailRequest struct {
  98. Email string `json:"email,omitempty" valid:"email"`
  99. VerifyCode string `json:"verify_code,omitempty" valid:"verify_code"`
  100. Name string `valid:"name" json:"name"`
  101. Password string `valid:"password" json:"password,omitempty"`
  102. PasswordConfirm string `valid:"password_confirm" json:"password_confirm,omitempty"`
  103. }
  104. // SignupUsingEmail 验证邮箱注册表单
  105. func SignupUsingEmail(data any, c *gin.Context) map[string][]string {
  106. rules := govalidator.MapData{
  107. "email": []string{"required", "min:4", "max:30", "email", "not_exists:users,email"}, // 邮箱验证规则
  108. "verify_code": []string{"required", "digits:6"}, // 验证码验证规则
  109. "name": []string{"required", "alpha_num", "between:3,20", "not_exists:users,name"}, // 姓名验证规则
  110. "password": []string{"required", "min:6"}, // 密码验证规则
  111. "password_confirm": []string{"required"}, // 确认密码验证规则
  112. }
  113. // 自定义错误信息
  114. messages := govalidator.MapData{
  115. "email": []string{
  116. "required:Email 不能为空",
  117. "min:Email 长度需大于 4",
  118. "max:Email 长度需小于 30",
  119. "email:Email 格式不正确,请提供有效的邮箱地址",
  120. "not_exists:邮箱已被注册",
  121. },
  122. "verify_code": []string{
  123. "required:验证码不能为空",
  124. "digits:验证码必须是 6 位数字",
  125. },
  126. "name": []string{
  127. "required:姓名不能为空",
  128. "alpha_num:姓名格式错误,只允许数字和英文",
  129. "between:姓名长度需在 3~20 之间",
  130. },
  131. "password": []string{
  132. "required:密码不能为空",
  133. "min:密码长度需大于 6",
  134. },
  135. "password_confirm": []string{
  136. "required:确认密码框不能为空",
  137. },
  138. }
  139. errs := validate(data, rules, messages)
  140. // 检查密码和确认密码是否匹配
  141. _data := data.(*SignupUsingEmailRequest)
  142. errs = validators.ValidatePasswordConfirm(_data.Password, _data.PasswordConfirm, errs)
  143. errs = validators.ValidateVerifyCode(_data.Email, _data.VerifyCode, errs)
  144. return errs
  145. }