115 lines
2.6 KiB
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"},
|
|
}
|
|
}
|