package store import ( "fmt" "os" "path/filepath" "github.com/glebarez/sqlite" "gorm.io/driver/postgres" "gorm.io/gorm" "gorm.io/gorm/logger" ) func Open(driver, dsn string, debug bool) (*gorm.DB, error) { cfg := &gorm.Config{} if debug { cfg.Logger = logger.Default.LogMode(logger.Info) } else { cfg.Logger = logger.Default.LogMode(logger.Warn) } var dialector gorm.Dialector switch driver { case "postgres": dialector = postgres.Open(dsn) default: if err := os.MkdirAll(filepath.Dir(dsn), 0o755); err != nil { return nil, fmt.Errorf("create data dir: %w", err) } dialector = sqlite.Open(dsn) } db, err := gorm.Open(dialector, cfg) if err != nil { return nil, err } sqlDB, err := db.DB() if err != nil { return nil, err } sqlDB.SetMaxOpenConns(20) sqlDB.SetMaxIdleConns(5) return db, nil }