added migration in cmd layer

This commit is contained in:
mzfarshad 2026-05-05 22:30:35 +03:30
parent 12af65bcd4
commit ef60a6516d
6 changed files with 78 additions and 16 deletions

View File

@ -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)
}

View File

@ -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

View File

@ -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)
}

View File

@ -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

View File

@ -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{})

View File

@ -9,9 +9,10 @@ import (
)
type Config struct {
Redis redis.Config `koanf:"redis" json:"redis"`
Mysql mysql.Config `koanf:"mysql" json:"mysql"`
Repo repository.Config `koanf:"repo" json:"repo"`
HTTPServer httpserver.Config `koanf:"http_server" json:"http_server"`
Logger logger.Config `koanf:"logger" json:"logger"`
Redis redis.Config `koanf:"redis" json:"redis"`
Mysql mysql.Config `koanf:"mysql" json:"mysql"`
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"`
}