prompt 1,2,3
This commit is contained in:
57
internal/db/db.go
Normal file
57
internal/db/db.go
Normal file
@@ -0,0 +1,57 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"trustcontact/internal/config"
|
||||
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
gormlogger "gorm.io/gorm/logger"
|
||||
)
|
||||
|
||||
func Open(cfg *config.Config) (*gorm.DB, error) {
|
||||
if cfg == nil {
|
||||
return nil, fmt.Errorf("config is nil")
|
||||
}
|
||||
|
||||
gormCfg := &gorm.Config{Logger: newLogger(cfg.Env)}
|
||||
|
||||
switch cfg.DBDriver {
|
||||
case config.DBDriverSQLite:
|
||||
if err := ensureSQLiteDir(cfg.SQLitePath); err != nil {
|
||||
return nil, fmt.Errorf("prepare sqlite dir: %w", err)
|
||||
}
|
||||
return gorm.Open(sqlite.Open(cfg.SQLitePath), gormCfg)
|
||||
case config.DBDriverPostgres:
|
||||
return gorm.Open(postgres.Open(cfg.PostgresDSN), gormCfg)
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported db driver: %s", cfg.DBDriver)
|
||||
}
|
||||
}
|
||||
|
||||
func newLogger(env string) gormlogger.Interface {
|
||||
level := gormlogger.Warn
|
||||
if env == config.EnvDevelop {
|
||||
level = gormlogger.Info
|
||||
}
|
||||
|
||||
return gormlogger.Default.LogMode(level)
|
||||
}
|
||||
|
||||
func ensureSQLiteDir(sqlitePath string) error {
|
||||
dir := filepath.Dir(sqlitePath)
|
||||
if dir == "." || dir == "" {
|
||||
return nil
|
||||
}
|
||||
|
||||
return os.MkdirAll(dir, 0o755)
|
||||
}
|
||||
|
||||
func nowUTC() time.Time {
|
||||
return time.Now().UTC()
|
||||
}
|
||||
Reference in New Issue
Block a user