package db import ( "database/sql" "errors" "git.tijl.dev/tijl/tijl.dev/internal/config" "git.tijl.dev/tijl/tijl.dev/internal/queries" "git.tijl.dev/tijl/tijl.dev/migrations" log "git.tijl.dev/tijl/tijl.dev/modules/logger" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database/pgx/v5" "github.com/golang-migrate/migrate/v4/source/iofs" _ "github.com/jackc/pgx/v5/stdlib" ) var DB *sql.DB var Queries *queries.Queries func Load() { var err error DB, err = sql.Open("pgx", config.Config.DB) if err != nil { log.Fatal().Err(err).Msg("failed to connect to database") } //defer DB.Close() Queries = queries.New(DB) log.Info().Msg("connected to database") /* Migrate */ driver, err := pgx.WithInstance(DB, &pgx.Config{}) if err != nil { log.Fatal().Err(err).Msg("failed to get database driver for migration") } source, err := iofs.New(migrations.Embed, ".") if err != nil { log.Fatal().Err(err).Msg("failed to get migrations source") } m, err := migrate.NewWithInstance("iofs", source, "pgx", driver) if err != nil { log.Fatal().Err(err).Msg("failed to initialize migration") } migerr := m.Up() if (migerr != nil) && (!errors.Is(migerr, migrate.ErrNoChange)) { log.Fatal().Err(migerr).Msg("failed to run migrations") } log.Info().Msg("migrated database") }