Newer
Older
EnvoyControlPlane / internal / pkg / storage / database.go
package storage

import (
	"context"
	"fmt"
	"os"
	"path/filepath"
	"strings"

	internallog "envoy-control-plane/internal/log"

	_ "github.com/lib/pq"           // Postgres driver
	_ "github.com/mattn/go-sqlite3" // Import SQLite driver"
	// Import drivers in cmd/main.go or just keep them in the original main.go
)

// determineDriver returns driver name from connection string
func determineDriver(dsn string) string {
	if strings.HasPrefix(dsn, "postgres://") || strings.HasPrefix(dsn, "postgresql://") {
		return "postgres"
	}
	return "sqlite3"
}

// SetupDBConnection determines the DB connection string and driver.
func SetupDBConnection(ctx context.Context, dbConnStrIn string) (connStr, driver string, err error) {
	log := internallog.LogFromContext(ctx)
	connStr = dbConnStrIn

	// Default DB to SQLite file if none provided
	if connStr == "" {
		defaultDBPath := "data/config.db"
		if err := os.MkdirAll(filepath.Dir(defaultDBPath), 0755); err != nil {
			return "", "", fmt.Errorf("failed to create data directory: %w", err)
		}
		connStr = fmt.Sprintf("file:%s?_foreign_keys=on", defaultDBPath)
		driver = "sqlite3"
	} else {
		driver = determineDriver(connStr)
	}

	log.Debugf("Using database driver: %s", driver)
	return connStr, driver, nil
}