Merge upstream/master into develop
Sync upstream changes from perfect-panel/server Includes updates from v1.0.1 to v1.2.5: - Currency configuration support - Subscribe improvements (short token, inventory check, etc.) - Node management enhancements - Database migrations - Bug fixes and optimizations
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
"fmt"
|
||||
|
||||
"github.com/perfect-panel/server/pkg/cache"
|
||||
"github.com/perfect-panel/server/pkg/logger"
|
||||
"github.com/redis/go-redis/v9"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
@@ -72,7 +73,7 @@ func (m *defaultUserModel) FindOneByEmail(ctx context.Context, email string) (*U
|
||||
if err := conn.Model(&AuthMethods{}).Where("`auth_type` = 'email' AND `auth_identifier` = ?", email).First(&data).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return conn.Model(&User{}).Where("`id` = ?", data.UserId).Preload("UserDevices").Preload("AuthMethods").First(v).Error
|
||||
return conn.Model(&User{}).Unscoped().Where("`id` = ?", data.UserId).Preload("UserDevices").Preload("AuthMethods").First(v).Error
|
||||
})
|
||||
return &user, err
|
||||
}
|
||||
@@ -91,7 +92,7 @@ func (m *defaultUserModel) FindOne(ctx context.Context, id int64) (*User, error)
|
||||
userIdKey := fmt.Sprintf("%s%v", cacheUserIdPrefix, id)
|
||||
var resp User
|
||||
err := m.QueryCtx(ctx, &resp, userIdKey, func(conn *gorm.DB, v interface{}) error {
|
||||
return conn.Model(&User{}).Where("`id` = ?", id).Preload("UserDevices").Preload("AuthMethods").First(&resp).Error
|
||||
return conn.Model(&User{}).Unscoped().Where("`id` = ?", id).Preload("UserDevices").Preload("AuthMethods").First(&resp).Error
|
||||
})
|
||||
return &resp, err
|
||||
}
|
||||
@@ -119,10 +120,11 @@ func (m *defaultUserModel) Delete(ctx context.Context, id int64, tx ...*gorm.DB)
|
||||
return err
|
||||
}
|
||||
|
||||
// 使用批量相关缓存清理,包含所有相关数据的缓存
|
||||
// Use batch related cache cleaning, including a cache of all relevant data
|
||||
defer func() {
|
||||
if clearErr := m.BatchClearRelatedCache(ctx, data); clearErr != nil {
|
||||
// 记录清理缓存错误,但不阻断删除操作
|
||||
// Record cache cleaning errors, but do not block deletion operations
|
||||
logger.Errorf("failed to clear related cache for user %d: %v", id, clearErr.Error())
|
||||
}
|
||||
}()
|
||||
|
||||
@@ -130,24 +132,11 @@ func (m *defaultUserModel) Delete(ctx context.Context, id int64, tx ...*gorm.DB)
|
||||
if len(tx) > 0 {
|
||||
db = tx[0]
|
||||
}
|
||||
|
||||
// 删除用户相关的所有数据
|
||||
// Soft deletion of user information without any processing of other information (Determine whether to allow login/subscription based on the user's deletion status)
|
||||
if err := db.Model(&User{}).Where("`id` = ?", id).Delete(&User{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := db.Model(&AuthMethods{}).Where("`user_id` = ?", id).Delete(&AuthMethods{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := db.Model(&Subscribe{}).Where("`user_id` = ?", id).Delete(&Subscribe{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := db.Model(&Device{}).Where("`user_id` = ?", id).Delete(&Device{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user