package models import ( "fmt" "time" "go.mongodb.org/mongo-driver/v2/bson" ) const ( RoleIDSuperAdmin = 9527 // 超级管理员(后台登录) RoleIDSuperUser = 0 // 超级用户(role_id=0 且 role=admin,可配置短信平台) RoleIDUser = 1 // 普通用户 ) // FlexDate 可解码 BSON DateTime 或 string,统一以 string 输出(兼容库中既有日期类型又有字符串的情况) type FlexDate string func (d *FlexDate) UnmarshalBSONValue(typ byte, data []byte) error { rv := bson.RawValue{Type: bson.Type(typ), Value: data} switch bson.Type(typ) { case bson.TypeDateTime: if dt, ok := rv.DateTimeOK(); ok { *d = FlexDate(time.UnixMilli(dt).Format("2006-01-02")) } return nil case bson.TypeString: if s, ok := rv.StringValueOK(); ok { *d = FlexDate(s) } return nil case bson.TypeNull, bson.TypeUndefined: *d = "" return nil default: return fmt.Errorf("FlexDate: cannot decode type %v", typ) } } type User struct { ID bson.ObjectID `bson:"_id,omitempty" json:"id,omitempty"` Username string `bson:"username" json:"username"` Mobile string `bson:"mobile,omitempty" json:"mobile,omitempty"` Email string `bson:"email" json:"email"` Password string `bson:"password" json:"-"` // 不返回给前端 Role string `bson:"role" json:"role"` RoleID int `bson:"role_id,omitempty" json:"role_id"` // 9527=超级管理员 1=普通用户 IsBeta bool `bson:"is_beta,omitempty" json:"is_beta"` TrialStartDate FlexDate `bson:"trial_start_date,omitempty" json:"trial_start_date,omitempty"` TrialEndDate FlexDate `bson:"trial_end_date,omitempty" json:"trial_end_date,omitempty"` LastLogin string `bson:"lastLogin,omitempty" json:"last_login,omitempty"` LLM string `bson:"llm,omitempty" json:"llm,omitempty"` } type UserCreateInput struct { Username string `json:"username" binding:"required"` Email string `json:"email" binding:"required"` Password string `json:"password" binding:"required"` Role string `json:"role"` RoleID int `json:"role_id"` // 9527=超级管理员 1=普通用户 IsBeta bool `json:"is_beta"` TrialStartDate string `json:"trial_start_date"` TrialEndDate string `json:"trial_end_date"` LLM string `json:"llm"` } type UserUpdateInput struct { Username *string `json:"username"` Email *string `json:"email"` Password *string `json:"password"` // 若提供则更新 Role *string `json:"role"` RoleID *int `json:"role_id"` IsBeta *bool `json:"is_beta"` TrialStartDate *string `json:"trial_start_date"` TrialEndDate *string `json:"trial_end_date"` LLM *string `json:"llm"` }