| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 | package endpointimport (	"context"	"github.com/go-kit/kit/endpoint"	shipping "github.com/longjoy/micro-go-course/section19/cargo/model"	"github.com/longjoy/micro-go-course/section19/cargo/service/booking"	"github.com/longjoy/micro-go-course/section19/cargo/service/handling"	"time")type CargoEndpoints struct {	BookCargoEndpoint             endpoint.Endpoint	LoadCargoEndpoint             endpoint.Endpoint	AssignCargoToRouteEndpoint    endpoint.Endpoint	ChangeDestinationEndpoint     endpoint.Endpoint	CargosEndpoint                endpoint.Endpoint	LocationsEndpoint             endpoint.Endpoint	RegisterHandlingEventEndpoint endpoint.Endpoint	//TrackEndpoint                 endpoint.Endpoint}type RegisterHandlingEventRequest struct {	Completed    time.Time	Id           shipping.TrackingID	VoyageNumber shipping.VoyageNumber	UnLocode     shipping.UNLocode	EventType    shipping.HandlingEventType}type RegisterHandlingEventResponse struct {	Res bool `json:"res"`}func RegisterHandlingEventEndpoint(handlingService handling.Service) endpoint.Endpoint {	return func(ctx context.Context, request interface{}) (response interface{}, err error) {		req := request.(*RegisterHandlingEventRequest)		res, err := handlingService.RegisterHandlingEvent(req.Completed, req.Id, req.VoyageNumber, req.UnLocode, req.EventType)		return &RegisterHandlingEventResponse{Res: res}, err	}}type LocationsResponse struct {	Locations []booking.Location `json:"locations"`}func LocationsEndpoint(bookService booking.Service) endpoint.Endpoint {	return func(ctx context.Context, request interface{}) (response interface{}, err error) {		res := bookService.Locations()		return &LocationsResponse{Locations: res}, err	}}type CargosResponse struct {	Cargos []booking.Cargo `json:"cargos"`}func CargosEndpoint(bookService booking.Service) endpoint.Endpoint {	return func(ctx context.Context, request interface{}) (response interface{}, err error) {		res := bookService.Cargos()		return &CargosResponse{Cargos: res}, err	}}type ChangeDestinationRequest struct {	Id          shipping.TrackingID	Destination shipping.UNLocode}type ChangeDestinationResponse struct {	Res bool `json:"res"`}func ChangeDestinationEndpoint(bookService booking.Service) endpoint.Endpoint {	return func(ctx context.Context, request interface{}) (response interface{}, err error) {		req := request.(*ChangeDestinationRequest)		res, err := bookService.ChangeDestination(req.Id, req.Destination)		return &ChangeDestinationResponse{Res: res}, err	}}type AssignCargoToRouteRequest struct {	Id        shipping.TrackingID	Itinerary shipping.Itinerary}type AssignCargoToRouteResponse struct {	Res bool `json:"res"`}func AssignCargoToRouteEndpoint(bookService booking.Service) endpoint.Endpoint {	return func(ctx context.Context, request interface{}) (response interface{}, err error) {		req := request.(*AssignCargoToRouteRequest)		res, err := bookService.AssignCargoToRoute(req.Id, req.Itinerary)		return &AssignCargoToRouteResponse{Res: res}, err	}}type LoadCargoRequest struct {	Id shipping.TrackingID}type LoadCargoResponse struct {	Cargo booking.Cargo `json:"cargo"`}func MakeLoadCargoEndpoint(bookService booking.Service) endpoint.Endpoint {	return func(ctx context.Context, request interface{}) (response interface{}, err error) {		req := request.(*LoadCargoRequest)		cargo, err := bookService.LoadCargo(req.Id)		return &LoadCargoResponse{Cargo: cargo}, err	}}type BookCargoRequest struct {	Origin      shipping.UNLocode	Destination shipping.UNLocode	Deadline    time.Time}type BookCargoResponse struct {	TrackingID shipping.TrackingID `json:"tracking_id"`}type LocationsRequest struct {}func MakeBookCargoEndpoint(bookService booking.Service) endpoint.Endpoint {	return func(ctx context.Context, request interface{}) (response interface{}, err error) {		req := request.(*BookCargoRequest)		trackingID, err := bookService.BookNewCargo(req.Origin, req.Destination, req.Deadline)		return &BookCargoResponse{TrackingID: trackingID}, err	}}/*// UserEndpoint define endpointfunc (ce *CargoEndpoints) BookNewCargo(ctx context.Context, origin shipping.UNLocode, destination shipping.UNLocode,	deadline time.Time) (shipping.TrackingID, error) {	if origin == "" || destination == "" || deadline.IsZero() {		return "", booking.ErrInvalidArgument	}	id := shipping.NextTrackingID()	rs := shipping.RouteSpecification{		Origin:          origin,		Destination:     destination,		ArrivalDeadline: deadline,	}	c := shipping.NewCargo(id, rs)	if _, err := s.cargos.Store(c); err != nil {		return "", err	}	return c.TrackingID, nil}*/
 |