main.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. config "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.GetConfig().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 EndPool() {
  32. if pool == nil {
  33. return
  34. }
  35. pool.Close()
  36. }
  37. func MigrateDatabase() {
  38. cwd, err := os.Getwd()
  39. if err != nil {
  40. log.Fatal("Error getting directory:", err)
  41. return
  42. }
  43. databaseUrl := fmt.Sprintf("%s?sslmode=disable", config.GetConfig().DatabaseUrl)
  44. directoryUrl := fmt.Sprintf("file://%s", filepath.Join(cwd, "migrations"))
  45. m, err := migrate.New(directoryUrl, databaseUrl)
  46. if err != nil {
  47. log.Fatal("Error setting up: ", err)
  48. }
  49. m.Up()
  50. }