feat add tenant users

This commit is contained in:
2025-12-16 11:20:40 +08:00
parent 28ab17324d
commit d058b7ffda
17 changed files with 1780 additions and 32 deletions

View File

@@ -16,8 +16,6 @@ import (
const (
// RoleUser is a Role of type user.
RoleUser Role = "user"
// RoleTenantAdmin is a Role of type tenant_admin.
RoleTenantAdmin Role = "tenant_admin"
// RoleSuperAdmin is a Role of type super_admin.
RoleSuperAdmin Role = "super_admin"
)
@@ -26,7 +24,6 @@ var ErrInvalidRole = fmt.Errorf("not a valid Role, try [%s]", strings.Join(_Role
var _RoleNames = []string{
string(RoleUser),
string(RoleTenantAdmin),
string(RoleSuperAdmin),
}
@@ -41,7 +38,6 @@ func RoleNames() []string {
func RoleValues() []Role {
return []Role{
RoleUser,
RoleTenantAdmin,
RoleSuperAdmin,
}
}
@@ -59,9 +55,8 @@ func (x Role) IsValid() bool {
}
var _RoleValue = map[string]Role{
"user": RoleUser,
"tenant_admin": RoleTenantAdmin,
"super_admin": RoleSuperAdmin,
"user": RoleUser,
"super_admin": RoleSuperAdmin,
}
// ParseRole attempts to convert a string to a Role.
@@ -178,6 +173,331 @@ func (x NullRoleStr) Value() (driver.Value, error) {
return x.Role.String(), nil
}
const (
// TenantStatusPendingVerify is a TenantStatus of type pending_verify.
TenantStatusPendingVerify TenantStatus = "pending_verify"
// TenantStatusVerified is a TenantStatus of type verified.
TenantStatusVerified TenantStatus = "verified"
// TenantStatusBanned is a TenantStatus of type banned.
TenantStatusBanned TenantStatus = "banned"
)
var ErrInvalidTenantStatus = fmt.Errorf("not a valid TenantStatus, try [%s]", strings.Join(_TenantStatusNames, ", "))
var _TenantStatusNames = []string{
string(TenantStatusPendingVerify),
string(TenantStatusVerified),
string(TenantStatusBanned),
}
// TenantStatusNames returns a list of possible string values of TenantStatus.
func TenantStatusNames() []string {
tmp := make([]string, len(_TenantStatusNames))
copy(tmp, _TenantStatusNames)
return tmp
}
// TenantStatusValues returns a list of the values for TenantStatus
func TenantStatusValues() []TenantStatus {
return []TenantStatus{
TenantStatusPendingVerify,
TenantStatusVerified,
TenantStatusBanned,
}
}
// String implements the Stringer interface.
func (x TenantStatus) String() string {
return string(x)
}
// IsValid provides a quick way to determine if the typed value is
// part of the allowed enumerated values
func (x TenantStatus) IsValid() bool {
_, err := ParseTenantStatus(string(x))
return err == nil
}
var _TenantStatusValue = map[string]TenantStatus{
"pending_verify": TenantStatusPendingVerify,
"verified": TenantStatusVerified,
"banned": TenantStatusBanned,
}
// ParseTenantStatus attempts to convert a string to a TenantStatus.
func ParseTenantStatus(name string) (TenantStatus, error) {
if x, ok := _TenantStatusValue[name]; ok {
return x, nil
}
return TenantStatus(""), fmt.Errorf("%s is %w", name, ErrInvalidTenantStatus)
}
var errTenantStatusNilPtr = errors.New("value pointer is nil") // one per type for package clashes
// Scan implements the Scanner interface.
func (x *TenantStatus) Scan(value interface{}) (err error) {
if value == nil {
*x = TenantStatus("")
return
}
// A wider range of scannable types.
// driver.Value values at the top of the list for expediency
switch v := value.(type) {
case string:
*x, err = ParseTenantStatus(v)
case []byte:
*x, err = ParseTenantStatus(string(v))
case TenantStatus:
*x = v
case *TenantStatus:
if v == nil {
return errTenantStatusNilPtr
}
*x = *v
case *string:
if v == nil {
return errTenantStatusNilPtr
}
*x, err = ParseTenantStatus(*v)
default:
return errors.New("invalid type for TenantStatus")
}
return
}
// Value implements the driver Valuer interface.
func (x TenantStatus) Value() (driver.Value, error) {
return x.String(), nil
}
// Set implements the Golang flag.Value interface func.
func (x *TenantStatus) Set(val string) error {
v, err := ParseTenantStatus(val)
*x = v
return err
}
// Get implements the Golang flag.Getter interface func.
func (x *TenantStatus) Get() interface{} {
return *x
}
// Type implements the github.com/spf13/pFlag Value interface.
func (x *TenantStatus) Type() string {
return "TenantStatus"
}
type NullTenantStatus struct {
TenantStatus TenantStatus
Valid bool
}
func NewNullTenantStatus(val interface{}) (x NullTenantStatus) {
err := x.Scan(val) // yes, we ignore this error, it will just be an invalid value.
_ = err // make any errcheck linters happy
return
}
// Scan implements the Scanner interface.
func (x *NullTenantStatus) Scan(value interface{}) (err error) {
if value == nil {
x.TenantStatus, x.Valid = TenantStatus(""), false
return
}
err = x.TenantStatus.Scan(value)
x.Valid = (err == nil)
return
}
// Value implements the driver Valuer interface.
func (x NullTenantStatus) Value() (driver.Value, error) {
if !x.Valid {
return nil, nil
}
// driver.Value accepts int64 for int values.
return string(x.TenantStatus), nil
}
type NullTenantStatusStr struct {
NullTenantStatus
}
func NewNullTenantStatusStr(val interface{}) (x NullTenantStatusStr) {
x.Scan(val) // yes, we ignore this error, it will just be an invalid value.
return
}
// Value implements the driver Valuer interface.
func (x NullTenantStatusStr) Value() (driver.Value, error) {
if !x.Valid {
return nil, nil
}
return x.TenantStatus.String(), nil
}
const (
// TenantUserRoleMember is a TenantUserRole of type member.
TenantUserRoleMember TenantUserRole = "member"
// TenantUserRoleTenantAdmin is a TenantUserRole of type tenant_admin.
TenantUserRoleTenantAdmin TenantUserRole = "tenant_admin"
)
var ErrInvalidTenantUserRole = fmt.Errorf("not a valid TenantUserRole, try [%s]", strings.Join(_TenantUserRoleNames, ", "))
var _TenantUserRoleNames = []string{
string(TenantUserRoleMember),
string(TenantUserRoleTenantAdmin),
}
// TenantUserRoleNames returns a list of possible string values of TenantUserRole.
func TenantUserRoleNames() []string {
tmp := make([]string, len(_TenantUserRoleNames))
copy(tmp, _TenantUserRoleNames)
return tmp
}
// TenantUserRoleValues returns a list of the values for TenantUserRole
func TenantUserRoleValues() []TenantUserRole {
return []TenantUserRole{
TenantUserRoleMember,
TenantUserRoleTenantAdmin,
}
}
// String implements the Stringer interface.
func (x TenantUserRole) String() string {
return string(x)
}
// IsValid provides a quick way to determine if the typed value is
// part of the allowed enumerated values
func (x TenantUserRole) IsValid() bool {
_, err := ParseTenantUserRole(string(x))
return err == nil
}
var _TenantUserRoleValue = map[string]TenantUserRole{
"member": TenantUserRoleMember,
"tenant_admin": TenantUserRoleTenantAdmin,
}
// ParseTenantUserRole attempts to convert a string to a TenantUserRole.
func ParseTenantUserRole(name string) (TenantUserRole, error) {
if x, ok := _TenantUserRoleValue[name]; ok {
return x, nil
}
return TenantUserRole(""), fmt.Errorf("%s is %w", name, ErrInvalidTenantUserRole)
}
var errTenantUserRoleNilPtr = errors.New("value pointer is nil") // one per type for package clashes
// Scan implements the Scanner interface.
func (x *TenantUserRole) Scan(value interface{}) (err error) {
if value == nil {
*x = TenantUserRole("")
return
}
// A wider range of scannable types.
// driver.Value values at the top of the list for expediency
switch v := value.(type) {
case string:
*x, err = ParseTenantUserRole(v)
case []byte:
*x, err = ParseTenantUserRole(string(v))
case TenantUserRole:
*x = v
case *TenantUserRole:
if v == nil {
return errTenantUserRoleNilPtr
}
*x = *v
case *string:
if v == nil {
return errTenantUserRoleNilPtr
}
*x, err = ParseTenantUserRole(*v)
default:
return errors.New("invalid type for TenantUserRole")
}
return
}
// Value implements the driver Valuer interface.
func (x TenantUserRole) Value() (driver.Value, error) {
return x.String(), nil
}
// Set implements the Golang flag.Value interface func.
func (x *TenantUserRole) Set(val string) error {
v, err := ParseTenantUserRole(val)
*x = v
return err
}
// Get implements the Golang flag.Getter interface func.
func (x *TenantUserRole) Get() interface{} {
return *x
}
// Type implements the github.com/spf13/pFlag Value interface.
func (x *TenantUserRole) Type() string {
return "TenantUserRole"
}
type NullTenantUserRole struct {
TenantUserRole TenantUserRole
Valid bool
}
func NewNullTenantUserRole(val interface{}) (x NullTenantUserRole) {
err := x.Scan(val) // yes, we ignore this error, it will just be an invalid value.
_ = err // make any errcheck linters happy
return
}
// Scan implements the Scanner interface.
func (x *NullTenantUserRole) Scan(value interface{}) (err error) {
if value == nil {
x.TenantUserRole, x.Valid = TenantUserRole(""), false
return
}
err = x.TenantUserRole.Scan(value)
x.Valid = (err == nil)
return
}
// Value implements the driver Valuer interface.
func (x NullTenantUserRole) Value() (driver.Value, error) {
if !x.Valid {
return nil, nil
}
// driver.Value accepts int64 for int values.
return string(x.TenantUserRole), nil
}
type NullTenantUserRoleStr struct {
NullTenantUserRole
}
func NewNullTenantUserRoleStr(val interface{}) (x NullTenantUserRoleStr) {
x.Scan(val) // yes, we ignore this error, it will just be an invalid value.
return
}
// Value implements the driver Valuer interface.
func (x NullTenantUserRoleStr) Value() (driver.Value, error) {
if !x.Valid {
return nil, nil
}
return x.TenantUserRole.String(), nil
}
const (
// UserStatusPendingVerify is a UserStatus of type pending_verify.
UserStatusPendingVerify UserStatus = "pending_verify"

View File

@@ -8,9 +8,19 @@ package consts
// // )
// swagger:enum Role
// ENUM( user, tenant_admin, super_admin)
// ENUM( user, super_admin)
type Role string
// swagger:enum UserStatus
// ENUM(pending_verify, verified, banned, )
type UserStatus string
// tenants
// swagger:enum TenantStatus
// ENUM( pending_verify, verified, banned )
type TenantStatus string
// swagger:enum TenantUserRole
// ENUM( member, tenant_admin)
type TenantUserRole string