define communication, warehouse func #5
			
				
			
		
		
		
	| 
						 | 
				
			
			@ -0,0 +1,26 @@
 | 
			
		|||
package client
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
 | 
			
		||||
	"github.com/Selly-Modules/natsio"
 | 
			
		||||
	"github.com/Selly-Modules/natsio/subject"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Communication ...
 | 
			
		||||
type Communication struct{}
 | 
			
		||||
 | 
			
		||||
// GetCommunication ...
 | 
			
		||||
func GetCommunication() Communication {
 | 
			
		||||
	return Communication{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RequestHttp ...
 | 
			
		||||
func (c Communication) RequestHttp(p communication.CommunicationRequestHttp) (r *communication.CommunicationHttpResponse, err error) {
 | 
			
		||||
	msg, err := natsio.GetServer().Request(subject.CommunicationRequestHTTP, toBytes(p))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	err = json.Unmarshal(msg.Data, &r)
 | 
			
		||||
	return r, err
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
package client
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"log"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func toBytes(data interface{}) []byte {
 | 
			
		||||
	b, err := json.Marshal(data)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("natsio/client.toBytes: marshal_json %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	return b
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,75 @@
 | 
			
		|||
package client
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"errors"
 | 
			
		||||
 | 
			
		||||
	"github.com/Selly-Modules/natsio"
 | 
			
		||||
	"github.com/Selly-Modules/natsio/model"
 | 
			
		||||
	"github.com/Selly-Modules/natsio/subject"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Warehouse ...
 | 
			
		||||
type Warehouse struct{}
 | 
			
		||||
 | 
			
		||||
// GetWarehouse ...
 | 
			
		||||
func GetWarehouse() Warehouse {
 | 
			
		||||
	return Warehouse{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CreateOutboundRequest ...
 | 
			
		||||
func (w Warehouse) CreateOutboundRequest(p model.OutboundRequestPayload) (*model.OutboundRequestResponse, error) {
 | 
			
		||||
	msg, err := natsio.GetServer().Request(subject.WarehouseCreateOutboundRequest, toBytes(p))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	var r struct {
 | 
			
		||||
		Data  *model.OutboundRequestResponse `json:"data"`
 | 
			
		||||
		Error string                         `json:"error"`
 | 
			
		||||
	}
 | 
			
		||||
	if err = json.Unmarshal(msg.Data, &r); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if r.Error != "" {
 | 
			
		||||
		return nil, errors.New(r.Error)
 | 
			
		||||
	}
 | 
			
		||||
	return r.Data, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateOutboundRequestLogisticInfo ...
 | 
			
		||||
func (w Warehouse) UpdateOutboundRequestLogisticInfo(p model.UpdateOutboundRequestLogisticInfoPayload) error {
 | 
			
		||||
	msg, err := natsio.GetServer().Request(subject.WarehouseUpdateOutboundRequestLogistic, toBytes(p))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	var r struct {
 | 
			
		||||
		Data  *model.OutboundRequestResponse `json:"data"`
 | 
			
		||||
		Error string                         `json:"error"`
 | 
			
		||||
	}
 | 
			
		||||
	if err = json.Unmarshal(msg.Data, &r); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	if r.Error != "" {
 | 
			
		||||
		return errors.New(r.Error)
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetConfigByWarehouseID ...
 | 
			
		||||
func (w Warehouse) GetConfigByWarehouseID(warehouseID string) (*model.WarehouseConfiguration, error) {
 | 
			
		||||
	msg, err := natsio.GetServer().Request(subject.WarehouseGetConfiguration, toBytes(warehouseID))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	var r struct {
 | 
			
		||||
		Data  *model.WarehouseConfiguration `json:"data"`
 | 
			
		||||
		Error string                        `json:"error"`
 | 
			
		||||
	}
 | 
			
		||||
	if err = json.Unmarshal(msg.Data, &r); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if r.Error != "" {
 | 
			
		||||
		return nil, errors.New(r.Error)
 | 
			
		||||
	}
 | 
			
		||||
	return r.Data, nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
package model
 | 
			
		||||
 | 
			
		||||
// CommunicationRequestHttp ...
 | 
			
		||||
type CommunicationRequestHttp struct {
 | 
			
		||||
	ResponseImmediately bool        `json:"responseImmediately"`
 | 
			
		||||
	Authentication      string      `json:"authentication"`
 | 
			
		||||
	Payload             HttpRequest `json:"payload"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// HttpRequest ...
 | 
			
		||||
type HttpRequest struct {
 | 
			
		||||
	URL    string            `json:"url"`
 | 
			
		||||
	Method string            `json:"method"`
 | 
			
		||||
	Data   string            `json:"data"`
 | 
			
		||||
	Header map[string]string `json:"header"`
 | 
			
		||||
	Query  map[string]string `json:"query"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
package model
 | 
			
		||||
 | 
			
		||||
import "encoding/json"
 | 
			
		||||
 | 
			
		||||
// CommunicationHttpResponse ...
 | 
			
		||||
type CommunicationHttpResponse struct {
 | 
			
		||||
	Response  *HttpResponse `json:"response"`
 | 
			
		||||
	Error     bool          `json:"error"`
 | 
			
		||||
	Message   string        `json:"message"`
 | 
			
		||||
	RequestID string        `json:"requestId"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ParseResponseData ...
 | 
			
		||||
func (r *CommunicationHttpResponse) ParseResponseData(result interface{}) error {
 | 
			
		||||
	if r.Response == nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	return json.Unmarshal([]byte(r.Response.Body), result)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// HttpResponse ...
 | 
			
		||||
type HttpResponse struct {
 | 
			
		||||
	Body       string `json:"body"`
 | 
			
		||||
	StatusCode int    `json:"statusCode"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,49 @@
 | 
			
		|||
package model
 | 
			
		||||
 | 
			
		||||
// OutboundRequestPayload ...
 | 
			
		||||
type OutboundRequestPayload struct {
 | 
			
		||||
	OrderCode    string                `json:"orderCode"`
 | 
			
		||||
	TrackingCode string                `json:"trackingCode"`
 | 
			
		||||
	WarehouseID  string                `json:"warehouseId"`
 | 
			
		||||
	SupplierID   string                `json:"supplierId"`
 | 
			
		||||
	Note         string                `json:"note"`
 | 
			
		||||
	CODAmount    float64               `json:"codAmount"`
 | 
			
		||||
	TPLCode      string                `json:"tplCode"`
 | 
			
		||||
	Customer     CustomerInfo          `json:"customer"`
 | 
			
		||||
	Items        []OutboundRequestItem `json:"items"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// OutboundRequestItem ...
 | 
			
		||||
type OutboundRequestItem struct {
 | 
			
		||||
	SupplierSKU string `json:"supplierSKU"`
 | 
			
		||||
	Quantity    int64  `json:"quantity"`
 | 
			
		||||
	UnitCode    string `json:"unitCode"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CustomerInfo ...
 | 
			
		||||
type CustomerInfo struct {
 | 
			
		||||
	Name        string        `json:"name"`
 | 
			
		||||
	PhoneNumber string        `json:"phoneNumber"`
 | 
			
		||||
	Address     AddressDetail `json:"address"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AddressDetail ...
 | 
			
		||||
type AddressDetail struct {
 | 
			
		||||
	Address      string `json:"address"`
 | 
			
		||||
	FullAddress  string `json:"fullAddress"`
 | 
			
		||||
	ProvinceCode int    `json:"provinceCode"`
 | 
			
		||||
	DistrictCode int    `json:"districtCode"`
 | 
			
		||||
	WardCode     int    `json:"wardCode"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateOutboundRequestLogisticInfoPayload ...
 | 
			
		||||
type UpdateOutboundRequestLogisticInfoPayload struct {
 | 
			
		||||
	ShippingLabel string `json:"shippingLabel"`
 | 
			
		||||
	TrackingCode  string `json:"trackingCode"`
 | 
			
		||||
	ORCode        string `json:"orCode"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CancelOutboundRequest ...
 | 
			
		||||
type CancelOutboundRequest struct {
 | 
			
		||||
	ORCode string `json:"orCode"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,60 @@
 | 
			
		|||
package model
 | 
			
		||||
 | 
			
		||||
// OutboundRequestResponse ...
 | 
			
		||||
type OutboundRequestResponse struct {
 | 
			
		||||
	// System code
 | 
			
		||||
	OrderCode    string `json:"orderCode"`
 | 
			
		||||
	TrackingCode string `json:"trackingCode"`
 | 
			
		||||
 | 
			
		||||
	// Partner response
 | 
			
		||||
	ORCode    string `json:"orCode"`
 | 
			
		||||
	RequestID string `json:"requestId"`
 | 
			
		||||
	Status    string `json:"status"`
 | 
			
		||||
	Reason    string `json:"reason"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WarehouseConfiguration ...
 | 
			
		||||
type WarehouseConfiguration struct {
 | 
			
		||||
	Warehouse               string            `json:"warehouse"`
 | 
			
		||||
	DoesSupportSellyExpress bool              `json:"doesSupportSellyExpress"`
 | 
			
		||||
	Supplier                WarehouseSupplier `json:"supplier"`
 | 
			
		||||
	Order                   WarehouseOrder    `json:"order"`
 | 
			
		||||
	Partner                 WarehousePartner  `json:"partner"`
 | 
			
		||||
	Delivery                WarehouseDelivery `json:"delivery"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WarehouseSupplier ...
 | 
			
		||||
type WarehouseSupplier struct {
 | 
			
		||||
	CanAutoSendMail       bool   `json:"canAutoSendMail"`
 | 
			
		||||
	InvoiceDeliveryMethod string `json:"invoiceDeliveryMethod"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WarehouseOrder ...
 | 
			
		||||
type WarehouseOrder struct {
 | 
			
		||||
	MinimumValue             float64                `json:"minimumValue"`
 | 
			
		||||
	PaymentMethod            WarehousePaymentMethod `json:"paymentMethod"`
 | 
			
		||||
	IsLimitNumberOfPurchases bool                   `json:"isLimitNumberOfPurchases" json:"isLimitNumberOfPurchases"`
 | 
			
		||||
	LimitNumberOfPurchases   int64                  `json:"limitNumberOfPurchases" json:"limitNumberOfPurchases"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WarehousePaymentMethod ...
 | 
			
		||||
type WarehousePaymentMethod struct {
 | 
			
		||||
	Cod          bool `json:"cod"`
 | 
			
		||||
	BankTransfer bool `json:"bankTransfer"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WarehouseDelivery ...
 | 
			
		||||
type WarehouseDelivery struct {
 | 
			
		||||
	DeliveryMethods      []string `json:"deliveryMethods"`
 | 
			
		||||
	PriorityServiceCodes []string `json:"priorityDeliveryServiceCodes"`
 | 
			
		||||
	EnabledSources       []int    `json:"enabledDeliverySources"`
 | 
			
		||||
	Types                []string `json:"type"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WarehousePartner ...
 | 
			
		||||
type WarehousePartner struct {
 | 
			
		||||
	IdentityCode   string `json:"identityCode"`
 | 
			
		||||
	Code           string `json:"code"`
 | 
			
		||||
	Enabled        bool   `json:"enabled"`
 | 
			
		||||
	Authentication string `json:"authentication"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
package subject
 | 
			
		||||
 | 
			
		||||
const communicationPrefix = "communication_"
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	CommunicationRequestHTTP  = communicationPrefix + "request_http"
 | 
			
		||||
	CommunicationResponseHTTP = communicationPrefix + "response_http"
 | 
			
		||||
	CommunicationWebhookTNC   = communicationPrefix + "webhook_tnc"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
package subject
 | 
			
		||||
 | 
			
		||||
const warehousePrefix = "warehouse_"
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	WarehouseCreateOutboundRequest         = warehousePrefix + "create_outbound_request"
 | 
			
		||||
	WarehouseUpdateOutboundRequestLogistic = warehousePrefix + "update_outbound_request_logistic_info"
 | 
			
		||||
	WarehouseCancelOutboundRequest         = warehousePrefix + "cancel_outbound_request"
 | 
			
		||||
	WarehouseGetConfiguration              = warehousePrefix + "get_configuration"
 | 
			
		||||
)
 | 
			
		||||
		Loading…
	
		Reference in New Issue