Skip to content

Commit

Permalink
refactor: db functions merged into respective pg/mysql files
Browse files Browse the repository at this point in the history
  • Loading branch information
Adam Bezecny committed Oct 30, 2023
1 parent 0eefa96 commit b481362
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 85 deletions.
45 changes: 45 additions & 0 deletions test/mariadb.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,18 @@ package test
import (
"context"
"database/sql"
"embed"
"errors"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/golang-migrate/migrate/v4"
"github.com/golang-migrate/migrate/v4/source/iofs"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"github.com/testcontainers/testcontainers-go"
"github.com/testcontainers/testcontainers-go/wait"
"os"
"strings"
"time"
)

Expand Down Expand Up @@ -126,3 +131,43 @@ func (m *MariadbDBContainer) Cleanup() {
log.Error().Err(err).Msg("cannot use database")
}
}

// InitMigrateMariadb is used to apply db migration scripts from embedded file system to given mariadb database
func InitMigrateMariadb(conn string, migrations embed.FS, migrationTable *string) {
source, err := iofs.New(migrations, "migrations")
if err != nil {
log.Fatal().Err(err).Msg("cannot open migrations")
}

var uri string
if migrationTable != nil {
// see https://github.com/golang-migrate/migrate/blob/master/database/mysql/README.md
uri = fmt.Sprintf("mysql://%s?x-migrations-table=%s", conn, *migrationTable)
} else {
uri = fmt.Sprintf("mysql://%s", conn)
}

// mysql://user:test@tcp(localhost:55250)/hrnogomet?parseTime=true
// ->
// mysql://user:test@tcp(localhost:55250)/hrnogomet
// we are using ?parseTime=true in conn string so that mysql parses timestamps during sqlx scans
// but somehow this does not go well with migrate so let's remove it at this particular place
uri = strings.Replace(uri, "?parseTime=true", "", 1)

m, err := migrate.NewWithSourceInstance("iofs", source, uri)
if err != nil {
log.Fatal().Err(err).Msg("cannot open source migrations")
}

defer func(m *migrate.Migrate) {
err, _ := m.Close()
if err != nil {
log.Fatal().Err(err).Msg("cannot close migration")
}
}(m)

err = m.Up()
if err != nil && !errors.Is(err, migrate.ErrNoChange) {
log.Fatal().Err(err).Msg("cannot migrate")
}
}
13 changes: 13 additions & 0 deletions test/mariadb_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package test_test

import (
"context"
"github.com/hrsupersport/hrnogomet-backend-kit/test"
"testing"
)

func TestCreateMariadbContainer(t *testing.T) {
ctx := context.Background()
c := test.SetupMariaDB(ctx, "user", "test", "test", "testdb")
defer c.TeardownMariaDB()
}
85 changes: 0 additions & 85 deletions test/migrate.go

This file was deleted.

38 changes: 38 additions & 0 deletions test/postgres.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@ package test
import (
"context"
"database/sql"
"embed"
"errors"
"fmt"
"github.com/golang-migrate/migrate/v4"
_ "github.com/golang-migrate/migrate/v4/database/postgres"
"github.com/golang-migrate/migrate/v4/source/iofs"
"github.com/rs/zerolog/log"
"github.com/testcontainers/testcontainers-go"
"github.com/testcontainers/testcontainers-go/wait"
Expand Down Expand Up @@ -111,3 +116,36 @@ func (p *PostgresDBContainer) Cleanup() {
log.Error().Err(err).Msg("cannot use database")
}
}

// InitMigratePostgres is used to apply db migration scripts from embedded file system to given postgres database
func InitMigratePostgres(conn string, migrations embed.FS, migrationTable *string) {
source, err := iofs.New(migrations, "migrations")
if err != nil {
log.Fatal().Err(err).Msg("cannot open migrations")
}

var uri string
if migrationTable != nil {
// see https://github.com/golang-migrate/migrate/blob/master/database/postgres/README.md
uri = fmt.Sprintf("%s&x-migrations-table=%s", conn, *migrationTable)
} else {
uri = conn
}

m, err := migrate.NewWithSourceInstance("iofs", source, uri)
if err != nil {
log.Fatal().Err(err).Msg("cannot open source migrations")
}

defer func(m *migrate.Migrate) {
err, _ := m.Close()
if err != nil {
log.Fatal().Err(err).Msg("cannot close migration")
}
}(m)

err = m.Up()
if err != nil && !errors.Is(err, migrate.ErrNoChange) {
log.Fatal().Err(err).Msg("cannot migrate")
}
}

0 comments on commit b481362

Please sign in to comment.