order-service/src/internal/worker/command.go

55 lines
1.2 KiB
Go

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
}