feat: - 移除后台用户mail唯一索引

This commit is contained in:
npc0-hue
2025-10-24 11:59:26 +08:00
committed by FamousMai
parent 316fa371f2
commit e1a1b1f799
5 changed files with 20 additions and 56 deletions
+6 -7
View File
@@ -1,6 +1,8 @@
package initialize
import (
"fmt"
"log"
"os"
"github.com/flipped-aurora/gin-vue-admin/server/global"
@@ -38,9 +40,6 @@ func Gorm() *gorm.DB {
func RegisterTables() {
db := global.GVA_DB
// 在注册表之前,清理重复的 email 数据
system.CleanDuplicateEmails()
err := db.AutoMigrate(
system.SysApi{},
system.SysIgnoreApi{},
@@ -82,10 +81,10 @@ func RegisterTables() {
os.Exit(0)
}
// 如果是PostgreSQL数据库,创建必要的序列
if global.GVA_CONFIG.System.DbType == "pgsql" {
createPostgreSQLSequences(db)
}
//// 如果是PostgreSQL数据库,创建必要的序列
//if global.GVA_CONFIG.System.DbType == "pgsql" {
// createPostgreSQLSequences(db)
//}
err = bizModel()
+5 -1
View File
@@ -28,7 +28,7 @@ func GormPgSql() *gorm.DB {
sqlDB.SetMaxOpenConns(p.MaxOpenConns)
// 为PostgreSQL创建必要的序列
createPostgreSQLSequences(db)
//createPostgreSQLSequences(db)
return db
}
@@ -49,6 +49,10 @@ func GormPgSqlByConfig(p config.Pgsql) *gorm.DB {
sqlDB, _ := db.DB()
sqlDB.SetMaxIdleConns(p.MaxIdleConns)
sqlDB.SetMaxOpenConns(p.MaxOpenConns)
// 为PostgreSQL创建必要的序列
//createPostgreSQLSequences(db)
return db
}
}
+1 -39
View File
@@ -35,7 +35,7 @@ type SysUser struct {
Authority SysAuthority `json:"authority" gorm:"foreignKey:AuthorityId;references:AuthorityId;comment:用户角色"` // 用户角色
Authorities []SysAuthority `json:"authorities" gorm:"many2many:sys_user_authority;"` // 多用户角色
Phone string `json:"phone" gorm:"comment:用户手机号"` // 用户手机号
Email string `json:"email" gorm:"uniqueIndex;comment:用户邮箱"` // 用户邮箱
Email string `json:"email" gorm:"index;comment:用户邮箱"` // 用户邮箱
Enable int `json:"enable" gorm:"default:1;comment:用户是否被冻结 1正常 2冻结"` //用户是否被冻结 1正常 2冻结
OriginSetting common.JSONMap `json:"originSetting" form:"originSetting" gorm:"type:text;default:null;column:origin_setting;comment:配置;"` //配置
}
@@ -115,41 +115,3 @@ type SysUserGlobalCode struct {
}
// Extend: Stop global code
// CleanDuplicateEmails 清除重复的 email 数据,只保留 id 最大的数据
func CleanDuplicateEmails() {
// 查找所有重复的 email
var err error
var duplicateEmails []string
if err = global.GVA_DB.Model(&SysUser{}).
Select("email").
Group("email").
Having("COUNT(*) > 1").
Pluck("email", &duplicateEmails).Error; err != nil {
return
}
// 对每个重复的 email,删除除了 id 最大的记录之外的所有记录
for _, email := range duplicateEmails {
var users []SysUser
if err = global.GVA_DB.Where("email = ?", email).Order("id DESC").Find(&users).Error; err != nil {
return
}
// 如果找到重复记录,删除除了第一个(id 最大)之外的所有记录
if len(users) > 1 {
var idsToDelete []uint
for i := 1; i < len(users); i++ {
idsToDelete = append(idsToDelete, users[i].ID)
}
if len(idsToDelete) > 0 {
if err = global.GVA_DB.Where("id IN ?", idsToDelete).Delete(&SysUser{}).Error; err != nil {
return
}
}
}
}
return
}