feat: refine member and trade management

This commit is contained in:
richjohnrambo
2026-10-18 18:11:34 +08:00
parent 2b3d855bcc
commit 48f304212e
12 changed files with 1079 additions and 70 deletions
+20 -28
View File
@@ -74,32 +74,36 @@ type AppMemberViewModel struct {
}
type AppMemberEditInp struct {
Id uint64 `json:"id"`
Username string `json:"username" v:"required|length:3,64#用户名不能为空|用户名长度为3到64个字符"`
Mobile string `json:"mobile" v:"phone-loose#手机号格式不正确"`
Password string `json:"password"`
TradePassword string `json:"tradePassword"`
RealName string `json:"realName" v:"max-length:64#姓名不能超过64个字符"`
IdNo string `json:"idNo" v:"max-length:32#证件号不能超过32个字符"`
ParentId uint64 `json:"parentId"`
LevelId uint64 `json:"levelId"`
RiskStatus int `json:"riskStatus" d:"1"`
CreditScore int `json:"creditScore" d:"100" v:"between:0,1000#信用分范围为0到1000"`
AutoDispatch int `json:"autoDispatch" d:"1"`
MemberCategory int `json:"memberCategory"`
IsTestAccount int `json:"isTestAccount"`
Id uint64 `json:"id"`
Username string `json:"username" v:"required|length:3,64#用户名不能为空|用户名长度为3到64个字符"`
Mobile string `json:"mobile" v:"phone-loose#手机号格式不正确"`
Password string `json:"password"`
TradePassword string `json:"tradePassword"`
RealName string `json:"realName" v:"max-length:64#姓名不能超过64个字符"`
IdNo string `json:"idNo" v:"max-length:32#证件号不能超过32个字符"`
ParentId uint64 `json:"parentId"`
LevelId uint64 `json:"levelId"`
RiskStatus int `json:"riskStatus" d:"1"`
CreditScore int `json:"creditScore" d:"100" v:"between:0,1000#信用分范围为0到1000"`
AutoDispatch int `json:"autoDispatch" d:"1"`
MemberCategory int `json:"memberCategory"`
IsTestAccount int `json:"isTestAccount"`
AvailableAmount *int64 `json:"availableAmount"`
}
func (in *AppMemberEditInp) Filter(ctx context.Context) error {
if in.Id == 0 {
return gerror.New("后台不支持创建会员,请由会员在C端完成注册")
}
if in.Password != "" && (len(in.Password) < 8 || !containsLetterAndNumber(in.Password)) {
return gerror.New("密码至少8位且必须同时包含字母和数字")
if in.Password != "" && (len([]rune(in.Password)) < 6 || len([]byte(in.Password)) > 64) {
return gerror.New("密码长度为6到64个字符")
}
if in.TradePassword != "" && len(in.TradePassword) < 6 {
return gerror.New("交易密码不能少于6位")
}
if in.AvailableAmount != nil && *in.AvailableAmount < 0 {
return gerror.New("账户余额不能小于0")
}
if !dict.HasOptionKey(consts.AppMemberRiskStatusOptions, in.RiskStatus) {
return gerror.New("风控状态不合法")
}
@@ -118,18 +122,6 @@ func (in *AppMemberEditInp) Filter(ctx context.Context) error {
}
return nil
}
func containsLetterAndNumber(value string) bool {
letter, number := false, false
for _, r := range value {
if r >= '0' && r <= '9' {
number = true
}
if (r >= 'a' && r <= 'z') || (r >= 'A' && r <= 'Z') {
letter = true
}
}
return letter && number
}
type AppMemberDeleteInp struct {
Id uint64 `json:"id" v:"required|min:1#会员ID不能为空|会员ID不能为空"`
@@ -11,7 +11,7 @@ import (
type AppMemberRegisterInp struct {
Username string `json:"username" v:"required|length:3,64#用户名不能为空|用户名长度为3到64个字符"`
Mobile string `json:"mobile" v:"required|phone-loose#手机号不能为空|手机号格式不正确"`
Password string `json:"password" v:"required|length:8,64#密码不能为空|密码长度为8到64个字符"`
Password string `json:"password" v:"required|length:6,64#密码不能为空|密码长度为6到64个字符"`
InviteCode string `json:"inviteCode" v:"required#请输入邀请码"`
RegisterOrigin string `json:"registerOrigin" v:"max-length:512#注册来源不能超过512个字符"`
RegisterHost string `json:"registerHost" v:"max-length:255#注册域名不能超过255个字符"`
@@ -24,9 +24,6 @@ func (in *AppMemberRegisterInp) Filter(ctx context.Context) error {
if !regexp.MustCompile(`^[0-9]{6}$`).MatchString(in.InviteCode) {
return gerror.New("邀请码必须为6位数字")
}
if !containsLetterAndNumber(in.Password) {
return gerror.New("密码至少8位且必须同时包含字母和数字")
}
return nil
}