Merge branch 'onpoint-stock-update' into develop
This commit is contained in:
		
						commit
						46cccf22e2
					
				| 
						 | 
					@ -21,6 +21,7 @@ const (
 | 
				
			||||||
	apiPathUpdateDelivery = "/v1/orders/update_delivery"
 | 
						apiPathUpdateDelivery = "/v1/orders/update_delivery"
 | 
				
			||||||
	apiPathCancelOrder    = "/v1/orders/cancel"
 | 
						apiPathCancelOrder    = "/v1/orders/cancel"
 | 
				
			||||||
	apiPathGetChannels    = "/v1/channels"
 | 
						apiPathGetChannels    = "/v1/channels"
 | 
				
			||||||
 | 
						apiPathGetInventories = "/v1/inventories"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	headerXAPIKey    = "x-api-key"
 | 
						headerXAPIKey    = "x-api-key"
 | 
				
			||||||
	headerXTimestamp = "x-timestamp"
 | 
						headerXTimestamp = "x-timestamp"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,6 +50,14 @@ type CancelOrderRequest struct {
 | 
				
			||||||
	OrderNo string `json:"order_code"`
 | 
						OrderNo string `json:"order_code"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ListInventoriesReq struct {
 | 
				
			||||||
 | 
						UpdatedFrom time.Time
 | 
				
			||||||
 | 
						UpdatedTo   time.Time
 | 
				
			||||||
 | 
						SKUList     []string
 | 
				
			||||||
 | 
						Size        int
 | 
				
			||||||
 | 
						Page        int
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * WEBHOOK ONPOINT
 | 
					 * WEBHOOK ONPOINT
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,7 @@
 | 
				
			||||||
package onpoint
 | 
					package onpoint
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CreateOrderResponse ...
 | 
					// CreateOrderResponse ...
 | 
				
			||||||
type CreateOrderResponse struct {
 | 
					type CreateOrderResponse struct {
 | 
				
			||||||
	OrderCode        string      `json:"order_code"`
 | 
						OrderCode        string      `json:"order_code"`
 | 
				
			||||||
| 
						 | 
					@ -34,3 +36,34 @@ type ChannelResponse struct {
 | 
				
			||||||
	Code string `json:"code"`
 | 
						Code string `json:"code"`
 | 
				
			||||||
	Name string `json:"name"`
 | 
						Name string `json:"name"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ListInventoriesRes struct {
 | 
				
			||||||
 | 
						Code string `json:"code"`
 | 
				
			||||||
 | 
						Data struct {
 | 
				
			||||||
 | 
							Entries      []InventoryEntry `json:"entries"`
 | 
				
			||||||
 | 
							Page         int              `json:"page"`
 | 
				
			||||||
 | 
							Size         int              `json:"size"`
 | 
				
			||||||
 | 
							TotalEntries int              `json:"total_entries"`
 | 
				
			||||||
 | 
							TotalPages   int              `json:"total_pages"`
 | 
				
			||||||
 | 
						} `json:"data"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type InventoryEntry struct {
 | 
				
			||||||
 | 
						AvailableQuantity int       `json:"available_quantity"`
 | 
				
			||||||
 | 
						PickupLocation    Pickup    `json:"pickup_location"`
 | 
				
			||||||
 | 
						Product           Product   `json:"product"`
 | 
				
			||||||
 | 
						UpdatedAt         time.Time `json:"updated_at"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Product struct {
 | 
				
			||||||
 | 
						Name          string      `json:"name"`
 | 
				
			||||||
 | 
						OriginalPrice int         `json:"original_price"`
 | 
				
			||||||
 | 
						SellingPrice  int         `json:"selling_price"`
 | 
				
			||||||
 | 
						Sku           string      `json:"sku"`
 | 
				
			||||||
 | 
						Uom           interface{} `json:"uom"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Pickup struct {
 | 
				
			||||||
 | 
						Code string `json:"code"`
 | 
				
			||||||
 | 
						Name string `json:"name"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -152,6 +152,58 @@ func (c *Client) CancelOrder(p CancelOrderRequest) (*CancelOrderResponse, error)
 | 
				
			||||||
	return &dataRes.Data, nil
 | 
						return &dataRes.Data, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// GetInventories ...
 | 
				
			||||||
 | 
					func (c *Client) GetInventories(req ListInventoriesReq) (*ListInventoriesRes, error) {
 | 
				
			||||||
 | 
						url := c.getBaseURL() + apiPathGetInventories
 | 
				
			||||||
 | 
						q := map[string]string{}
 | 
				
			||||||
 | 
						if !req.UpdatedFrom.IsZero() {
 | 
				
			||||||
 | 
							q["updated_from"] = req.UpdatedFrom.Format(TimeLayout)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !req.UpdatedTo.IsZero() {
 | 
				
			||||||
 | 
							q["updated_to"] = req.UpdatedTo.Format(TimeLayout)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if len(req.SKUList) > 0 {
 | 
				
			||||||
 | 
							q["sku_list"] = strings.Join(req.SKUList, ",")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if req.Page > 0 {
 | 
				
			||||||
 | 
							q["page"] = strconv.Itoa(req.Page)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if req.Size > 0 {
 | 
				
			||||||
 | 
							q["size"] = strconv.Itoa(req.Size)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						natsPayload := model.CommunicationRequestHttp{
 | 
				
			||||||
 | 
							ResponseImmediately: true,
 | 
				
			||||||
 | 
							Payload: model.HttpRequest{
 | 
				
			||||||
 | 
								URL:    url,
 | 
				
			||||||
 | 
								Method: http.MethodPost,
 | 
				
			||||||
 | 
								Query:  q,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						var (
 | 
				
			||||||
 | 
							r       model.CommunicationHttpResponse
 | 
				
			||||||
 | 
							errRes  Error
 | 
				
			||||||
 | 
							dataRes ListInventoriesRes
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if err := c.requestHttpViaNats(natsPayload, &r); err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						res := r.Response
 | 
				
			||||||
 | 
						if res == nil {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf("onpoint.Client.GetInventories: empty_response")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if res.StatusCode >= http.StatusBadRequest {
 | 
				
			||||||
 | 
							if err := r.ParseResponseData(&errRes); err != nil {
 | 
				
			||||||
 | 
								return nil, fmt.Errorf("onpoint.Client.GetInventories: parse_response_err: %v", err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return nil, errRes
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err := r.ParseResponseData(&dataRes); err != nil {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf("onpoint.Client.GetInventories: parse_response_data: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &dataRes, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *Client) requestHttpViaNats(data model.CommunicationRequestHttp, res interface{}) error {
 | 
					func (c *Client) requestHttpViaNats(data model.CommunicationRequestHttp, res interface{}) error {
 | 
				
			||||||
	ec, err := c.natsClient.NewJSONEncodedConn()
 | 
						ec, err := c.natsClient.NewJSONEncodedConn()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,7 +15,7 @@ const (
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	TPLCodeGHN          = "GHN"
 | 
						TPLCodeGHN          = "GHN"
 | 
				
			||||||
	TPLCodeGHTK         = "GHTK"
 | 
						TPLCodeGHTK         = "GHTK"
 | 
				
			||||||
	TPLCodeBest         = "BEST"
 | 
						TPLCodeBest         = "BEX"
 | 
				
			||||||
	TPLCodeSnappy       = "SPY"
 | 
						TPLCodeSnappy       = "SPY"
 | 
				
			||||||
	TPLCodeViettelPost  = "VTP"
 | 
						TPLCodeViettelPost  = "VTP"
 | 
				
			||||||
	TPLCodeSellyExpress = "SE"
 | 
						TPLCodeSellyExpress = "SE"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue