github.com/wawandco/ox@v0.13.6-0.20230809142027-913b3d837f2a/plugins/tools/soda/sql/sql.go (about)

     1  package sql
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"path/filepath"
     7  	"time"
     8  
     9  	"github.com/wawandco/ox/internal/log"
    10  )
    11  
    12  // Creator model struct for fizz generation files
    13  type Creator struct{}
    14  
    15  // Name is the name of the migration type
    16  func (s Creator) Name() string {
    17  	return "sql"
    18  }
    19  
    20  // Creates a type or not
    21  func (f Creator) Creates(mtype string) bool {
    22  	return mtype == "sql"
    23  }
    24  
    25  // Create will create 2 .sql empty files for the migration
    26  func (s Creator) Create(dir, name string, args []string) error {
    27  	timestamp := time.Now().UTC().Format("20060102150405")
    28  	fileName := fmt.Sprintf("%s_%s", timestamp, name)
    29  
    30  	if err := s.createFile(dir, fileName, "up"); err != nil {
    31  		return err
    32  	}
    33  
    34  	if err := s.createFile(dir, fileName, "down"); err != nil {
    35  		return err
    36  	}
    37  
    38  	log.Infof("generated: %s/%s.up.sql", dir, fileName)
    39  	log.Infof("generated: %s/%s.down.sql", dir, fileName)
    40  
    41  	return nil
    42  }
    43  
    44  func (s Creator) createFile(dir, name, runFlag string) error {
    45  	fileName := fmt.Sprintf("%s.%s.sql", name, runFlag)
    46  	file, err := os.Create(filepath.Join(dir, fileName))
    47  	if err != nil {
    48  		return fmt.Errorf("error creating file: %w", err)
    49  	}
    50  
    51  	defer file.Close()
    52  
    53  	return err
    54  }