forked from ebhomengo/niki
75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
package command
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"git.gocasts.ir/ebhomengo/niki/repository/migrator"
|
|
"git.gocasts.ir/ebhomengo/niki/repository/mysql"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var up bool
|
|
var down bool
|
|
|
|
var migrateCmd = &cobra.Command{
|
|
Use: "migrate",
|
|
Short: "Run database migrations",
|
|
Long: `This command runs the database migrations for the product service.`,
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
migrate()
|
|
},
|
|
}
|
|
|
|
func migrate() {
|
|
workingDir, err := os.Getwd()
|
|
if err != nil {
|
|
log.Fatalf("Error getting working directory: %v", err)
|
|
}
|
|
|
|
migrationPath := filepath.Join(workingDir, "productapp", "repository", "migrations")
|
|
|
|
// to run migrations when you want to run product service locally
|
|
if path := os.Getenv("MIGRATION_PATH"); path != "" {
|
|
migrationPath = path
|
|
log.Printf("Using override migration path: %s", migrationPath)
|
|
} else {
|
|
log.Printf("Using default migration path: %s", migrationPath)
|
|
}
|
|
|
|
// TODO: Load config from environment or config file
|
|
mgr := migrator.New(migrator.Config{
|
|
MysqlConfig: mysql.Config{
|
|
Username: getEnv("DB_USERNAME", "root"),
|
|
Password: getEnv("DB_PASSWORD", ""),
|
|
Port: 3306,
|
|
Host: getEnv("DB_HOST", "localhost"),
|
|
DBName: getEnv("DB_NAME", "niki_db"),
|
|
},
|
|
MigrationPath: migrationPath,
|
|
MigrationDBName: "product_migrations",
|
|
})
|
|
|
|
if up {
|
|
mgr.Up()
|
|
} else if down {
|
|
mgr.Down()
|
|
} else {
|
|
log.Println("Please specify a migration direction with --up or --down")
|
|
}
|
|
}
|
|
|
|
func getEnv(key, defaultValue string) string {
|
|
if value := os.Getenv(key); value != "" {
|
|
return value
|
|
}
|
|
return defaultValue
|
|
}
|
|
|
|
func init() {
|
|
migrateCmd.Flags().BoolVar(&up, "up", false, "Run migrations up")
|
|
migrateCmd.Flags().BoolVar(&down, "down", false, "Run migrations down")
|
|
RootCmd.AddCommand(migrateCmd)
|
|
}
|