main.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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() {
  32. databaseUrl := fmt.Sprintf("%s?sslmode=disable", config.Config.DatabaseUrl)
  33. cwd, err := os.Getwd()
  34. if err != nil {
  35. log.Fatal("Error getting working dir: ", err)
  36. }
  37. directoryUrl := fmt.Sprintf("file://%s", filepath.Join(cwd, "migrations"))
  38. m, err := migrate.New(directoryUrl, databaseUrl)
  39. if err != nil {
  40. log.Fatal("Error setting up: ", err)
  41. }
  42. m.Up()
  43. }