Files
tutor-service/internal/db/migrate.go

40 lines
792 B
Go
Raw Normal View History

package db
import (
"context"
"embed"
"fmt"
"path"
"sort"
"github.com/jackc/pgx/v5/pgxpool"
)
//go:embed migrations/*.sql
var migrationsFS embed.FS
func Migrate(pool *pgxpool.Pool) error {
files, err := migrationsFS.ReadDir("migrations")
if err != nil {
return fmt.Errorf("read migrations dir: %w", err)
}
sort.Slice(files, func(i, j int) bool {
return files[i].Name() < files[j].Name()
})
for _, f := range files {
if path.Ext(f.Name()) != ".sql" {
continue
}
data, err := migrationsFS.ReadFile("migrations/" + f.Name())
if err != nil {
return fmt.Errorf("read migration %s: %w", f.Name(), err)
}
if _, err := pool.Exec(context.Background(), string(data)); err != nil {
return fmt.Errorf("run migration %s: %w", f.Name(), err)
}
}
return nil
}