flamingo.me/flamingo-commerce/v3@v3.11.0/checkout/application/placeorder/handler.go (about) 1 package placeorder 2 3 import ( 4 "context" 5 6 "go.opencensus.io/trace" 7 8 "flamingo.me/flamingo-commerce/v3/checkout/domain/placeorder/process" 9 ) 10 11 // Handler for handling PlaceOrder related commands 12 type Handler struct { 13 coordinator *Coordinator 14 } 15 16 // Inject dependencies 17 func (h *Handler) Inject( 18 c *Coordinator, 19 ) *Handler { 20 h.coordinator = c 21 22 return h 23 } 24 25 // StartPlaceOrder handles start place order command 26 func (h *Handler) StartPlaceOrder(ctx context.Context, command StartPlaceOrderCommand) (*process.Context, error) { 27 ctx, span := trace.StartSpan(ctx, "checkout/Handler/StartPlaceOrder") 28 defer span.End() 29 30 _ = h.coordinator.ClearLastProcess(ctx) 31 return h.coordinator.New(ctx, command.Cart, command.ReturnURL) 32 } 33 34 // CurrentContext returns the last saved state 35 func (h *Handler) CurrentContext(ctx context.Context) (*process.Context, error) { 36 ctx, span := trace.StartSpan(ctx, "checkout/Handler/CurrentContext") 37 defer span.End() 38 39 p, err := h.coordinator.LastProcess(ctx) 40 if err != nil { 41 return nil, err 42 } 43 currentContext := p.Context() 44 45 return ¤tContext, nil 46 } 47 48 // ClearPlaceOrder clears the last placed order from the context store, only possible if order in final state 49 func (h *Handler) ClearPlaceOrder(ctx context.Context) error { 50 ctx, span := trace.StartSpan(ctx, "checkout/Handler/ClearPlaceOrder") 51 defer span.End() 52 53 return h.coordinator.ClearLastProcess(ctx) 54 } 55 56 // RefreshPlaceOrder handles RefreshPlaceOrder command 57 func (h *Handler) RefreshPlaceOrder(ctx context.Context, _ RefreshPlaceOrderCommand) (*process.Context, error) { 58 ctx, span := trace.StartSpan(ctx, "checkout/Handler/RefreshPlaceOrder") 59 defer span.End() 60 61 p, err := h.coordinator.LastProcess(ctx) 62 if err != nil { 63 return nil, err 64 } 65 lastPlaceOrderCtx := p.Context() 66 67 // proceed in state 68 h.coordinator.Run(ctx) 69 70 return &lastPlaceOrderCtx, nil 71 } 72 73 // RefreshPlaceOrderBlocking handles RefreshPlaceOrder blocking 74 func (h *Handler) RefreshPlaceOrderBlocking(ctx context.Context, _ RefreshPlaceOrderCommand) (*process.Context, error) { 75 ctx, span := trace.StartSpan(ctx, "checkout/Handler/RefreshPlaceOrderBlocking") 76 defer span.End() 77 78 return h.coordinator.RunBlocking(ctx) 79 } 80 81 // HasUnfinishedProcess checks for processes not in final state 82 func (h *Handler) HasUnfinishedProcess(ctx context.Context) (bool, error) { 83 ctx, span := trace.StartSpan(ctx, "checkout/Handler/HasUnfinishedProcess") 84 defer span.End() 85 86 return h.coordinator.HasUnfinishedProcess(ctx) 87 } 88 89 // CancelPlaceOrder handles order cancellation, is blocking 90 func (h *Handler) CancelPlaceOrder(ctx context.Context, _ CancelPlaceOrderCommand) error { 91 ctx, span := trace.StartSpan(ctx, "checkout/Handler/CancelPlaceOrder") 92 defer span.End() 93 94 return h.coordinator.Cancel(ctx) 95 }