forked from ebhomengo/niki
added migration in cmd layer
This commit is contained in:
parent
12af65bcd4
commit
ef60a6516d
|
|
@ -1 +1,52 @@
|
|||
package command
|
||||
|
||||
import (
|
||||
"git.gocasts.ir/ebhomengo/niki/pkg/database/migrator"
|
||||
"git.gocasts.ir/ebhomengo/niki/pkg/logger"
|
||||
"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 shoppingbasket service.`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
migrate()
|
||||
},
|
||||
}
|
||||
|
||||
func migrate() {
|
||||
var cfg = loadAppConfig()
|
||||
|
||||
logger.Init(cfg.Logger)
|
||||
l := logger.L()
|
||||
|
||||
migrationCfg := migrator.Config{
|
||||
MysqlConfig: cfg.Mysql,
|
||||
MigrationPath: cfg.PathOfMigration,
|
||||
MigrationDBName: "gorp_migrations",
|
||||
}
|
||||
|
||||
if migrateUp || migrateDown {
|
||||
mgr := migrator.New(migrationCfg)
|
||||
if migrateUp {
|
||||
l.Info("Running migrations up...")
|
||||
mgr.Up()
|
||||
l.Info("Migrations up completed.")
|
||||
}
|
||||
if migrateDown {
|
||||
l.Info("Running migrations down...")
|
||||
mgr.Down()
|
||||
l.Info("Migrations down completed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func init() {
|
||||
migrateCmd.Flags().BoolVar(&up, "up", false, "Run migrations up")
|
||||
migrateCmd.Flags().BoolVar(&down, "down", false, "Run migrations down")
|
||||
RootCmd.AddCommand(migrateCmd)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ func loadAppConfig() shoppingbasketapp.Config {
|
|||
if _, err := os.Stat(defaultConfig); err == nil {
|
||||
yamlPath = defaultConfig
|
||||
} else {
|
||||
yamlPath = filepath.Join(projectRoot, "deploy", "shoppingbasket", "development", "config.local.yml")
|
||||
yamlPath = filepath.Join(projectRoot, "deploy", "shoppingbasket", "development", "config.yml")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -45,7 +45,7 @@ func loadAppConfig() shoppingbasketapp.Config {
|
|||
}
|
||||
|
||||
if err := cfgloader.Load(options, &cfg); err != nil {
|
||||
log.Fatalf("Failed to load benefactor config: %v", err)
|
||||
log.Fatalf("Failed to load shoppingbasket config: %v", err)
|
||||
}
|
||||
|
||||
return cfg
|
||||
|
|
|
|||
|
|
@ -5,10 +5,13 @@ import (
|
|||
"fmt"
|
||||
"git.gocasts.ir/ebhomengo/niki/pkg/logger"
|
||||
"git.gocasts.ir/ebhomengo/niki/shoppingbasketapp"
|
||||
"github.com/labstack/gommon/log"
|
||||
"github.com/spf13/cobra"
|
||||
"log"
|
||||
)
|
||||
|
||||
var migrateUp bool
|
||||
var migrateDown bool
|
||||
|
||||
var ServeCmd = &cobra.Command{
|
||||
Use: "serve",
|
||||
Short: "Start shoppingbasket service",
|
||||
|
|
@ -19,13 +22,15 @@ var ServeCmd = &cobra.Command{
|
|||
}
|
||||
|
||||
func serve() {
|
||||
var cfg = loadAppConfig()
|
||||
var cfg shoppingbasketapp.Config = loadAppConfig()
|
||||
|
||||
logger.Init(cfg.Logger)
|
||||
l := logger.L()
|
||||
|
||||
l.Info("Starting shoppingbasket service...")
|
||||
|
||||
migrate()
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
|
|
@ -39,5 +44,8 @@ func serve() {
|
|||
}
|
||||
|
||||
func init() {
|
||||
ServeCmd.Flags().BoolVar(&migrateUp, "migrate-up", false, "Run migrations up before starting the server")
|
||||
ServeCmd.Flags().BoolVar(&migrateDown, "migrate-down", false, "Run migrations down before starting the server")
|
||||
ServeCmd.MarkFlagsMutuallyExclusive("migrate-up", "migrate-down")
|
||||
RootCmd.AddCommand(ServeCmd)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,8 +13,8 @@ mysql:
|
|||
|
||||
repo:
|
||||
cache_kart_key_prefix: "shopping-basket-cart:user_id"
|
||||
cache_ttl: 864000s # 24h
|
||||
mysql_ttl: 604800s # 7d
|
||||
cache_ttl: 2h # 24h
|
||||
mysql_ttl: 168h # 7d
|
||||
|
||||
http_server:
|
||||
host: "localhost"
|
||||
|
|
@ -24,10 +24,12 @@ http_server:
|
|||
allow_origins:
|
||||
- "*"
|
||||
|
||||
path_of_migration: "./domain/shoppingbasket/repository/migration"
|
||||
|
||||
|
||||
logger:
|
||||
level: "debug" # Can be `debug`, `info`, `warn`, `error`
|
||||
file_path: "cmd/shoppingbasketapp/logs/service.log"
|
||||
file_path: "./logs/service.log"
|
||||
use_local_time: true
|
||||
file_max_size_in_mb: 10
|
||||
file_max_age_in_days: 7
|
||||
|
|
@ -47,8 +47,8 @@ func (v Validate) ValidateRemoveFromCart(req RemoveFromCartRequest) error {
|
|||
const op = "shoppingbasketapp.service.ValidateRemoveFromCart"
|
||||
|
||||
if err := validation.ValidateStruct(&req,
|
||||
validation.Field(&req.UserID, validation.Required),
|
||||
validation.Field(&req.ProductID, validation.Required)); err != nil {
|
||||
validation.Field(&req.CartID, validation.Required),
|
||||
validation.Field(&req.ItemID, validation.Required)); err != nil {
|
||||
|
||||
fieldErrs := make(map[string]interface{})
|
||||
vErr, ok := err.(validation.Errors)
|
||||
|
|
@ -70,8 +70,8 @@ func (v Validate) ValidateUpdateQuantity(req UpdateQuantityRequest) error {
|
|||
const op = "shoppingbasketapp.service.ValidateUpdateQuantity"
|
||||
|
||||
if err := validation.ValidateStruct(&req,
|
||||
validation.Field(&req.UserID, validation.Required),
|
||||
validation.Field(&req.ProductID, validation.Required),
|
||||
validation.Field(&req.CartID, validation.Required),
|
||||
validation.Field(&req.ItemID, validation.Required),
|
||||
validation.Field(&req.Quantity, validation.Required, validation.Min(int(1)))); err != nil {
|
||||
|
||||
fieldErrs := make(map[string]interface{})
|
||||
|
|
|
|||
|
|
@ -14,4 +14,5 @@ type Config struct {
|
|||
Repo repository.Config `koanf:"repo" json:"repo"`
|
||||
HTTPServer httpserver.Config `koanf:"http_server" json:"http_server"`
|
||||
Logger logger.Config `koanf:"logger" json:"logger"`
|
||||
PathOfMigration string `koanf:"path_of_migration" json:"path_of_migration"`
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue