diff options
| author | MHSanaei <mc.sanaei@gmail.com> | 2023-02-09 22:18:06 +0300 |
|---|---|---|
| committer | MHSanaei <mc.sanaei@gmail.com> | 2023-02-09 22:18:06 +0300 |
| commit | b73e4173a3c1e69e02ad6b4e3b43e425e57a5be9 (patch) | |
| tree | d95d2f5e903d97082e11eb9f9023c165b1bde388 /database/db.go | |
3x-ui
Diffstat (limited to 'database/db.go')
| -rw-r--r-- | database/db.go | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/database/db.go b/database/db.go new file mode 100644 index 00000000..92fca27a --- /dev/null +++ b/database/db.go @@ -0,0 +1,104 @@ +package database + +import ( + "gorm.io/driver/sqlite" + "gorm.io/gorm" + "gorm.io/gorm/logger" + "io/fs" + "os" + "path" + "x-ui/config" + "x-ui/xray" + "x-ui/database/model" +) + +var db *gorm.DB + +func initUser() error { + err := db.AutoMigrate(&model.User{}) + if err != nil { + return err + } + var count int64 + err = db.Model(&model.User{}).Count(&count).Error + if err != nil { + return err + } + if count == 0 { + user := &model.User{ + Username: "admin", + Password: "admin", + } + return db.Create(user).Error + } + return nil +} + +func initInbound() error { + return db.AutoMigrate(&model.Inbound{}) +} + +func initSetting() error { + return db.AutoMigrate(&model.Setting{}) +} +func initInboundClientIps() error { + return db.AutoMigrate(&model.InboundClientIps{}) +} +func initClientTraffic() error { + return db.AutoMigrate(&xray.ClientTraffic{}) +} + +func InitDB(dbPath string) error { + dir := path.Dir(dbPath) + err := os.MkdirAll(dir, fs.ModeDir) + if err != nil { + return err + } + + var gormLogger logger.Interface + + if config.IsDebug() { + gormLogger = logger.Default + } else { + gormLogger = logger.Discard + } + + c := &gorm.Config{ + Logger: gormLogger, + } + db, err = gorm.Open(sqlite.Open(dbPath), c) + if err != nil { + return err + } + + err = initUser() + if err != nil { + return err + } + err = initInbound() + if err != nil { + return err + } + err = initSetting() + if err != nil { + return err + } + err = initInboundClientIps() + if err != nil { + return err + } + err = initClientTraffic() + if err != nil { + return err + } + + return nil +} + +func GetDB() *gorm.DB { + return db +} + +func IsNotFound(err error) bool { + return err == gorm.ErrRecordNotFound +} |
