Skip to content

Commit b6dbb3a

Browse files
author
Tanner Oakes
committed
add support for OffersV2
1 parent cad6a32 commit b6dbb3a

6 files changed

Lines changed: 93 additions & 10 deletions

File tree

entity/entity.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,31 @@ type ConditionInfo struct {
5959
SubCondition *ConditionInfo `json:",omitempty"`
6060
}
6161

62+
type ConditionInfoV2 struct {
63+
ConditionNote string `json:",omitempty"`
64+
Value string `json:",omitempty"`
65+
SubCondition string `json:",omitempty"`
66+
}
67+
6268
type GenPriceInfo struct {
6369
Amount float64 `json:",omitempty"`
6470
Currency string `json:",omitempty"`
6571
DisplayAmount string `json:",omitempty"`
6672
PricePerUnit float64 `json:",omitempty"`
6773
}
6874

75+
type Money struct {
76+
Amount float64 `json:",omitempty"`
77+
Currency string `json:",omitempty"`
78+
DisplayAmount string `json:",omitempty"`
79+
}
80+
81+
type SavingBasis struct {
82+
Money *Money `json:",omitempty"`
83+
SavingBasisType string `json:",omitempty"`
84+
SavingBasisTypeLabel string `json:",omitempty"`
85+
}
86+
6987
type VariationAttribute struct {
7088
Name string `json:",omitempty"`
7189
Value string `json:",omitempty"`
@@ -242,6 +260,44 @@ type Item struct {
242260
OfferCount int
243261
} `json:",omitempty"`
244262
} `json:",omitempty"`
263+
OffersV2 *struct {
264+
Listings *[]struct {
265+
Availability *struct {
266+
MaxOrderQuantity int
267+
Message string
268+
MinOrderQuantity int
269+
Type string
270+
} `json:",omitempty"`
271+
Condition *ConditionInfoV2 `json:",omitempty"`
272+
DealDetails *struct {
273+
AccessType string `json:",omitempty"`
274+
Badge string `json:",omitempty"`
275+
EarlyAccessDurationInMilliseconds int64 `json:",omitempty"`
276+
EndTime string `json:",omitempty"`
277+
PercentClaimed string `json:",omitempty"`
278+
StartTime string `json:",omitempty"`
279+
} `json:",omitempty"`
280+
IsBuyboxWinner bool
281+
LoyaltyPoints *struct {
282+
Points int
283+
} `json:",omitempty"`
284+
MerchantInfo *struct {
285+
ID string `json:"Id"`
286+
Name string
287+
} `json:",omitempty"`
288+
Price *struct {
289+
Money *Money `json:",omitempty"`
290+
PricePerUnit *Money `json:",omitempty"`
291+
SavingBasis *SavingBasis `json:",omitempty"`
292+
Savings *struct {
293+
Money *Money `json:",omitempty"`
294+
Percentage int
295+
} `json:",omitempty"`
296+
} `json:",omitempty"`
297+
Type string `json:",omitempty"`
298+
ViolateMAP bool
299+
} `json:",omitempty"`
300+
} `json:",omitempty"`
245301
}
246302

247303
type Refinement struct {

query/getitems.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import (
44
paapi5 "github.com/goark/pa-api"
55
)
66

7-
//GetItems type is embedded Query for GetItems operation in PA-API v5
7+
// GetItems type is embedded Query for GetItems operation in PA-API v5
88
type GetItems struct {
99
Query
1010
}
1111

1212
var _ paapi5.Query = (*GetItems)(nil) //GetItems is compatible with paapi5.Query interface
1313

14-
//New creates new GetItems instance
14+
// New creates new GetItems instance
1515
func NewGetItems(marketplace, partnerTag, partnerType string) *GetItems {
1616
q := &GetItems{*(New(paapi5.GetItems))}
1717
q.Request(Marketplace, marketplace).Request(PartnerTag, partnerTag).Request(PartnerType, partnerType)
@@ -31,50 +31,56 @@ var requestsOfGetItems = []RequestFilter{
3131
PartnerType,
3232
}
3333

34-
//RequestFilters adds RequestFilter to Query instance
34+
// RequestFilters adds RequestFilter to Query instance
3535
func (q *GetItems) Request(request RequestFilter, value interface{}) *GetItems {
3636
if request.findIn(requestsOfGetItems) {
3737
q.With().RequestFilters(RequestMap{request: value})
3838
}
3939
return q
4040
}
4141

42-
//ASINs sets ItemIds in GetItems instance
42+
// ASINs sets ItemIds in GetItems instance
4343
func (q *GetItems) ASINs(itms []string) *GetItems {
4444
return q.Request(ItemIds, itms).Request(ItemIdType, "ASIN")
4545
}
4646

47-
//EnableBrowseNodeInfo sets the resource of BrowseNodeInfo
47+
// EnableBrowseNodeInfo sets the resource of BrowseNodeInfo
4848
func (q *GetItems) EnableBrowseNodeInfo() *GetItems {
4949
q.With().BrowseNodeInfo()
5050
return q
5151
}
5252

53-
//EnableImages sets the resource of Images
53+
// EnableImages sets the resource of Images
5454
func (q *GetItems) EnableImages() *GetItems {
5555
q.With().Images()
5656
return q
5757
}
5858

59-
//EnableItemInfo sets the resource of ItemInfo
59+
// EnableItemInfo sets the resource of ItemInfo
6060
func (q *GetItems) EnableItemInfo() *GetItems {
6161
q.With().ItemInfo()
6262
return q
6363
}
6464

65-
//EnableOffers sets the resource of Offers
65+
// EnableOffers sets the resource of Offers
6666
func (q *GetItems) EnableOffers() *GetItems {
6767
q.With().Offers()
6868
return q
6969
}
7070

71-
//EnableParentASIN sets the resource of ParentASIN
71+
// EnableOffersV2 sets the resource of OffersV2
72+
func (q *GetItems) EnableOffersV2() *GetItems {
73+
q.With().OffersV2()
74+
return q
75+
}
76+
77+
// EnableParentASIN sets the resource of ParentASIN
7278
func (q *GetItems) EnableParentASIN() *GetItems {
7379
q.With().ParentASIN()
7480
return q
7581
}
7682

77-
//EnableCustomerReviews sets the resource of CustomerReviews
83+
// EnableCustomerReviews sets the resource of CustomerReviews
7884
func (q *GetItems) EnableCustomerReviews() *GetItems {
7985
q.With().CustomerReviews()
8086
return q

query/getitems_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ func TestResourcesInGetItems(t *testing.T) {
8686
{q: NewGetItems("", "", "").EnableImages(), str: `{"Operation":"GetItems","Resources":["Images.Primary.Small","Images.Primary.Medium","Images.Primary.Large","Images.Variants.Small","Images.Variants.Medium","Images.Variants.Large"]}`},
8787
{q: NewGetItems("", "", "").EnableItemInfo(), str: `{"Operation":"GetItems","Resources":["ItemInfo.ByLineInfo","ItemInfo.ContentInfo","ItemInfo.ContentRating","ItemInfo.Classifications","ItemInfo.ExternalIds","ItemInfo.Features","ItemInfo.ManufactureInfo","ItemInfo.ProductInfo","ItemInfo.TechnicalInfo","ItemInfo.Title","ItemInfo.TradeInInfo"]}`},
8888
{q: NewGetItems("", "", "").EnableOffers(), str: `{"Operation":"GetItems","Resources":["Offers.Listings.Availability.MaxOrderQuantity","Offers.Listings.Availability.Message","Offers.Listings.Availability.MinOrderQuantity","Offers.Listings.Availability.Type","Offers.Listings.Condition","Offers.Listings.Condition.SubCondition","Offers.Listings.DeliveryInfo.IsAmazonFulfilled","Offers.Listings.DeliveryInfo.IsFreeShippingEligible","Offers.Listings.DeliveryInfo.IsPrimeEligible","Offers.Listings.DeliveryInfo.ShippingCharges","Offers.Listings.IsBuyBoxWinner","Offers.Listings.LoyaltyPoints.Points","Offers.Listings.MerchantInfo","Offers.Listings.Price","Offers.Listings.ProgramEligibility.IsPrimeExclusive","Offers.Listings.ProgramEligibility.IsPrimePantry","Offers.Listings.Promotions","Offers.Listings.SavingBasis","Offers.Summaries.HighestPrice","Offers.Summaries.LowestPrice","Offers.Summaries.OfferCount"]}`},
89+
{q: NewGetItems("", "", "").EnableOffersV2(), str: `{"Operation":"GetItems","Resources":["OffersV2.Listings.Availability","OffersV2.Listings.Condition","OffersV2.Listings.DealDetails","OffersV2.Listings.IsBuyBoxWinner","OffersV2.Listings.LoyaltyPoints","OffersV2.Listings.MerchantInfo","OffersV2.Listings.Price","OffersV2.Listings.Type"]}`},
8990
{q: NewGetItems("", "", "").EnableParentASIN(), str: `{"Operation":"GetItems","Resources":["ParentASIN"]}`},
9091
{q: NewGetItems("", "", "").EnableCustomerReviews(), str: `{"Operation":"GetItems","Resources":["CustomerReviews.Count","CustomerReviews.StarRating"]}`},
9192
}

query/query.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,12 @@ func (q *Query) Offers() *Query {
102102
return q
103103
}
104104

105+
// OffersV2 sets the resource of OffersV2
106+
func (q *Query) OffersV2() *Query {
107+
q.enableResources[resourceOffersV2] = true
108+
return q
109+
}
110+
105111
// SearchRefinements sets the resource of SearchRefinements
106112
func (q *Query) SearchRefinements() *Query {
107113
q.enableResources[resourceSearchRefinements] = true

query/query_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ func TestResources(t *testing.T) {
188188
{q: empty.With().Images(), str: `{"Operation":"","Resources":["Images.Primary.Small","Images.Primary.Medium","Images.Primary.Large","Images.Variants.Small","Images.Variants.Medium","Images.Variants.Large"]}`},
189189
{q: empty.With().ItemInfo(), str: `{"Operation":"","Resources":["ItemInfo.ByLineInfo","ItemInfo.ContentInfo","ItemInfo.ContentRating","ItemInfo.Classifications","ItemInfo.ExternalIds","ItemInfo.Features","ItemInfo.ManufactureInfo","ItemInfo.ProductInfo","ItemInfo.TechnicalInfo","ItemInfo.Title","ItemInfo.TradeInInfo"]}`},
190190
{q: empty.With().Offers(), str: `{"Operation":"","Resources":["Offers.Listings.Availability.MaxOrderQuantity","Offers.Listings.Availability.Message","Offers.Listings.Availability.MinOrderQuantity","Offers.Listings.Availability.Type","Offers.Listings.Condition","Offers.Listings.Condition.SubCondition","Offers.Listings.DeliveryInfo.IsAmazonFulfilled","Offers.Listings.DeliveryInfo.IsFreeShippingEligible","Offers.Listings.DeliveryInfo.IsPrimeEligible","Offers.Listings.DeliveryInfo.ShippingCharges","Offers.Listings.IsBuyBoxWinner","Offers.Listings.LoyaltyPoints.Points","Offers.Listings.MerchantInfo","Offers.Listings.Price","Offers.Listings.ProgramEligibility.IsPrimeExclusive","Offers.Listings.ProgramEligibility.IsPrimePantry","Offers.Listings.Promotions","Offers.Listings.SavingBasis","Offers.Summaries.HighestPrice","Offers.Summaries.LowestPrice","Offers.Summaries.OfferCount"]}`},
191+
{q: empty.With().OffersV2(), str: `{"Operation":"","Resources":["OffersV2.Listings.Availability","OffersV2.Listings.Condition","OffersV2.Listings.DealDetails","OffersV2.Listings.IsBuyBoxWinner","OffersV2.Listings.LoyaltyPoints","OffersV2.Listings.MerchantInfo","OffersV2.Listings.Price","OffersV2.Listings.Type"]}`},
191192
{q: empty.With().SearchRefinements(), str: `{"Operation":"","Resources":["SearchRefinements"]}`},
192193
{q: empty.With().ParentASIN(), str: `{"Operation":"","Resources":["ParentASIN"]}`},
193194
}

query/resources.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const (
77
resourceImages //Images resource
88
resourceItemInfo //ItemInfo resource
99
resourceOffers //Offers resource
10+
resourceOffersV2 //OffersV2 resource
1011
resourceSearchRefinements //SearchRefinements resource
1112
resourceParentASIN //ParentASIN resource
1213
resourceCustomerReviews //CustomerReviews resource
@@ -69,6 +70,17 @@ var (
6970
"Offers.Summaries.LowestPrice",
7071
"Offers.Summaries.OfferCount",
7172
}
73+
//OffersV2 resource
74+
resourcesOffersV2 = []string{
75+
"OffersV2.Listings.Availability",
76+
"OffersV2.Listings.Condition",
77+
"OffersV2.Listings.DealDetails",
78+
"OffersV2.Listings.IsBuyBoxWinner",
79+
"OffersV2.Listings.LoyaltyPoints",
80+
"OffersV2.Listings.MerchantInfo",
81+
"OffersV2.Listings.Price",
82+
"OffersV2.Listings.Type",
83+
}
7284
//SearchRefinements resource
7385
resourcesSearchRefinements = []string{
7486
"SearchRefinements",
@@ -100,6 +112,7 @@ var (
100112
resourceImages: resourcesImages, //Images resource
101113
resourceItemInfo: resourcesItemInfo, //ItemInfo resource
102114
resourceOffers: resourcesOffers, //Offers resource
115+
resourceOffersV2: resourcesOffersV2, //OffersV2 resource
103116
resourceSearchRefinements: resourcesSearchRefinements, //SearchRefinements resource
104117
resourceParentASIN: resourcesParentASIN, //ParentASIN resource
105118
resourceCustomerReviews: resourcesCustomerReviews, //CustomerReviews resource

0 commit comments

Comments
 (0)