mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 05:21:57 +00:00
59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package database
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"time"
|
|
|
|
"gitlab.com/mbugroup/lti-api.git/internal/config"
|
|
"gitlab.com/mbugroup/lti-api.git/internal/utils"
|
|
|
|
"gorm.io/driver/postgres"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/logger"
|
|
)
|
|
|
|
func Connect(dbHost, dbName string) *gorm.DB {
|
|
parts := []string{
|
|
fmt.Sprintf("host=%s", dbHost),
|
|
fmt.Sprintf("user=%s", config.DBUser),
|
|
fmt.Sprintf("password=%s", config.DBPassword),
|
|
fmt.Sprintf("dbname=%s", dbName),
|
|
fmt.Sprintf("port=%d", config.DBPort),
|
|
fmt.Sprintf("sslmode=%s", config.DBSSLMode),
|
|
"TimeZone=Asia/Shanghai",
|
|
}
|
|
if config.DBSSLRootCert != "" {
|
|
parts = append(parts, fmt.Sprintf("sslrootcert=%s", config.DBSSLRootCert))
|
|
}
|
|
if config.DBSSLCert != "" {
|
|
parts = append(parts, fmt.Sprintf("sslcert=%s", config.DBSSLCert))
|
|
}
|
|
if config.DBSSLKey != "" {
|
|
parts = append(parts, fmt.Sprintf("sslkey=%s", config.DBSSLKey))
|
|
}
|
|
dsn := strings.Join(parts, " ")
|
|
|
|
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
|
|
Logger: logger.Default.LogMode(logger.Info),
|
|
SkipDefaultTransaction: true,
|
|
PrepareStmt: false,
|
|
TranslateError: true,
|
|
})
|
|
if err != nil {
|
|
utils.Log.Errorf("Failed to connect to database: %+v", err)
|
|
}
|
|
|
|
sqlDB, errDB := db.DB()
|
|
if errDB != nil {
|
|
utils.Log.Errorf("Failed to connect to database: %+v", errDB)
|
|
}
|
|
|
|
// Config connection pooling
|
|
sqlDB.SetMaxIdleConns(10)
|
|
sqlDB.SetMaxOpenConns(100)
|
|
sqlDB.SetConnMaxLifetime(60 * time.Minute)
|
|
|
|
return db
|
|
}
|