Files
efir-api-server/internal/repository/sqlite/migrate.go

46 lines
1.1 KiB
Go
Raw Normal View History

package sqlite
import (
"database/sql"
"fmt"
"io/ioutil"
"path/filepath"
"strings"
)
func RunMigrations(db *sql.DB, migrationsPath string) error {
// Находим все .up.sql файлы
files, err := filepath.Glob(filepath.Join(migrationsPath, "*.up.sql"))
if err != nil {
return fmt.Errorf("failed to find migrations: %w", err)
}
for _, file := range files {
fmt.Printf("Applying migration: %s\n", file)
content, err := ioutil.ReadFile(file)
if err != nil {
return fmt.Errorf("failed to read migration file %s: %w", file, err)
}
// Разделяем SQL statements по точке с запятой
statements := strings.Split(string(content), ";")
for _, stmt := range statements {
stmt = strings.TrimSpace(stmt)
if stmt == "" {
continue
}
// Выполняем SQL
if _, err := db.Exec(stmt); err != nil {
// Игнорируем ошибку "table already exists"
if !strings.Contains(err.Error(), "already exists") {
return fmt.Errorf("failed to execute migration %s: %w\nSQL: %s", file, err, stmt)
}
}
}
}
return nil
}