main.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package db
  2. import (
  3. "context"
  4. "fmt"
  5. "log"
  6. "os"
  7. "path/filepath"
  8. "github.com/jackc/pgx/v4/pgxpool"
  9. migrate "github.com/golang-migrate/migrate/v4"
  10. _ "github.com/golang-migrate/migrate/v4/database/postgres"
  11. _ "github.com/golang-migrate/migrate/v4/source/file"
  12. "github.com/felamaslen/go-music-player/pkg/config"
  13. )
  14. var pool *pgxpool.Pool
  15. func GetConnection() *pgxpool.Conn {
  16. if pool == nil {
  17. var err error
  18. pool, err = pgxpool.Connect(context.Background(), config.Config.DatabaseUrl)
  19. if err != nil {
  20. fmt.Fprintf(os.Stderr, "Unable to acquire database connection pool: %v\n", err)
  21. os.Exit(1)
  22. }
  23. }
  24. conn, err := pool.Acquire(context.Background())
  25. if err != nil {
  26. fmt.Fprintf(os.Stderr, "Unable to acquire connection from pool: %v\n", err)
  27. os.Exit(1)
  28. }
  29. return conn
  30. }
  31. func MigrateDatabase(migrationDirectory string) {
  32. databaseUrl := fmt.Sprintf("%s?sslmode=disable", config.Config.DatabaseUrl)
  33. directoryUrl := fmt.Sprintf("file://%s", filepath.Join(migrationDirectory, "migrations"))
  34. m, err := migrate.New(directoryUrl, databaseUrl)
  35. if err != nil {
  36. log.Fatal("Error setting up: ", err)
  37. }
  38. m.Up()
  39. }