wms-be/script/command.go

94 lines
2.2 KiB
Go

package script
import (
"log"
"os"
"strings"
"github.com/Caknoooo/go-gin-clean-starter/database"
"github.com/Caknoooo/go-gin-clean-starter/pkg/constants"
"github.com/samber/do"
"github.com/sirupsen/logrus"
"gorm.io/gorm"
)
func Commands(injector *do.Injector) bool {
db := do.MustInvokeNamed[*gorm.DB](injector, constants.DB)
logger := do.MustInvokeNamed[*logrus.Logger](injector, constants.LOGGER)
var scriptName string
migrate := false
seed := false
run := false
scriptFlag := false
fresh := false
for _, arg := range os.Args[1:] {
if arg == "--migrate" {
migrate = true
}
if arg == "--seed" {
seed = true
}
if arg == "--run" {
run = true
}
if arg == "--fresh" {
fresh = true
}
if strings.HasPrefix(arg, "--script:") {
scriptFlag = true
scriptName = strings.TrimPrefix(arg, "--script:")
}
}
if fresh {
if err := database.MigrateFresh(db); err != nil {
log.Fatalf("error migrate fresh: %v", err)
logger.WithFields(logrus.Fields{
"error": err,
}).Fatal("error migrate fresh") // .Fatal() akan exit dengan status
}
logger.Info("fresh migration completed successfully")
log.Println("fresh migration completed successfully")
} else if migrate {
if err := database.Migrate(db); err != nil {
log.Fatalf("error migrate: %v", err)
logger.WithFields(logrus.Fields{
"error": err,
}).Fatal("error migration") // .Fatal() akan exit dengan status
}
logger.Info("migration completed successfully")
log.Println("migration completed successfully")
}
if seed {
if err := database.Seeder(db); err != nil {
log.Fatalf("error migrate seeder: %v", err)
logger.WithFields(logrus.Fields{
"error": err,
}).Fatal("error migration seeder") // .Fatal() akan exit dengan status
}
logger.Info("seeder completed successfully")
log.Println("seeder completed successfully")
}
if scriptFlag {
if err := Script(scriptName, db); err != nil {
log.Fatalf("error script: %v", err)
logger.WithFields(logrus.Fields{
"error": err,
}).Fatal("error script") // .Fatal() akan exit dengan status
}
logger.Info("script run successfully")
log.Println("script run successfully")
}
if run {
return true
}
return false
}