1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package endpoint
- import (
- "context"
- "encoding/json"
- "net/http"
- "time"
- "github.com/go-chi/chi"
- kitlog "github.com/go-kit/kit/log"
- shipping "github.com/longjoy/micro-go-course/section19/cargo/model"
- "github.com/longjoy/micro-go-course/section19/cargo/service/handling"
- )
- type handlingHandler struct {
- s handling.Service
- logger kitlog.Logger
- }
- func (h *handlingHandler) router() chi.Router {
- r := chi.NewRouter()
- r.Post("/incidents", h.registerIncident)
- r.Method("GET", "/docs", http.StripPrefix("/handling/v1/docs", http.FileServer(http.Dir("handling/docs"))))
- return r
- }
- func (h *handlingHandler) registerIncident(w http.ResponseWriter, r *http.Request) {
- ctx := context.Background()
- var request struct {
- CompletionTime time.Time `json:"completion_time"`
- TrackingID string `json:"tracking_id"`
- VoyageNumber string `json:"voyage"`
- Location string `json:"location"`
- EventType string `json:"event_type"`
- }
- if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
- h.logger.Log("error", err)
- encodeError(ctx, err, w)
- return
- }
- _, err := h.s.RegisterHandlingEvent(
- request.CompletionTime,
- shipping.TrackingID(request.TrackingID),
- shipping.VoyageNumber(request.VoyageNumber),
- shipping.UNLocode(request.Location),
- stringToEventType(request.EventType),
- )
- if err != nil {
- encodeError(ctx, err, w)
- return
- }
- }
- func stringToEventType(s string) shipping.HandlingEventType {
- types := map[string]shipping.HandlingEventType{
- shipping.Receive.String(): shipping.Receive,
- shipping.Load.String(): shipping.Load,
- shipping.Unload.String(): shipping.Unload,
- shipping.Customs.String(): shipping.Customs,
- shipping.Claim.String(): shipping.Claim,
- }
- return types[s]
- }
|