package fw import ( "context" "database/sql" "fmt" "github.com/pressly/goose/v3" ) func MigrateUp(db *sql.DB, dir string, disableLogger bool) Error { if disableLogger { goose.SetLogger(goose.NopLogger()) } err := goose.Up(db, dir) if err != nil { return Err(err) } return nil } func MigrateDown(conn *sql.DB, migrationPath string) Error { err := goose.Down(conn, migrationPath) if err != nil { return Err(err) } return nil } func MigrateCreate(migrationPath, migrationName string) Error { ctx := context.Background() err := goose.RunContext(ctx, "create", nil, migrationPath, migrationName, "sql") if err != nil { return Err(err) } return nil } func DropAppTable(db *sql.DB, dbName string) Error { rows, err := db.Query(` SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE' AND table_catalog = $1 `, dbName) if err != nil { return Err(err) } defer func() { _ = rows.Close() }() var tables []string for rows.Next() { var tableName string if err = rows.Scan(&tableName); err != nil { return Err(err) } tables = append(tables, tableName) } defer func() { _ = rows.Close() }() if err = rows.Err(); err != nil { return Err(err) } for _, table := range tables { _, err = db.Exec(fmt.Sprintf("DROP TABLE IF EXISTS %s", table)) if err != nil { return Err(fmt.Errorf("error drop %s: %v", table, err)) } } return nil }