mirror of
https://github.com/retailcrm/api-client-go.git
synced 2024-11-25 06:16:03 +03:00
loyalty bonus operations methods
This commit is contained in:
parent
f6b4a15f78
commit
5e45297368
94
client.go
94
client.go
@ -5545,3 +5545,97 @@ func (c *Client) CustomFieldEdit(customFields CustomFields) (CustomResponse, int
|
|||||||
|
|
||||||
return resp, status, nil
|
return resp, status, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BonusOperations returns history of the bonus account for all participations
|
||||||
|
//
|
||||||
|
// For more information see https://docs.retailcrm.ru/Developers/API/APIVersions/APIv5#get--api-v5-loyalty-bonus-operations
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
//
|
||||||
|
// var client = retailcrm.New("https://demo.url", "09jIJ")
|
||||||
|
//
|
||||||
|
// data, status, err := client.BonusOperations(retailcrm.BonusOperationsRequest{
|
||||||
|
// Filter: BonusOperationsFilter{
|
||||||
|
// LoyaltyId: []int{123, 456},
|
||||||
|
// },
|
||||||
|
// Limit: 10,
|
||||||
|
// Cursor: "123456",
|
||||||
|
// })
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// if apiErr, ok := retailcrm.AsAPIError(err); ok {
|
||||||
|
// log.Fatalf("http status: %d, %s", status, apiErr.String())
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// log.Fatalf("http status: %d, error: %s", status, err)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// for _, value := range data.Customers {
|
||||||
|
// log.Printf("%v\n", value)
|
||||||
|
// }
|
||||||
|
func (c *Client) BonusOperations(parameters BonusOperationsRequest) (BonusOperationsResponse, int, error) {
|
||||||
|
var resp BonusOperationsResponse
|
||||||
|
|
||||||
|
params, _ := query.Values(parameters)
|
||||||
|
data, status, err := c.GetRequest(fmt.Sprintf("/loyalty/bonus/operations?%s", params.Encode()))
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return resp, status, err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = json.Unmarshal(data, &resp)
|
||||||
|
if err != nil {
|
||||||
|
return resp, status, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp, status, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// AccountBonusOperations returns history of the bonus account for a specific participation
|
||||||
|
//
|
||||||
|
// For more information see https://docs.retailcrm.ru/Developers/API/APIVersions/APIv5#get--api-v5-loyalty-account-id-bonus-operations
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
//
|
||||||
|
// var client = retailcrm.New("https://demo.url", "09jIJ")
|
||||||
|
//
|
||||||
|
// data, status, err := client.AccountBonusOperations(retailcrm.AccountBonusOperationsRequest{
|
||||||
|
// Filter: AccountBonusOperationsFilter{
|
||||||
|
// CreatedAtFrom: "2012-12-12",
|
||||||
|
// CreatedAtTo: "2012-12-13",
|
||||||
|
// },
|
||||||
|
// Limit: 10,
|
||||||
|
// Page: 3,
|
||||||
|
// })
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// if apiErr, ok := retailcrm.AsAPIError(err); ok {
|
||||||
|
// log.Fatalf("http status: %d, %s", status, apiErr.String())
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// log.Fatalf("http status: %d, error: %s", status, err)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// for _, value := range data.Customers {
|
||||||
|
// log.Printf("%v\n", value)
|
||||||
|
// }
|
||||||
|
func (c *Client) AccountBonusOperations(id int, parameters AccountBonusOperationsRequest) (BonusOperationsResponse, int, error) {
|
||||||
|
var resp BonusOperationsResponse
|
||||||
|
|
||||||
|
params, _ := query.Values(parameters)
|
||||||
|
data, status, err := c.GetRequest(fmt.Sprintf(
|
||||||
|
"/loyalty/account/%v/bonus/operations?%s",
|
||||||
|
id, params.Encode(),
|
||||||
|
))
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return resp, status, err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = json.Unmarshal(data, &resp)
|
||||||
|
if err != nil {
|
||||||
|
return resp, status, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp, status, nil
|
||||||
|
}
|
||||||
|
134
client_test.go
134
client_test.go
@ -6659,3 +6659,137 @@ func TestClient_UpdateScopes_Fail(t *testing.T) {
|
|||||||
t.Error(successFail)
|
t.Error(successFail)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestClient_BonusOperations(t *testing.T) {
|
||||||
|
defer gock.Off()
|
||||||
|
|
||||||
|
gock.New(crmURL).
|
||||||
|
Get("/api/v5/loyalty/bonus/operations").
|
||||||
|
MatchParam("filter[loyalties][]", "1").
|
||||||
|
MatchParam("filter[loyalties][]", "3").
|
||||||
|
MatchParam("cursor", "qwe").
|
||||||
|
MatchParam("limit", "3").
|
||||||
|
Reply(200).
|
||||||
|
BodyString(`{"success": true}`)
|
||||||
|
|
||||||
|
c := client()
|
||||||
|
|
||||||
|
data, status, err := c.BonusOperations(BonusOperationsRequest{
|
||||||
|
Filter: BonusOperationsFilter{
|
||||||
|
Loyalties: []int{1, 3},
|
||||||
|
},
|
||||||
|
Cursor: "qwe",
|
||||||
|
Limit: 3,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("%v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if status >= http.StatusBadRequest {
|
||||||
|
t.Logf("%v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if data.Success != true {
|
||||||
|
t.Logf("%v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestClient_BonusOperations_Fail(t *testing.T) {
|
||||||
|
defer gock.Off()
|
||||||
|
|
||||||
|
gock.New(crmURL).
|
||||||
|
Get("/api/v5/loyalty/bonus/operations").
|
||||||
|
MatchParam("filter[loyalties][]", "1").
|
||||||
|
MatchParam("filter[loyalties][]", "3").
|
||||||
|
MatchParam("cursor", "qwe").
|
||||||
|
MatchParam("limit", "3").
|
||||||
|
Reply(400).
|
||||||
|
BodyString(`{"success": false,"errorMsg": "Internal Server Error"}`)
|
||||||
|
|
||||||
|
c := client()
|
||||||
|
|
||||||
|
data, _, err := c.BonusOperations(BonusOperationsRequest{
|
||||||
|
Filter: BonusOperationsFilter{
|
||||||
|
Loyalties: []int{1, 3},
|
||||||
|
},
|
||||||
|
Cursor: "qwe",
|
||||||
|
Limit: 3,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
t.Error("Error must be return")
|
||||||
|
}
|
||||||
|
|
||||||
|
if data.Success != false {
|
||||||
|
t.Error(successFail)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestClient_AccountBonusOperations(t *testing.T) {
|
||||||
|
defer gock.Off()
|
||||||
|
|
||||||
|
gock.New(crmURL).
|
||||||
|
Get("/api/v5/loyalty/account/123/bonus/operations").
|
||||||
|
MatchParam("filter[createdAtFrom]", "2012-12-12").
|
||||||
|
MatchParam("filter[createdAtTo]", "2012-12-13").
|
||||||
|
MatchParam("page", "3").
|
||||||
|
MatchParam("limit", "10").
|
||||||
|
Reply(200).
|
||||||
|
BodyString(`{"success": true}`)
|
||||||
|
|
||||||
|
c := client()
|
||||||
|
|
||||||
|
data, status, err := c.AccountBonusOperations(123, AccountBonusOperationsRequest{
|
||||||
|
Filter: AccountBonusOperationsFilter{
|
||||||
|
CreatedAtFrom: "2012-12-12",
|
||||||
|
CreatedAtTo: "2012-12-13",
|
||||||
|
},
|
||||||
|
Page: 3,
|
||||||
|
Limit: 10,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("%v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if status >= http.StatusBadRequest {
|
||||||
|
t.Logf("%v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if data.Success != true {
|
||||||
|
t.Logf("%v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestClient_AccountBonusOperations_Fail(t *testing.T) {
|
||||||
|
defer gock.Off()
|
||||||
|
|
||||||
|
gock.New(crmURL).
|
||||||
|
Get("/api/v5/loyalty/account/123/bonus/operations").
|
||||||
|
MatchParam("filter[createdAtFrom]", "2012-12-12").
|
||||||
|
MatchParam("filter[createdAtTo]", "2012-12-13").
|
||||||
|
MatchParam("page", "3").
|
||||||
|
MatchParam("limit", "10").
|
||||||
|
Reply(400).
|
||||||
|
BodyString(`{"success": false,"errorMsg": "Internal Server Error"}`)
|
||||||
|
|
||||||
|
c := client()
|
||||||
|
|
||||||
|
data, _, err := c.AccountBonusOperations(123, AccountBonusOperationsRequest{
|
||||||
|
Filter: AccountBonusOperationsFilter{
|
||||||
|
CreatedAtFrom: "2012-12-12",
|
||||||
|
CreatedAtTo: "2012-12-13",
|
||||||
|
},
|
||||||
|
Page: 3,
|
||||||
|
Limit: 10,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
t.Error("Error must be return")
|
||||||
|
}
|
||||||
|
|
||||||
|
if data.Success != false {
|
||||||
|
t.Error(successFail)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
10
filters.go
10
filters.go
@ -427,3 +427,13 @@ type CustomDictionariesFilter struct {
|
|||||||
Name string `url:"name,omitempty"`
|
Name string `url:"name,omitempty"`
|
||||||
Code string `url:"code,omitempty"`
|
Code string `url:"code,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BonusOperationsFilter type.
|
||||||
|
type BonusOperationsFilter struct {
|
||||||
|
Loyalties []int `url:"loyalties,omitempty,brackets"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type AccountBonusOperationsFilter struct {
|
||||||
|
CreatedAtFrom string `url:"createdAtFrom,omitempty"`
|
||||||
|
CreatedAtTo string `url:"createdAtTo,omitempty"`
|
||||||
|
}
|
||||||
|
14
request.go
14
request.go
@ -232,6 +232,20 @@ type ConnectRequest struct {
|
|||||||
URL string `json:"systemUrl"`
|
URL string `json:"systemUrl"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BonusOperationsRequest type.
|
||||||
|
type BonusOperationsRequest struct {
|
||||||
|
Filter BonusOperationsFilter `url:"filter,omitempty"`
|
||||||
|
Limit int `url:"limit,omitempty"`
|
||||||
|
Cursor string `url:"cursor,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// AccountBonusOperationsRequest type.
|
||||||
|
type AccountBonusOperationsRequest struct {
|
||||||
|
Filter AccountBonusOperationsFilter `url:"filter,omitempty"`
|
||||||
|
Limit int `url:"limit,omitempty"`
|
||||||
|
Page int `url:"page,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
// SystemURL returns system URL from the connection request without trailing slash.
|
// SystemURL returns system URL from the connection request without trailing slash.
|
||||||
func (r ConnectRequest) SystemURL() string {
|
func (r ConnectRequest) SystemURL() string {
|
||||||
if r.URL == "" {
|
if r.URL == "" {
|
||||||
|
@ -550,3 +550,10 @@ func NewConnectResponse(accountURL string) ConnectResponse {
|
|||||||
AccountURL: accountURL,
|
AccountURL: accountURL,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BonusOperationsResponse type.
|
||||||
|
type BonusOperationsResponse struct {
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Pagination *Pagination `json:"pagination,omitempty"`
|
||||||
|
BonusOperations []BonusOperation `json:"bonusOperations,omitempty"`
|
||||||
|
}
|
||||||
|
39
types.go
39
types.go
@ -1186,3 +1186,42 @@ type Tag struct {
|
|||||||
Color string `json:"color,omitempty"`
|
Color string `json:"color,omitempty"`
|
||||||
Attached bool `json:"attached,omitempty"`
|
Attached bool `json:"attached,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BonusOperation struct.
|
||||||
|
type BonusOperation struct {
|
||||||
|
Type string `json:"type,omitempty"`
|
||||||
|
CreatedAt string `json:"createdAt,omitempty"`
|
||||||
|
Amount float32 `json:"amount,omitempty"`
|
||||||
|
Order OperationOrder `json:"order"`
|
||||||
|
Bonus OperationBonus `json:"bonus"`
|
||||||
|
Event OperationEvent `json:"event"`
|
||||||
|
LoyaltyAccount OperationLoyaltyAccount `json:"loyaltyAccount"`
|
||||||
|
Loyalty OperationLoyalty `json:"loyalty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperationOrder struct.
|
||||||
|
type OperationOrder struct {
|
||||||
|
ID int `json:"id,omitempty"`
|
||||||
|
ExternalID string `json:"externalId,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperationBonus struct.
|
||||||
|
type OperationBonus struct {
|
||||||
|
ActivationDate string `json:"activationDate,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperationEvent struct.
|
||||||
|
type OperationEvent struct {
|
||||||
|
ID int `json:"id,omitempty"`
|
||||||
|
Type string `json:"type,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperationLoyaltyAccount struct.
|
||||||
|
type OperationLoyaltyAccount struct {
|
||||||
|
ID int `json:"id,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperationLoyalty struct.
|
||||||
|
type OperationLoyalty struct {
|
||||||
|
ID int `json:"id,omitempty"`
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user