+++ /dev/null
-// Package handling provides the use-case for registering incidents. Used by
-// views facing the people handling the cargo along its route.
-package handling
-
-import (
- "errors"
- "time"
-
- "github.com/go-kit/kit/examples/shipping/cargo"
- "github.com/go-kit/kit/examples/shipping/inspection"
- "github.com/go-kit/kit/examples/shipping/location"
- "github.com/go-kit/kit/examples/shipping/voyage"
-)
-
-// ErrInvalidArgument is returned when one or more arguments are invalid.
-var ErrInvalidArgument = errors.New("invalid argument")
-
-// EventHandler provides a means of subscribing to registered handling events.
-type EventHandler interface {
- CargoWasHandled(cargo.HandlingEvent)
-}
-
-// Service provides handling operations.
-type Service interface {
- // RegisterHandlingEvent registers a handling event in the system, and
- // notifies interested parties that a cargo has been handled.
- RegisterHandlingEvent(completed time.Time, id cargo.TrackingID, voyageNumber voyage.Number,
- unLocode location.UNLocode, eventType cargo.HandlingEventType) error
-}
-
-type service struct {
- handlingEventRepository cargo.HandlingEventRepository
- handlingEventFactory cargo.HandlingEventFactory
- handlingEventHandler EventHandler
-}
-
-func (s *service) RegisterHandlingEvent(completed time.Time, id cargo.TrackingID, voyageNumber voyage.Number,
- loc location.UNLocode, eventType cargo.HandlingEventType) error {
- if completed.IsZero() || id == "" || loc == "" || eventType == cargo.NotHandled {
- return ErrInvalidArgument
- }
-
- e, err := s.handlingEventFactory.CreateHandlingEvent(time.Now(), completed, id, voyageNumber, loc, eventType)
- if err != nil {
- return err
- }
-
- s.handlingEventRepository.Store(e)
- s.handlingEventHandler.CargoWasHandled(e)
-
- return nil
-}
-
-// NewService creates a handling event service with necessary dependencies.
-func NewService(r cargo.HandlingEventRepository, f cargo.HandlingEventFactory, h EventHandler) Service {
- return &service{
- handlingEventRepository: r,
- handlingEventFactory: f,
- handlingEventHandler: h,
- }
-}
-
-type handlingEventHandler struct {
- InspectionService inspection.Service
-}
-
-func (h *handlingEventHandler) CargoWasHandled(event cargo.HandlingEvent) {
- h.InspectionService.InspectCargo(event.TrackingID)
-}
-
-// NewEventHandler returns a new instance of a EventHandler.
-func NewEventHandler(s inspection.Service) EventHandler {
- return &handlingEventHandler{
- InspectionService: s,
- }
-}