github.com/akkaraju-satvik/dbmap@v0.0.3-0.20240414054547-f818701a74f0/migrations/migrations.go (about)

     1  package migrations
     2  
     3  import (
     4  	"database/sql"
     5  	"os"
     6  
     7  	"github.com/akkaraju-satvik/dbmap/queries"
     8  	"github.com/fatih/color"
     9  )
    10  
    11  func GetUp(migrationDir string) string {
    12  	upMigration, err := os.ReadFile(migrationDir + "/up.sql")
    13  	if err != nil {
    14  		if os.IsNotExist(err) {
    15  			color.Red("up.sql file not found in migration directory")
    16  			os.Exit(1)
    17  		}
    18  		color.Red("Error reading up migration file\n %s", err.Error())
    19  		os.Exit(1)
    20  	}
    21  	return string(upMigration)
    22  }
    23  
    24  func GetDown(migrationDir string) string {
    25  	downMigration, err := os.ReadFile(migrationDir + "/down.sql")
    26  	if err != nil {
    27  		if os.IsNotExist(err) {
    28  			color.Red("down.sql file not found in migration directory")
    29  			os.Exit(1)
    30  		}
    31  		color.Red("Error reading down migration file\n %s", err.Error())
    32  		os.Exit(1)
    33  	}
    34  	return string(downMigration)
    35  }
    36  
    37  func Apply(dbUrl string, migration map[string]string) error {
    38  
    39  	conn, err := sql.Open("postgres", dbUrl)
    40  	if err != nil {
    41  		return err
    42  	}
    43  
    44  	_, err = conn.Exec(migration["migration"])
    45  	if err != nil {
    46  		return err
    47  	}
    48  
    49  	return nil
    50  }
    51  
    52  func GetQuery(migrationsDir, migrationName, migrationType string) (string, error) {
    53  	migrationDir := migrationsDir + "/" + migrationName
    54  	var migration string
    55  	if migrationType == "up" {
    56  		migration = GetUp(migrationDir)
    57  	} else {
    58  		migration = GetDown(migrationDir)
    59  	}
    60  	return migration, nil
    61  }
    62  
    63  func UpdateStatus(migrationId, migrationQuery string) error {
    64  	conn, err := sql.Open("postgres", migrationQuery)
    65  	if err != nil {
    66  		return err
    67  	}
    68  	_, err = conn.Exec(queries.UpdateMigrationStatus, migrationId)
    69  	if err != nil {
    70  		return err
    71  	}
    72  	return nil
    73  }