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(32), // 个人信息 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"}, } }