package data import ( "errors" "gorm.io/gorm" "strconv" ) type AuthUserDao struct { db *gorm.DB } func NewUserDao(db *gorm.DB) *AuthUserDao { return &AuthUserDao{db: db} } func (dao *AuthUserDao) Create(user *User) error { tx := dao.db.Create(user) return tx.Error } func (dao *AuthUserDao) Updates(user *User) error { return dao.db.Model(user).Updates(user).Error } func (dao *AuthUserDao) FindByAccount(account string) (*User, error) { user := &User{} tx := dao.db.Model(user).Where("account=?", account).Take(user) if tx.Error != nil { // First、Last、Take 方法找不到记录时,ErrRecordNotFound if errors.Is(tx.Error, gorm.ErrRecordNotFound) { return nil, nil } return nil, tx.Error } return user, nil } func (dao *AuthUserDao) FindByUid(uid string) (*User, error) { user := &User{} tx := dao.db.Model(user).Where("uid=?", uid).Take(user) if tx.Error != nil { // First、Last、Take 方法找不到记录时,ErrRecordNotFound if errors.Is(tx.Error, gorm.ErrRecordNotFound) { return nil, nil } return nil, tx.Error } return user, nil } func (dao *AuthUserDao) NextUid() (string, error) { user := &User{} tx := dao.db.Model(user).Where("uid=(select MAX(uid) from `t_user`)").Take(user) if tx.Error != nil { if errors.Is(tx.Error, gorm.ErrRecordNotFound) { return "10000", nil } return "", tx.Error } uid, err := strconv.Atoi(user.Uid) if err != nil { return "", err } return strconv.Itoa(uid + 1), nil }