package worker import ( "git.pbiernat.dev/egommerce/catalog-service/internal/service" ) var ( StockUpdated = "event.WarehouseStockUpdatedEvent" ) type Command interface { run(CommandData) (bool, any) } type CommandData map[string]interface{} type CommandRunner struct { cmd Command } func NewCommandRunner(data map[string]interface{}, srvc *service.CatalogService) *CommandRunner { rnr := &CommandRunner{} rnr.cmd = getCommand((data["command"]).(string), srvc) return rnr } func getCommand(cmd string, srvc *service.CatalogService) Command { // fmt.Printf("getCommand: %v\n", cmd) var c Command switch cmd { // FIXME case "StockUpdated": c = &StockUpdatedCommand{srvc} } return c } func (r *CommandRunner) run(data CommandData) (bool, any) { return r.cmd.run(data) } type StockUpdatedCommand struct { srvc *service.CatalogService } func (c *StockUpdatedCommand) run(data CommandData) (bool, any) { // reqID := data["request_id"].(string) // FIXME Check input params! // productID := int(data["product_id"].(float64)) // FIXME Check input params! // stock, err := ui.StockUpdated(c.srvc, productID, reqID) return true, nil //err == nil, basket }