29 lines
655 B
Go
29 lines
655 B
Go
|
|
package orders
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
|
||
|
|
"github.com/badu/bus"
|
||
|
|
"github.com/badu/bus/test_scenarios/request-reply-with-cancellation/events"
|
||
|
|
)
|
||
|
|
|
||
|
|
type ServiceImpl struct {
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewService() ServiceImpl {
|
||
|
|
result := ServiceImpl{}
|
||
|
|
return result
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *ServiceImpl) CreateOrder(ctx context.Context, productIDs []int) (*Order, error) {
|
||
|
|
event := events.CreateOrderEvent{State: events.NewEventState(ctx), ProductIDs: productIDs, NewOrder: &events.NewOrder{}}
|
||
|
|
bus.Pub(event)
|
||
|
|
<-event.State.Done
|
||
|
|
|
||
|
|
if event.NewOrder != nil && event.State.Error == nil {
|
||
|
|
return &Order{ID: event.NewOrder.ID, ProductIDs: productIDs}, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
return nil, event.State.Error
|
||
|
|
}
|