diff --git a/libs/client.go b/libs/client.go deleted file mode 100644 index fa5c9e5..0000000 --- a/libs/client.go +++ /dev/null @@ -1,24 +0,0 @@ -package libs - -import ( - "sync" - - "github.com/libp2p/go-libp2p/core/host" -) - -type Client struct { - This host.Host -} - -var once sync.Once - -var clientObj *Client - -func InitClient() *Client { - once.Do(func() { - - clientObj = &Client{} - }) - - return clientObj -} diff --git a/libs/database.go b/libs/database.go new file mode 100644 index 0000000..450aa0c --- /dev/null +++ b/libs/database.go @@ -0,0 +1,58 @@ +package libs + +import ( + "fmt" + "go-desk-service/config" + "log" + "time" + + "gorm.io/driver/postgres" + "gorm.io/gorm" +) + +var DB *gorm.DB + +func Connect() (*gorm.DB, error) { + appConfig, dberr := config.LoadConfig() + if dberr != nil { + fmt.Println("读取配置失败") + } + + dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%d sslmode=disable TimeZone=Asia/Shanghai", + appConfig.Database.Host, + appConfig.Database.Username, + appConfig.Database.Password, + appConfig.Database.Database, + appConfig.Database.Port) + db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) + if err != nil { + return nil, fmt.Errorf("failed to connect to database: %w", err) + } + + sqlDB, err := db.DB() + if err != nil { + return nil, fmt.Errorf("failed to get sql.DB: %w", err) + } + sqlDB.SetMaxIdleConns(10) + sqlDB.SetMaxOpenConns(100) + sqlDB.SetConnMaxLifetime(time.Hour) + + log.Println("Database connection established") + DB = db + return db, nil +} + +func GetDB() *gorm.DB { + if DB == nil { + panic("database connection is not initialized") + } + return DB +} + +func Close() error { + sqlDB, err := DB.DB() + if err != nil { + return err + } + return sqlDB.Close() +}