mirror of
				https://github.com/linux-do/new-api.git
				synced 2025-11-04 13:23:42 +08:00 
			
		
		
		
	用户注销后禁止再次注册
This commit is contained in:
		@@ -11,26 +11,43 @@ import (
 | 
			
		||||
// User if you add sensitive fields, don't forget to clean them in setupLogin function.
 | 
			
		||||
// Otherwise, the sensitive information will be saved on local storage in plain text!
 | 
			
		||||
type User struct {
 | 
			
		||||
	Id               int    `json:"id"`
 | 
			
		||||
	Username         string `json:"username" gorm:"unique;index" validate:"max=12"`
 | 
			
		||||
	Password         string `json:"password" gorm:"not null;" validate:"min=8,max=20"`
 | 
			
		||||
	DisplayName      string `json:"display_name" gorm:"index" validate:"max=20"`
 | 
			
		||||
	Role             int    `json:"role" gorm:"type:int;default:1"`   // admin, common
 | 
			
		||||
	Status           int    `json:"status" gorm:"type:int;default:1"` // enabled, disabled
 | 
			
		||||
	Email            string `json:"email" gorm:"index" validate:"max=50"`
 | 
			
		||||
	GitHubId         string `json:"github_id" gorm:"column:github_id;index"`
 | 
			
		||||
	WeChatId         string `json:"wechat_id" gorm:"column:wechat_id;index"`
 | 
			
		||||
	VerificationCode string `json:"verification_code" gorm:"-:all"`                                    // this field is only for Email verification, don't save it to database!
 | 
			
		||||
	AccessToken      string `json:"access_token" gorm:"type:char(32);column:access_token;uniqueIndex"` // this token is for system management
 | 
			
		||||
	Quota            int    `json:"quota" gorm:"type:int;default:0"`
 | 
			
		||||
	UsedQuota        int    `json:"used_quota" gorm:"type:int;default:0;column:used_quota"` // used quota
 | 
			
		||||
	RequestCount     int    `json:"request_count" gorm:"type:int;default:0;"`               // request number
 | 
			
		||||
	Group            string `json:"group" gorm:"type:varchar(32);default:'default'"`
 | 
			
		||||
	AffCode          string `json:"aff_code" gorm:"type:varchar(32);column:aff_code;uniqueIndex"`
 | 
			
		||||
	AffCount         int    `json:"aff_count" gorm:"type:int;default:0;column:aff_count"`
 | 
			
		||||
	AffQuota         int    `json:"aff_quota" gorm:"type:int;default:0;column:aff_quota"`           // 邀请剩余额度
 | 
			
		||||
	AffHistoryQuota  int    `json:"aff_history_quota" gorm:"type:int;default:0;column:aff_history"` // 邀请历史额度
 | 
			
		||||
	InviterId        int    `json:"inviter_id" gorm:"type:int;column:inviter_id;index"`
 | 
			
		||||
	Id               int            `json:"id"`
 | 
			
		||||
	Username         string         `json:"username" gorm:"unique;index" validate:"max=12"`
 | 
			
		||||
	Password         string         `json:"password" gorm:"not null;" validate:"min=8,max=20"`
 | 
			
		||||
	DisplayName      string         `json:"display_name" gorm:"index" validate:"max=20"`
 | 
			
		||||
	Role             int            `json:"role" gorm:"type:int;default:1"`   // admin, common
 | 
			
		||||
	Status           int            `json:"status" gorm:"type:int;default:1"` // enabled, disabled
 | 
			
		||||
	Email            string         `json:"email" gorm:"index" validate:"max=50"`
 | 
			
		||||
	GitHubId         string         `json:"github_id" gorm:"column:github_id;index"`
 | 
			
		||||
	WeChatId         string         `json:"wechat_id" gorm:"column:wechat_id;index"`
 | 
			
		||||
	VerificationCode string         `json:"verification_code" gorm:"-:all"`                                    // this field is only for Email verification, don't save it to database!
 | 
			
		||||
	AccessToken      string         `json:"access_token" gorm:"type:char(32);column:access_token;uniqueIndex"` // this token is for system management
 | 
			
		||||
	Quota            int            `json:"quota" gorm:"type:int;default:0"`
 | 
			
		||||
	UsedQuota        int            `json:"used_quota" gorm:"type:int;default:0;column:used_quota"` // used quota
 | 
			
		||||
	RequestCount     int            `json:"request_count" gorm:"type:int;default:0;"`               // request number
 | 
			
		||||
	Group            string         `json:"group" gorm:"type:varchar(32);default:'default'"`
 | 
			
		||||
	AffCode          string         `json:"aff_code" gorm:"type:varchar(32);column:aff_code;uniqueIndex"`
 | 
			
		||||
	AffCount         int            `json:"aff_count" gorm:"type:int;default:0;column:aff_count"`
 | 
			
		||||
	AffQuota         int            `json:"aff_quota" gorm:"type:int;default:0;column:aff_quota"`           // 邀请剩余额度
 | 
			
		||||
	AffHistoryQuota  int            `json:"aff_history_quota" gorm:"type:int;default:0;column:aff_history"` // 邀请历史额度
 | 
			
		||||
	InviterId        int            `json:"inviter_id" gorm:"type:int;column:inviter_id;index"`
 | 
			
		||||
	DeletedAt        gorm.DeletedAt `json:"deleted_at" gorm:"index"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CheckUserExistOrDeleted check if user exist or deleted, if not exist, return false, nil, if deleted or exist, return true, nil
 | 
			
		||||
func CheckUserExistOrDeleted(username string, email string) (bool, error) {
 | 
			
		||||
	var user User
 | 
			
		||||
	err := DB.Unscoped().First(&user, "username = ? or email = ?", username, email).Error
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		if errors.Is(err, gorm.ErrRecordNotFound) {
 | 
			
		||||
			// not exist, return false, nil
 | 
			
		||||
			return false, nil
 | 
			
		||||
		}
 | 
			
		||||
		// other error, return false, err
 | 
			
		||||
		return false, err
 | 
			
		||||
	}
 | 
			
		||||
	// exist, return true, nil
 | 
			
		||||
	return true, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetMaxUserId() int {
 | 
			
		||||
@@ -40,7 +57,7 @@ func GetMaxUserId() int {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetAllUsers(startIdx int, num int) (users []*User, err error) {
 | 
			
		||||
	err = DB.Order("id desc").Limit(num).Offset(startIdx).Omit("password").Find(&users).Error
 | 
			
		||||
	err = DB.Unscoped().Order("id desc").Limit(num).Offset(startIdx).Omit("password").Find(&users).Error
 | 
			
		||||
	return users, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -80,6 +97,14 @@ func DeleteUserById(id int) (err error) {
 | 
			
		||||
	return user.Delete()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func HardDeleteUserById(id int) error {
 | 
			
		||||
	if id == 0 {
 | 
			
		||||
		return errors.New("id 为空!")
 | 
			
		||||
	}
 | 
			
		||||
	err := DB.Unscoped().Delete(&User{}, "id = ?", id).Error
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func inviteUser(inviterId int) (err error) {
 | 
			
		||||
	user, err := GetUserById(inviterId, true)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user