package worker import ( "git.pbiernat.io/egommerce/order-service/internal/service" ) var ( CheckoutBasket = "event.CheckoutBasket" ) 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.OrderService) *CommandRunner { rnr := &CommandRunner{} rnr.cmd = getCommand((data["command"]).(string), srvc) return rnr } func getCommand(cmd string, srvc *service.OrderService) Command { // fmt.Printf("getCommand: %v\n", cmd) var c Command switch cmd { // FIXME case "CheckoutBasket": c = &CheckoutBasketCommand{srvc} } return c } func (r *CommandRunner) run(data CommandData) (bool, any) { return r.cmd.run(data) } type CheckoutBasketCommand struct { srvc *service.OrderService // FIXME: Remove service dep } func (c *CheckoutBasketCommand) run(data CommandData) (bool, any) { // FIXME: Move run func to WorkerPool // reqID := data["request_id"].(string) // FIXME Check input params! // basketID := data["basket_id"].(string) // FIXME Check input params! // order, err := ui.CreateOrder(c.srvc, basketID, reqID) return true, nil //err == nil, basket }