feat(user): 添加昵称字段

This commit is contained in:
unclesam committed 2026-07-08 03:49:01 +08:00
1 parent b24e1e41d7
commit 85265abb48
10 files changed
+292 -5

No files matched your search

+1
View File
@@ -27,6 +27,7 @@ var (
{Name: "updated_at", Type: field.TypeTime},
{Name: "username", Type: field.TypeString, Unique: true},
{Name: "password", Type: field.TypeString},
{Name: "nickname", Type: field.TypeString, Nullable: true, Size: 64},
{Name: "email", Type: field.TypeString, Nullable: true},
{Name: "ip", Type: field.TypeString, Nullable: true},
{Name: "addr", Type: field.TypeString, Nullable: true, Size: 500},
+74 -1
View File
@@ -512,6 +512,7 @@ type UserMutation struct {
updated_at *time.Time
username *string
password *string
nickname *string
email *string
ip *string
addr *string
@@ -766,6 +767,55 @@ func (m *UserMutation) ResetPassword() {
m.password = nil
}
// SetNickname sets the "nickname" field.
func (m *UserMutation) SetNickname(s string) {
m.nickname = &s
}
// Nickname returns the value of the "nickname" field in the mutation.
func (m *UserMutation) Nickname() (r string, exists bool) {
v := m.nickname
if v == nil {
return
}
return *v, true
}
// OldNickname returns the old "nickname" field's value of the User entity.
// If the User object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *UserMutation) OldNickname(ctx context.Context) (v string, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldNickname is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldNickname requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldNickname: %w", err)
}
return oldValue.Nickname, nil
}
// ClearNickname clears the value of the "nickname" field.
func (m *UserMutation) ClearNickname() {
m.nickname = nil
m.clearedFields[user.FieldNickname] = struct{}{}
}
// NicknameCleared returns if the "nickname" field was cleared in this mutation.
func (m *UserMutation) NicknameCleared() bool {
_, ok := m.clearedFields[user.FieldNickname]
return ok
}
// ResetNickname resets all changes to the "nickname" field.
func (m *UserMutation) ResetNickname() {
m.nickname = nil
delete(m.clearedFields, user.FieldNickname)
}
// SetEmail sets the "email" field.
func (m *UserMutation) SetEmail(s string) {
m.email = &s
@@ -1001,7 +1051,7 @@ func (m *UserMutation) Type() string {
// order to get all numeric fields that were incremented/decremented, call
// AddedFields().
func (m *UserMutation) Fields() []string {
fields := make([]string, 0, 7)
fields := make([]string, 0, 8)
if m.created_at != nil {
fields = append(fields, user.FieldCreatedAt)
}
@@ -1014,6 +1064,9 @@ func (m *UserMutation) Fields() []string {
if m.password != nil {
fields = append(fields, user.FieldPassword)
}
if m.nickname != nil {
fields = append(fields, user.FieldNickname)
}
if m.email != nil {
fields = append(fields, user.FieldEmail)
}
@@ -1039,6 +1092,8 @@ func (m *UserMutation) Field(name string) (ent.Value, bool) {
return m.Username()
case user.FieldPassword:
return m.Password()
case user.FieldNickname:
return m.Nickname()
case user.FieldEmail:
return m.Email()
case user.FieldIP:
@@ -1062,6 +1117,8 @@ func (m *UserMutation) OldField(ctx context.Context, name string) (ent.Value, er
return m.OldUsername(ctx)
case user.FieldPassword:
return m.OldPassword(ctx)
case user.FieldNickname:
return m.OldNickname(ctx)
case user.FieldEmail:
return m.OldEmail(ctx)
case user.FieldIP:
@@ -1105,6 +1162,13 @@ func (m *UserMutation) SetField(name string, value ent.Value) error {
}
m.SetPassword(v)
return nil
case user.FieldNickname:
v, ok := value.(string)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetNickname(v)
return nil
case user.FieldEmail:
v, ok := value.(string)
if !ok {
@@ -1156,6 +1220,9 @@ func (m *UserMutation) AddField(name string, value ent.Value) error {
// mutation.
func (m *UserMutation) ClearedFields() []string {
var fields []string
if m.FieldCleared(user.FieldNickname) {
fields = append(fields, user.FieldNickname)
}
if m.FieldCleared(user.FieldEmail) {
fields = append(fields, user.FieldEmail)
}
@@ -1179,6 +1246,9 @@ func (m *UserMutation) FieldCleared(name string) bool {
// error if the field is not defined in the schema.
func (m *UserMutation) ClearField(name string) error {
switch name {
case user.FieldNickname:
m.ClearNickname()
return nil
case user.FieldEmail:
m.ClearEmail()
return nil
@@ -1208,6 +1278,9 @@ func (m *UserMutation) ResetField(name string) error {
case user.FieldPassword:
m.ResetPassword()
return nil
case user.FieldNickname:
m.ResetNickname()
return nil
case user.FieldEmail:
m.ResetEmail()
return nil
+7 -3
View File
@@ -42,16 +42,20 @@ func init() {
userDescUsername := userFields[0].Descriptor()
// user.UsernameValidator is a validator for the "username" field. It is called by the builders before save.
user.UsernameValidator = userDescUsername.Validators[0].(func(string) error)
// userDescNickname is the schema descriptor for nickname field.
userDescNickname := userFields[2].Descriptor()
// user.NicknameValidator is a validator for the "nickname" field. It is called by the builders before save.
user.NicknameValidator = userDescNickname.Validators[0].(func(string) error)
// userDescEmail is the schema descriptor for email field.
userDescEmail := userFields[2].Descriptor()
userDescEmail := userFields[3].Descriptor()
// user.EmailValidator is a validator for the "email" field. It is called by the builders before save.
user.EmailValidator = userDescEmail.Validators[0].(func(string) error)
// userDescIP is the schema descriptor for ip field.
userDescIP := userFields[3].Descriptor()
userDescIP := userFields[4].Descriptor()
// user.IPValidator is a validator for the "ip" field. It is called by the builders before save.
user.IPValidator = userDescIP.Validators[0].(func(string) error)
// userDescAddr is the schema descriptor for addr field.
userDescAddr := userFields[4].Descriptor()
userDescAddr := userFields[5].Descriptor()
// user.AddrValidator is a validator for the "addr" field. It is called by the builders before save.
user.AddrValidator = userDescAddr.Validators[0].(func(string) error)
}
+3
View File
@@ -27,6 +27,9 @@ func (User) Fields() []ent.Field {
NotEmpty(),
field.String("password").
Sensitive(),
field.String("nickname").
Optional().
MaxLen(64),
field.String("email").
Optional().
Match(regexp.MustCompile(`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`)), // 邮箱格式正则校验
+12 -1
View File
@@ -25,6 +25,8 @@ type User struct {
Username string `json:"username,omitempty"`
// Password holds the value of the "password" field.
Password string `json:"-"`
// Nickname holds the value of the "nickname" field.
Nickname string `json:"nickname,omitempty"`
// Email holds the value of the "email" field.
Email string `json:"email,omitempty"`
// IP holds the value of the "ip" field.
@@ -62,7 +64,7 @@ func (*User) scanValues(columns []string) ([]any, error) {
switch columns[i] {
case user.FieldID:
values[i] = new(sql.NullInt64)
case user.FieldUsername, user.FieldPassword, user.FieldEmail, user.FieldIP, user.FieldAddr:
case user.FieldUsername, user.FieldPassword, user.FieldNickname, user.FieldEmail, user.FieldIP, user.FieldAddr:
values[i] = new(sql.NullString)
case user.FieldCreatedAt, user.FieldUpdatedAt:
values[i] = new(sql.NullTime)
@@ -111,6 +113,12 @@ func (_m *User) assignValues(columns []string, values []any) error {
} else if value.Valid {
_m.Password = value.String
}
case user.FieldNickname:
if value, ok := values[i].(*sql.NullString); !ok {
return fmt.Errorf("unexpected type %T for field nickname", values[i])
} else if value.Valid {
_m.Nickname = value.String
}
case user.FieldEmail:
if value, ok := values[i].(*sql.NullString); !ok {
return fmt.Errorf("unexpected type %T for field email", values[i])
@@ -181,6 +189,9 @@ func (_m *User) String() string {
builder.WriteString(", ")
builder.WriteString("password=<sensitive>")
builder.WriteString(", ")
builder.WriteString("nickname=")
builder.WriteString(_m.Nickname)
builder.WriteString(", ")
builder.WriteString("email=")
builder.WriteString(_m.Email)
builder.WriteString(", ")
+10
View File
@@ -22,6 +22,8 @@ const (
FieldUsername = "username"
// FieldPassword holds the string denoting the password field in the database.
FieldPassword = "password"
// FieldNickname holds the string denoting the nickname field in the database.
FieldNickname = "nickname"
// FieldEmail holds the string denoting the email field in the database.
FieldEmail = "email"
// FieldIP holds the string denoting the ip field in the database.
@@ -46,6 +48,7 @@ var Columns = []string{
FieldUpdatedAt,
FieldUsername,
FieldPassword,
FieldNickname,
FieldEmail,
FieldIP,
FieldAddr,
@@ -76,6 +79,8 @@ var (
UpdateDefaultUpdatedAt func() time.Time
// UsernameValidator is a validator for the "username" field. It is called by the builders before save.
UsernameValidator func(string) error
// NicknameValidator is a validator for the "nickname" field. It is called by the builders before save.
NicknameValidator func(string) error
// EmailValidator is a validator for the "email" field. It is called by the builders before save.
EmailValidator func(string) error
// IPValidator is a validator for the "ip" field. It is called by the builders before save.
@@ -112,6 +117,11 @@ func ByPassword(opts ...sql.OrderTermOption) OrderOption {
return sql.OrderByField(FieldPassword, opts...).ToFunc()
}
// ByNickname orders the results by the nickname field.
func ByNickname(opts ...sql.OrderTermOption) OrderOption {
return sql.OrderByField(FieldNickname, opts...).ToFunc()
}
// ByEmail orders the results by the email field.
func ByEmail(opts ...sql.OrderTermOption) OrderOption {
return sql.OrderByField(FieldEmail, opts...).ToFunc()
+80
View File
@@ -75,6 +75,11 @@ func Password(v string) predicate.User {
return predicate.User(sql.FieldEQ(FieldPassword, v))
}
// Nickname applies equality check predicate on the "nickname" field. It's identical to NicknameEQ.
func Nickname(v string) predicate.User {
return predicate.User(sql.FieldEQ(FieldNickname, v))
}
// Email applies equality check predicate on the "email" field. It's identical to EmailEQ.
func Email(v string) predicate.User {
return predicate.User(sql.FieldEQ(FieldEmail, v))
@@ -300,6 +305,81 @@ func PasswordContainsFold(v string) predicate.User {
return predicate.User(sql.FieldContainsFold(FieldPassword, v))
}
// NicknameEQ applies the EQ predicate on the "nickname" field.
func NicknameEQ(v string) predicate.User {
return predicate.User(sql.FieldEQ(FieldNickname, v))
}
// NicknameNEQ applies the NEQ predicate on the "nickname" field.
func NicknameNEQ(v string) predicate.User {
return predicate.User(sql.FieldNEQ(FieldNickname, v))
}
// NicknameIn applies the In predicate on the "nickname" field.
func NicknameIn(vs ...string) predicate.User {
return predicate.User(sql.FieldIn(FieldNickname, vs...))
}
// NicknameNotIn applies the NotIn predicate on the "nickname" field.
func NicknameNotIn(vs ...string) predicate.User {
return predicate.User(sql.FieldNotIn(FieldNickname, vs...))
}
// NicknameGT applies the GT predicate on the "nickname" field.
func NicknameGT(v string) predicate.User {
return predicate.User(sql.FieldGT(FieldNickname, v))
}
// NicknameGTE applies the GTE predicate on the "nickname" field.
func NicknameGTE(v string) predicate.User {
return predicate.User(sql.FieldGTE(FieldNickname, v))
}
// NicknameLT applies the LT predicate on the "nickname" field.
func NicknameLT(v string) predicate.User {
return predicate.User(sql.FieldLT(FieldNickname, v))
}
// NicknameLTE applies the LTE predicate on the "nickname" field.
func NicknameLTE(v string) predicate.User {
return predicate.User(sql.FieldLTE(FieldNickname, v))
}
// NicknameContains applies the Contains predicate on the "nickname" field.
func NicknameContains(v string) predicate.User {
return predicate.User(sql.FieldContains(FieldNickname, v))
}
// NicknameHasPrefix applies the HasPrefix predicate on the "nickname" field.
func NicknameHasPrefix(v string) predicate.User {
return predicate.User(sql.FieldHasPrefix(FieldNickname, v))
}
// NicknameHasSuffix applies the HasSuffix predicate on the "nickname" field.
func NicknameHasSuffix(v string) predicate.User {
return predicate.User(sql.FieldHasSuffix(FieldNickname, v))
}
// NicknameIsNil applies the IsNil predicate on the "nickname" field.
func NicknameIsNil() predicate.User {
return predicate.User(sql.FieldIsNull(FieldNickname))
}
// NicknameNotNil applies the NotNil predicate on the "nickname" field.
func NicknameNotNil() predicate.User {
return predicate.User(sql.FieldNotNull(FieldNickname))
}
// NicknameEqualFold applies the EqualFold predicate on the "nickname" field.
func NicknameEqualFold(v string) predicate.User {
return predicate.User(sql.FieldEqualFold(FieldNickname, v))
}
// NicknameContainsFold applies the ContainsFold predicate on the "nickname" field.
func NicknameContainsFold(v string) predicate.User {
return predicate.User(sql.FieldContainsFold(FieldNickname, v))
}
// EmailEQ applies the EQ predicate on the "email" field.
func EmailEQ(v string) predicate.User {
return predicate.User(sql.FieldEQ(FieldEmail, v))
+23
View File
@@ -61,6 +61,20 @@ func (_c *UserCreate) SetPassword(v string) *UserCreate {
return _c
}
// SetNickname sets the "nickname" field.
func (_c *UserCreate) SetNickname(v string) *UserCreate {
_c.mutation.SetNickname(v)
return _c
}
// SetNillableNickname sets the "nickname" field if the given value is not nil.
func (_c *UserCreate) SetNillableNickname(v *string) *UserCreate {
if v != nil {
_c.SetNickname(*v)
}
return _c
}
// SetEmail sets the "email" field.
func (_c *UserCreate) SetEmail(v string) *UserCreate {
_c.mutation.SetEmail(v)
@@ -182,6 +196,11 @@ func (_c *UserCreate) check() error {
if _, ok := _c.mutation.Password(); !ok {
return &ValidationError{Name: "password", err: errors.New(`ent: missing required field "User.password"`)}
}
if v, ok := _c.mutation.Nickname(); ok {
if err := user.NicknameValidator(v); err != nil {
return &ValidationError{Name: "nickname", err: fmt.Errorf(`ent: validator failed for field "User.nickname": %w`, err)}
}
}
if v, ok := _c.mutation.Email(); ok {
if err := user.EmailValidator(v); err != nil {
return &ValidationError{Name: "email", err: fmt.Errorf(`ent: validator failed for field "User.email": %w`, err)}
@@ -239,6 +258,10 @@ func (_c *UserCreate) createSpec() (*User, *sqlgraph.CreateSpec) {
_spec.SetField(user.FieldPassword, field.TypeString, value)
_node.Password = value
}
if value, ok := _c.mutation.Nickname(); ok {
_spec.SetField(user.FieldNickname, field.TypeString, value)
_node.Nickname = value
}
if value, ok := _c.mutation.Email(); ok {
_spec.SetField(user.FieldEmail, field.TypeString, value)
_node.Email = value
+62
View File
@@ -63,6 +63,26 @@ func (_u *UserUpdate) SetNillablePassword(v *string) *UserUpdate {
return _u
}
// SetNickname sets the "nickname" field.
func (_u *UserUpdate) SetNickname(v string) *UserUpdate {
_u.mutation.SetNickname(v)
return _u
}
// SetNillableNickname sets the "nickname" field if the given value is not nil.
func (_u *UserUpdate) SetNillableNickname(v *string) *UserUpdate {
if v != nil {
_u.SetNickname(*v)
}
return _u
}
// ClearNickname clears the value of the "nickname" field.
func (_u *UserUpdate) ClearNickname() *UserUpdate {
_u.mutation.ClearNickname()
return _u
}
// SetEmail sets the "email" field.
func (_u *UserUpdate) SetEmail(v string) *UserUpdate {
_u.mutation.SetEmail(v)
@@ -207,6 +227,11 @@ func (_u *UserUpdate) check() error {
return &ValidationError{Name: "username", err: fmt.Errorf(`ent: validator failed for field "User.username": %w`, err)}
}
}
if v, ok := _u.mutation.Nickname(); ok {
if err := user.NicknameValidator(v); err != nil {
return &ValidationError{Name: "nickname", err: fmt.Errorf(`ent: validator failed for field "User.nickname": %w`, err)}
}
}
if v, ok := _u.mutation.Email(); ok {
if err := user.EmailValidator(v); err != nil {
return &ValidationError{Name: "email", err: fmt.Errorf(`ent: validator failed for field "User.email": %w`, err)}
@@ -246,6 +271,12 @@ func (_u *UserUpdate) sqlSave(ctx context.Context) (_node int, err error) {
if value, ok := _u.mutation.Password(); ok {
_spec.SetField(user.FieldPassword, field.TypeString, value)
}
if value, ok := _u.mutation.Nickname(); ok {
_spec.SetField(user.FieldNickname, field.TypeString, value)
}
if _u.mutation.NicknameCleared() {
_spec.ClearField(user.FieldNickname, field.TypeString)
}
if value, ok := _u.mutation.Email(); ok {
_spec.SetField(user.FieldEmail, field.TypeString, value)
}
@@ -363,6 +394,26 @@ func (_u *UserUpdateOne) SetNillablePassword(v *string) *UserUpdateOne {
return _u
}
// SetNickname sets the "nickname" field.
func (_u *UserUpdateOne) SetNickname(v string) *UserUpdateOne {
_u.mutation.SetNickname(v)
return _u
}
// SetNillableNickname sets the "nickname" field if the given value is not nil.
func (_u *UserUpdateOne) SetNillableNickname(v *string) *UserUpdateOne {
if v != nil {
_u.SetNickname(*v)
}
return _u
}
// ClearNickname clears the value of the "nickname" field.
func (_u *UserUpdateOne) ClearNickname() *UserUpdateOne {
_u.mutation.ClearNickname()
return _u
}
// SetEmail sets the "email" field.
func (_u *UserUpdateOne) SetEmail(v string) *UserUpdateOne {
_u.mutation.SetEmail(v)
@@ -520,6 +571,11 @@ func (_u *UserUpdateOne) check() error {
return &ValidationError{Name: "username", err: fmt.Errorf(`ent: validator failed for field "User.username": %w`, err)}
}
}
if v, ok := _u.mutation.Nickname(); ok {
if err := user.NicknameValidator(v); err != nil {
return &ValidationError{Name: "nickname", err: fmt.Errorf(`ent: validator failed for field "User.nickname": %w`, err)}
}
}
if v, ok := _u.mutation.Email(); ok {
if err := user.EmailValidator(v); err != nil {
return &ValidationError{Name: "email", err: fmt.Errorf(`ent: validator failed for field "User.email": %w`, err)}
@@ -576,6 +632,12 @@ func (_u *UserUpdateOne) sqlSave(ctx context.Context) (_node *User, err error) {
if value, ok := _u.mutation.Password(); ok {
_spec.SetField(user.FieldPassword, field.TypeString, value)
}
if value, ok := _u.mutation.Nickname(); ok {
_spec.SetField(user.FieldNickname, field.TypeString, value)
}
if _u.mutation.NicknameCleared() {
_spec.ClearField(user.FieldNickname, field.TypeString)
}
if value, ok := _u.mutation.Email(); ok {
_spec.SetField(user.FieldEmail, field.TypeString, value)
}