mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2025-05-10 18:05:48 +02:00
fix: site and stream unique ke y create issue #1017
This commit is contained in:
parent
7c791f3784
commit
fbc800ff22
1 changed files with 23 additions and 21 deletions
|
@ -7,7 +7,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var FixSiteAndStreamPathUnique = &gormigrate.Migration{
|
var FixSiteAndStreamPathUnique = &gormigrate.Migration{
|
||||||
ID: "20250405000003",
|
ID: "202505070000001",
|
||||||
Migrate: func(tx *gorm.DB) error {
|
Migrate: func(tx *gorm.DB) error {
|
||||||
// Check if sites table exists
|
// Check if sites table exists
|
||||||
if tx.Migrator().HasTable(&model.Site{}) {
|
if tx.Migrator().HasTable(&model.Site{}) {
|
||||||
|
@ -19,36 +19,38 @@ var FixSiteAndStreamPathUnique = &gormigrate.Migration{
|
||||||
|
|
||||||
if err := tx.Model(&model.Site{}).
|
if err := tx.Model(&model.Site{}).
|
||||||
Select("path, count(*) as count").
|
Select("path, count(*) as count").
|
||||||
Group("path").
|
Group("path").
|
||||||
Having("count(*) > 1").
|
Having("count(*) > 1").
|
||||||
Find(&siteDuplicates).Error; err != nil {
|
Unscoped().
|
||||||
return err
|
Find(&siteDuplicates).Error; err != nil {
|
||||||
}
|
|
||||||
|
|
||||||
// For each duplicated path, delete all but the one with max id
|
|
||||||
for _, dup := range siteDuplicates {
|
|
||||||
if err := tx.Exec(`DELETE FROM sites WHERE path = ? AND id NOT IN
|
|
||||||
(SELECT max(id) FROM sites WHERE path = ?)`, dup.Path, dup.Path).Error; err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For each duplicated path, delete all but the one with max id
|
||||||
|
for _, dup := range siteDuplicates {
|
||||||
|
if err := tx.Exec(`DELETE FROM sites WHERE path = ? AND id NOT IN
|
||||||
|
(SELECT max(id) FROM sites WHERE path = ?)`, dup.Path, dup.Path).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Check if streams table exists
|
// Check if streams table exists
|
||||||
if tx.Migrator().HasTable(&model.Stream{}) {
|
if tx.Migrator().HasTable(&model.Stream{}) {
|
||||||
// Find duplicated paths in streams table
|
// Find duplicated paths in streams table
|
||||||
var streamDuplicates []struct {
|
var streamDuplicates []struct {
|
||||||
Path string
|
Path string
|
||||||
Count int
|
Count int
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := tx.Model(&model.Stream{}).
|
if err := tx.Model(&model.Stream{}).
|
||||||
Select("path, count(*) as count").
|
Select("path, count(*) as count").
|
||||||
Group("path").
|
Group("path").
|
||||||
Having("count(*) > 1").
|
Having("count(*) > 1").
|
||||||
Find(&streamDuplicates).Error; err != nil {
|
Unscoped().
|
||||||
return err
|
Find(&streamDuplicates).Error; err != nil {
|
||||||
}
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// For each duplicated path, delete all but the one with max id
|
// For each duplicated path, delete all but the one with max id
|
||||||
for _, dup := range streamDuplicates {
|
for _, dup := range streamDuplicates {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue