39 lines
716 B
Go
39 lines
716 B
Go
package migrate
|
|
|
|
import (
|
|
"context"
|
|
"embed"
|
|
"fmt"
|
|
"sort"
|
|
"strings"
|
|
|
|
"ai-service/internal/store"
|
|
)
|
|
|
|
//go:embed sql/*.up.sql
|
|
var migrationFiles embed.FS
|
|
|
|
func Up(ctx context.Context, db *store.Store) error {
|
|
entries, err := migrationFiles.ReadDir("sql")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
var names []string
|
|
for _, entry := range entries {
|
|
if !entry.IsDir() && strings.HasSuffix(entry.Name(), ".up.sql") {
|
|
names = append(names, entry.Name())
|
|
}
|
|
}
|
|
sort.Strings(names)
|
|
for _, name := range names {
|
|
body, err := migrationFiles.ReadFile("sql/" + name)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if err := db.Exec(ctx, string(body)); err != nil {
|
|
return fmt.Errorf("%s: %w", name, err)
|
|
}
|
|
}
|
|
return nil
|
|
}
|