Compare commits
5 Commits
f72dfcf95e
...
46cccf22e2
Author | SHA1 | Date |
---|---|---|
Sinh | 46cccf22e2 | |
Sinh | 4f20218bcd | |
sinhluu | d4915875e9 | |
Sinh | a33809e092 | |
sinhluu | d549cc5103 |
|
@ -21,6 +21,7 @@ const (
|
|||
apiPathUpdateDelivery = "/v1/orders/update_delivery"
|
||||
apiPathCancelOrder = "/v1/orders/cancel"
|
||||
apiPathGetChannels = "/v1/channels"
|
||||
apiPathGetInventories = "/v1/inventories"
|
||||
|
||||
headerXAPIKey = "x-api-key"
|
||||
headerXTimestamp = "x-timestamp"
|
||||
|
|
|
@ -50,6 +50,14 @@ type CancelOrderRequest struct {
|
|||
OrderNo string `json:"order_code"`
|
||||
}
|
||||
|
||||
type ListInventoriesReq struct {
|
||||
UpdatedFrom time.Time
|
||||
UpdatedTo time.Time
|
||||
SKUList []string
|
||||
Size int
|
||||
Page int
|
||||
}
|
||||
|
||||
/**
|
||||
* WEBHOOK ONPOINT
|
||||
*/
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package onpoint
|
||||
|
||||
import "time"
|
||||
|
||||
// CreateOrderResponse ...
|
||||
type CreateOrderResponse struct {
|
||||
OrderCode string `json:"order_code"`
|
||||
|
@ -34,3 +36,34 @@ type ChannelResponse struct {
|
|||
Code string `json:"code"`
|
||||
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
|
||||
}
|
||||
|
||||
// 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 {
|
||||
ec, err := c.natsClient.NewJSONEncodedConn()
|
||||
if err != nil {
|
||||
|
|
|
@ -15,7 +15,7 @@ const (
|
|||
|
||||
TPLCodeGHN = "GHN"
|
||||
TPLCodeGHTK = "GHTK"
|
||||
TPLCodeBest = "BEST"
|
||||
TPLCodeBest = "BEX"
|
||||
TPLCodeSnappy = "SPY"
|
||||
TPLCodeViettelPost = "VTP"
|
||||
TPLCodeSellyExpress = "SE"
|
||||
|
|
Loading…
Reference in New Issue