mingyang-admin-iot-app/rpc/ent/schema/user.go

115 lines
2.6 KiB
Go

package schema
import (
"entgo.io/ent"
"entgo.io/ent/dialect/entsql"
"entgo.io/ent/schema"
"entgo.io/ent/schema/field"
"entgo.io/ent/schema/index"
"github.com/saas-mingyang/mingyang-admin-common/orm/ent/mixins"
mixins2 "mingyang-admin-app-rpc/ent/schema/mixins"
)
// User 用户表
type User struct {
ent.Schema
}
func (User) Fields() []ent.Field {
return []ent.Field{
// 账号信息
field.String("username").Comment("用户名").
Unique().
NotEmpty().
MaxLen(50).
Validate(func(s string) error {
// 用户名验证逻辑
return nil
}),
field.String("email").Comment("邮箱").
Unique().
NotEmpty().
MaxLen(255).
Validate(func(s string) error {
// 邮箱格式验证
return nil
}),
field.String("mobile").Comment("联系方式").
Optional().
Nillable().
MaxLen(64),
// 密码安全
field.String("password_hash").Comment("密码").
NotEmpty().
Sensitive(),
field.String("salt").Comment("salt盐值").
NotEmpty().
Sensitive().
MaxLen(255),
// 个人信息
field.String("nickname").Comment("昵称").
Default("").
MaxLen(50),
field.String("avatar").Comment("头像").
Optional().
Nillable().
MaxLen(500),
field.Enum("gender").
Values("unknown", "male", "female", "other").Comment("性别").
Default("unknown"),
field.Time("birthday").
Optional().
Nillable(),
// 账户状态
field.Enum("account_status").
Values("unverified", "active", "locked", "disabled").Comment("账户状态").
Default("unverified"),
// 验证信息
field.Uint32("is_verified").
Default(0).Comment("1 邮箱 ,2 电话号码"),
field.String("registered_login_ip").
Comment("注册IP地址").
Optional().
Nillable().
MaxLen(255),
field.Int64("login_attempts").
Default(0).Comment("登录尝试次数"),
// 元数据
field.JSON("metadata", map[string]interface{}{}).
Optional(),
field.String("registration_source").Comment("注册来源").
Optional().
MaxLen(50),
}
}
func (User) Mixin() []ent.Mixin {
return []ent.Mixin{
mixins.IDMixin{},
mixins.StatusMixin{},
mixins.TenantMixin{},
mixins2.SoftDeleteMixin{},
}
}
func (User) Indexes() []ent.Index {
return []ent.Index{
// 唯一索引
index.Fields("username").Unique(),
index.Fields("email").Unique(),
index.Fields("mobile").Unique(),
}
}
func (User) Edges() []ent.Edge {
return []ent.Edge{}
}
func (User) Annotations() []schema.Annotation {
return []schema.Annotation{
entsql.WithComments(true),
schema.Comment("User Table | C端用户表"),
entsql.Annotation{Table: "user"},
}
}