Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZahar Izmailov <izmailov9@gmail.com>2025-02-03 15:36:03 +0300
committerGitHub <noreply@github.com>2025-02-03 15:36:03 +0300
commitb922d986d6783ce28d00ca948024dee44a11f29e (patch)
tree646c000eca419a8f0ad4e742762bfcf74f8f9a07
parent8a7cffd63f4ced8caaa20e90aa60228d24bda510 (diff)
Improved database model migration and added indexing (#2655)
-rw-r--r--database/db.go23
-rw-r--r--database/model/model.go4
-rw-r--r--install.sh2
-rw-r--r--x-ui.sh2
-rw-r--r--xray/client_traffic.go4
5 files changed, 25 insertions, 10 deletions
diff --git a/database/db.go b/database/db.go
index 1998ba23..d252cfe0 100644
--- a/database/db.go
+++ b/database/db.go
@@ -26,20 +26,35 @@ const (
)
func initModels() error {
- models := []interface{}{
+ // Order matters: first create tables without dependencies
+ baseModels := []interface{}{
&model.User{},
+ &model.Setting{},
+ }
+
+ // Migrate base models
+ for _, model := range baseModels {
+ if err := db.AutoMigrate(model); err != nil {
+ log.Printf("Error auto migrating base model: %v", err)
+ return err
+ }
+ }
+
+ // Then migrate models with dependencies
+ dependentModels := []interface{}{
&model.Inbound{},
&model.OutboundTraffics{},
- &model.Setting{},
&model.InboundClientIps{},
&xray.ClientTraffic{},
}
- for _, model := range models {
+
+ for _, model := range dependentModels {
if err := db.AutoMigrate(model); err != nil {
- log.Printf("Error auto migrating model: %v", err)
+ log.Printf("Error auto migrating dependent model: %v", err)
return err
}
}
+
return nil
}
diff --git a/database/model/model.go b/database/model/model.go
index e9d1836f..915cae0b 100644
--- a/database/model/model.go
+++ b/database/model/model.go
@@ -29,14 +29,14 @@ type User struct {
type Inbound struct {
Id int `json:"id" form:"id" gorm:"primaryKey;autoIncrement"`
- UserId int `json:"-"`
+ UserId int `json:"-" gorm:"index"`
Up int64 `json:"up" form:"up"`
Down int64 `json:"down" form:"down"`
Total int64 `json:"total" form:"total"`
Remark string `json:"remark" form:"remark"`
Enable bool `json:"enable" form:"enable"`
ExpiryTime int64 `json:"expiryTime" form:"expiryTime"`
- ClientStats []xray.ClientTraffic `gorm:"foreignKey:InboundId;references:Id" json:"clientStats" form:"clientStats"`
+ ClientStats []xray.ClientTraffic `gorm:"foreignKey:InboundId;references:Id;constraint:OnDelete:CASCADE" json:"clientStats"`
// config part
Listen string `json:"listen" form:"listen"`
diff --git a/install.sh b/install.sh
index 150ae86c..f5ce9b96 100644
--- a/install.sh
+++ b/install.sh
@@ -283,4 +283,4 @@ install_x-ui() {
echo -e "${green}Running...${plain}"
install_base
-install_x-ui $1
+install_x-ui $1 \ No newline at end of file
diff --git a/x-ui.sh b/x-ui.sh
index 4f2e57d8..7e8cbfda 100644
--- a/x-ui.sh
+++ b/x-ui.sh
@@ -1912,4 +1912,4 @@ if [[ $# > 0 ]]; then
esac
else
show_menu
-fi
+fi \ No newline at end of file
diff --git a/xray/client_traffic.go b/xray/client_traffic.go
index 0f2389a0..6eb2d270 100644
--- a/xray/client_traffic.go
+++ b/xray/client_traffic.go
@@ -2,9 +2,9 @@ package xray
type ClientTraffic struct {
Id int `json:"id" form:"id" gorm:"primaryKey;autoIncrement"`
- InboundId int `json:"inboundId" form:"inboundId"`
+ InboundId int `json:"inboundId" form:"inboundId" gorm:"index;not null"`
Enable bool `json:"enable" form:"enable"`
- Email string `json:"email" form:"email" gorm:"unique"`
+ Email string `json:"email" form:"email" gorm:"uniqueIndex"`
Up int64 `json:"up" form:"up"`
Down int64 `json:"down" form:"down"`
ExpiryTime int64 `json:"expiryTime" form:"expiryTime"`