github.com/Redstoneguy129/cli@v0.0.0-20230211220159-15dca4e91917/internal/migration/new/new.go (about)

     1  package new
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"os"
     7  	"path/filepath"
     8  
     9  	"github.com/spf13/afero"
    10  	"github.com/Redstoneguy129/cli/internal/utils"
    11  )
    12  
    13  func Run(migrationName string, stdin afero.File, fsys afero.Fs) error {
    14  	path := GetMigrationPath(migrationName)
    15  	if err := utils.MkdirIfNotExistFS(fsys, filepath.Dir(path)); err != nil {
    16  		return err
    17  	}
    18  	f, err := fsys.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
    19  	if err != nil {
    20  		return err
    21  	}
    22  	defer f.Close()
    23  
    24  	if fi, err := stdin.Stat(); err != nil {
    25  		return err
    26  	} else if (fi.Mode() & os.ModeCharDevice) == 0 {
    27  		// Ref: https://stackoverflow.com/a/26567513
    28  		if _, err := io.Copy(f, stdin); err != nil {
    29  			return err
    30  		}
    31  	}
    32  
    33  	fmt.Println("Created new migration at " + utils.Bold(path) + ".")
    34  	return nil
    35  }
    36  
    37  func GetMigrationPath(migrationName string) string {
    38  	name := utils.GetCurrentTimestamp() + "_" + migrationName + ".sql"
    39  	return filepath.Join(utils.MigrationsDir, name)
    40  }