Skip to content

Commit 06c57de

Browse files
authored
Merge pull request #11 from webtaken/update-subscriptions-object
Updated subscriptions object
2 parents 8d8f3cf + 2d85b57 commit 06c57de

5 files changed

Lines changed: 248 additions & 26 deletions

File tree

internal/stubs/subscriptions.go

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ func SubscriptionGetResponse() []byte {
1515
"id": "1",
1616
"attributes": {
1717
"store_id": 1,
18+
"customer_id": 1,
1819
"order_id": 1,
1920
"order_item_id": 1,
2021
"product_id": 1,
@@ -25,10 +26,20 @@ func SubscriptionGetResponse() []byte {
2526
"user_email": "gernser@yahoo.com",
2627
"status": "active",
2728
"status_formatted": "Active",
29+
"card_brand": "visa",
30+
"card_last_four": "42424",
2831
"pause": null,
2932
"cancelled": false,
3033
"trial_ends_at": null,
3134
"billing_anchor": 12,
35+
"first_subscription_item": {
36+
"id": 1,
37+
"subscription_id": 1,
38+
"price_id": 1,
39+
"quantity": 5,
40+
"created_at": "2021-08-11T13:47:28.000000Z",
41+
"updated_at": "2021-08-11T13:47:28.000000Z"
42+
},
3243
"urls": {
3344
"update_payment_method": "https://app.lemonsqueezy.com/my-orders/2ba92a4e-a00a-45d2-a128-16856ffa8cdf/subscription/8/update-payment-method?expires=1666869343&signature=9985e3bf9007840aeb3951412be475abc17439c449c1af3e56e08e45e1345413"
3445
},
@@ -45,6 +56,12 @@ func SubscriptionGetResponse() []byte {
4556
"self": "https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/store"
4657
}
4758
},
59+
"customer": {
60+
"links": {
61+
"related": "https://api.lemonsqueezy.com/v1/subscriptions/1/customer",
62+
"self": "https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/customer"
63+
}
64+
},
4865
"order": {
4966
"links": {
5067
"related": "https://api.lemonsqueezy.com/v1/subscriptions/1/order",
@@ -68,6 +85,18 @@ func SubscriptionGetResponse() []byte {
6885
"related": "https://api.lemonsqueezy.com/v1/subscriptions/1/variant",
6986
"self": "https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/variant"
7087
}
88+
},
89+
"subscription-items": {
90+
"links": {
91+
"related": "https://api.lemonsqueezy.com/v1/subscriptions/1/subscription-items",
92+
"self": "https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/subscription-items"
93+
}
94+
},
95+
"subscription-invoices": {
96+
"links": {
97+
"related": "https://api.lemonsqueezy.com/v1/subscriptions/1/subscription-invoices",
98+
"self": "https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/subscription-invoices"
99+
}
71100
}
72101
},
73102
"links": {
@@ -93,6 +122,7 @@ func SubscriptionUpdateResponse() []byte {
93122
"id": "1",
94123
"attributes": {
95124
"store_id": 1,
125+
"customer_id": 1,
96126
"order_id": 1,
97127
"order_item_id": 1,
98128
"product_id": 9,
@@ -107,6 +137,14 @@ func SubscriptionUpdateResponse() []byte {
107137
"cancelled": false,
108138
"trial_ends_at": null,
109139
"billing_anchor": 29,
140+
"first_subscription_item": {
141+
"id": 1,
142+
"subscription_id": 1,
143+
"price_id": 1,
144+
"quantity": 5,
145+
"created_at": "2021-08-11T13:47:28.000000Z",
146+
"updated_at": "2021-08-11T13:47:28.000000Z"
147+
},
110148
"urls": {
111149
"update_payment_method": "https://app.lemonsqueezy.com/my-orders/2ba92a4e-a00a-45d2-a128-16856ffa8cdf/subscription/8/update-payment-method?expires=1666869343&signature=9985e3bf9007840aeb3951412be475abc17439c449c1af3e56e08e45e1345413"
112150
},
@@ -148,6 +186,7 @@ func SubscriptionsListResponse() []byte {
148186
"id":"1",
149187
"attributes":{
150188
"store_id":1,
189+
"customer_id": 1,
151190
"order_id":1,
152191
"order_item_id":1,
153192
"product_id":1,
@@ -162,6 +201,14 @@ func SubscriptionsListResponse() []byte {
162201
"cancelled":false,
163202
"trial_ends_at":null,
164203
"billing_anchor":12,
204+
"first_subscription_item": {
205+
"id": 1,
206+
"subscription_id": 1,
207+
"price_id": 1,
208+
"quantity": 5,
209+
"created_at": "2021-08-11T13:47:28.000000Z",
210+
"updated_at": "2021-08-11T13:47:28.000000Z"
211+
},
165212
"urls":{
166213
"update_payment_method":"https://app.lemonsqueezy.com/my-orders/2ba92a4e-a00a-45d2-a128-16856ffa8cdf/subscription/8/update-payment-method?expires=1666869343&signature=9985e3bf9007840aeb3951412be475abc17439c449c1af3e56e08e45e1345413"
167214
},
@@ -178,6 +225,12 @@ func SubscriptionsListResponse() []byte {
178225
"self":"https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/store"
179226
}
180227
},
228+
"customer": {
229+
"links": {
230+
"related": "https://api.lemonsqueezy.com/v1/subscriptions/1/customer",
231+
"self": "https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/customer"
232+
}
233+
},
181234
"order":{
182235
"links":{
183236
"related":"https://api.lemonsqueezy.com/v1/subscriptions/1/order",
@@ -201,6 +254,18 @@ func SubscriptionsListResponse() []byte {
201254
"related":"https://api.lemonsqueezy.com/v1/subscriptions/1/variant",
202255
"self":"https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/variant"
203256
}
257+
},
258+
"subscription-items": {
259+
"links": {
260+
"related": "https://api.lemonsqueezy.com/v1/subscriptions/1/subscription-items",
261+
"self": "https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/subscription-items"
262+
}
263+
},
264+
"subscription-invoices": {
265+
"links": {
266+
"related": "https://api.lemonsqueezy.com/v1/subscriptions/1/subscription-invoices",
267+
"self": "https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/subscription-invoices"
268+
}
204269
}
205270
},
206271
"links":{
@@ -212,6 +277,7 @@ func SubscriptionsListResponse() []byte {
212277
"id":"2",
213278
"attributes":{
214279
"store_id":2,
280+
"customer_id": 2,
215281
"order_id":2,
216282
"order_item_id":2,
217283
"product_id":2,
@@ -226,6 +292,14 @@ func SubscriptionsListResponse() []byte {
226292
"cancelled":false,
227293
"trial_ends_at":null,
228294
"billing_anchor":13,
295+
"first_subscription_item": {
296+
"id": 2,
297+
"subscription_id": 2,
298+
"price_id": 2,
299+
"quantity": 5,
300+
"created_at": "2021-08-11T13:47:28.000000Z",
301+
"updated_at": "2021-08-11T13:47:28.000000Z"
302+
},
229303
"urls":{
230304
"update_payment_method":"https://app.lemonsqueezy.com/my-orders/2ba92a4e-a00a-45d2-a128-16856ffa8cdf/subscription/8/update-payment-method?expires=1666869343&signature=9985e3bf9007840aeb3951412be475abc17439c449c1af3e56e08e45e1345413"
231305
},
@@ -242,6 +316,12 @@ func SubscriptionsListResponse() []byte {
242316
"self":"https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/store"
243317
}
244318
},
319+
"customer": {
320+
"links": {
321+
"related": "https://api.lemonsqueezy.com/v1/subscriptions/1/customer",
322+
"self": "https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/customer"
323+
}
324+
},
245325
"order":{
246326
"links":{
247327
"related":"https://api.lemonsqueezy.com/v1/subscriptions/1/order",
@@ -265,6 +345,18 @@ func SubscriptionsListResponse() []byte {
265345
"related":"https://api.lemonsqueezy.com/v1/subscriptions/1/variant",
266346
"self":"https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/variant"
267347
}
348+
},
349+
"subscription-items": {
350+
"links": {
351+
"related": "https://api.lemonsqueezy.com/v1/subscriptions/1/subscription-items",
352+
"self": "https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/subscription-items"
353+
}
354+
},
355+
"subscription-invoices": {
356+
"links": {
357+
"related": "https://api.lemonsqueezy.com/v1/subscriptions/1/subscription-invoices",
358+
"self": "https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/subscription-invoices"
359+
}
268360
}
269361
},
270362
"links":{
@@ -291,6 +383,7 @@ func SubscriptionCancelResponse() []byte {
291383
"id": "1",
292384
"attributes": {
293385
"store_id": 1,
386+
"customer_id": 1,
294387
"order_id": 1,
295388
"order_item_id": 1,
296389
"product_id": 1,
@@ -305,6 +398,14 @@ func SubscriptionCancelResponse() []byte {
305398
"cancelled": true,
306399
"trial_ends_at": null,
307400
"billing_anchor": 12,
401+
"first_subscription_item": {
402+
"id": 1,
403+
"subscription_id": 1,
404+
"price_id": 1,
405+
"quantity": 5,
406+
"created_at": "2021-08-11T13:47:28.000000Z",
407+
"updated_at": "2021-08-11T13:47:28.000000Z"
408+
},
308409
"urls": {
309410
"update_payment_method": "https://app.lemonsqueezy.com/my-orders/2ba92a4e-a00a-45d2-a128-16856ffa8cdf/subscription/8/update-payment-method?expires=1666869343&signature=9985e3bf9007840aeb3951412be475abc17439c449c1af3e56e08e45e1345413"
310411
},
@@ -321,6 +422,12 @@ func SubscriptionCancelResponse() []byte {
321422
"self": "https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/store"
322423
}
323424
},
425+
"customer": {
426+
"links": {
427+
"related": "https://api.lemonsqueezy.com/v1/subscriptions/1/customer",
428+
"self": "https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/customer"
429+
}
430+
},
324431
"order": {
325432
"links": {
326433
"related": "https://api.lemonsqueezy.com/v1/subscriptions/1/order",
@@ -344,6 +451,18 @@ func SubscriptionCancelResponse() []byte {
344451
"related": "https://api.lemonsqueezy.com/v1/subscriptions/1/variant",
345452
"self": "https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/variant"
346453
}
454+
},
455+
"subscription-items": {
456+
"links": {
457+
"related": "https://api.lemonsqueezy.com/v1/subscriptions/1/subscription-items",
458+
"self": "https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/subscription-items"
459+
}
460+
},
461+
"subscription-invoices": {
462+
"links": {
463+
"related": "https://api.lemonsqueezy.com/v1/subscriptions/1/subscription-invoices",
464+
"self": "https://api.lemonsqueezy.com/v1/subscriptions/1/relationships/subscription-invoices"
465+
}
347466
}
348467
},
349468
"links": {

subscription_invoice.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package lemonsqueezy
33
import "time"
44

55
// SubscriptionInvoiceAttributes is the invoice for a subscription
6+
// https://docs.lemonsqueezy.com/api/subscription-invoices#the-subscription-invoice-object
67
type SubscriptionInvoiceAttributes struct {
78
StoreID int `json:"store_id"`
89
SubscriptionID int `json:"subscription_id"`

subscription_items.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package lemonsqueezy
2+
3+
import "time"
4+
5+
// In Lemon Squeezy A subscription item is an object that links a price to a subscription and also contains quantity information.
6+
// https://docs.lemonsqueezy.com/api/subscription-items#the-subscription-item-object
7+
type SubscriptionItem struct {
8+
ID int `json:"id"`
9+
SubscriptionID int `json:"subscription_id"`
10+
PriceID int `json:"price_id"`
11+
Quantity int `json:"quantity"`
12+
IsUsageBased bool `json:"is_usage_based"`
13+
CreatedAt time.Time `json:"created_at"`
14+
UpdatedAt time.Time `json:"updated_at"`
15+
}
16+
17+
// SubscriptionUpdateParams are parameters for updating a subscription
18+
type SubscriptionItemUpdateParams struct {
19+
ID string `json:"id"`
20+
Attributes SubscriptionItemUpdateParamsAttributes `json:"attributes"`
21+
}
22+
23+
// SubscriptionUpdateParamsAttributes are subscription update attributes
24+
type SubscriptionItemUpdateParamsAttributes struct {
25+
Quantity int `json:"quantity,omitempty"`
26+
}
27+
28+
// ApiResponseRelationshipsSubscription relationships of a subscription object
29+
type ApiResponseRelationshipsSubscriptionItem struct {
30+
Subscription ApiResponseLinks `json:"subscription"`
31+
Price ApiResponseLinks `json:"price"`
32+
UsageRecords ApiResponseLinks `json:"usage-records"`
33+
}
34+
35+
// SubscriptionItemApiResponse represents a subscription item api response
36+
type SubscriptionItemApiResponse = ApiResponse[SubscriptionItem, ApiResponseRelationshipsSubscriptionItem]
37+
38+
// SubscriptionItemsApiResponse represents a list of subscription items api responses
39+
type SubscriptionItemsApiResponse = ApiResponseList[SubscriptionItem, ApiResponseRelationshipsSubscriptionItem]

subscriptions.go

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,31 @@ import "time"
55
// Subscription is created when a subscription product is purchased and will bill the customer on a recurring basis.
66
// https://docs.lemonsqueezy.com/api/subscriptions#the-subscription-object
77
type Subscription struct {
8-
StoreID int `json:"store_id"`
9-
OrderID int `json:"order_id"`
10-
OrderItemID int `json:"order_item_id"`
11-
ProductID int `json:"product_id"`
12-
VariantID int `json:"variant_id"`
13-
ProductName string `json:"product_name"`
14-
VariantName string `json:"variant_name"`
15-
UserName string `json:"user_name"`
16-
UserEmail string `json:"user_email"`
17-
Status string `json:"status"`
18-
StatusFormatted string `json:"status_formatted"`
19-
Pause *SubscriptionPause `json:"pause"`
20-
Cancelled bool `json:"cancelled"`
21-
TrialEndsAt *time.Time `json:"trial_ends_at"`
22-
BillingAnchor int `json:"billing_anchor"`
23-
Urls SubscriptionURLs `json:"urls"`
24-
RenewsAt time.Time `json:"renews_at"`
25-
EndsAt *time.Time `json:"ends_at"`
26-
CreatedAt time.Time `json:"created_at"`
27-
UpdatedAt time.Time `json:"updated_at"`
28-
TestMode bool `json:"test_mode"`
8+
StoreID int `json:"store_id"`
9+
CustomerID int `json:"customer_id"`
10+
OrderID int `json:"order_id"`
11+
OrderItemID int `json:"order_item_id"`
12+
ProductID int `json:"product_id"`
13+
VariantID int `json:"variant_id"`
14+
ProductName string `json:"product_name"`
15+
VariantName string `json:"variant_name"`
16+
UserName string `json:"user_name"`
17+
UserEmail string `json:"user_email"`
18+
Status string `json:"status"`
19+
StatusFormatted string `json:"status_formatted"`
20+
CardBrand string `json:"card_brand"`
21+
CardLastFour string `json:"card_last_four"`
22+
Pause *SubscriptionPause `json:"pause"`
23+
Cancelled bool `json:"cancelled"`
24+
TrialEndsAt *time.Time `json:"trial_ends_at"`
25+
BillingAnchor int `json:"billing_anchor"`
26+
FirstSubscriptionItem *SubscriptionItem `json:"first_subscription_item"`
27+
Urls SubscriptionURLs `json:"urls"`
28+
RenewsAt time.Time `json:"renews_at"`
29+
EndsAt *time.Time `json:"ends_at"`
30+
CreatedAt time.Time `json:"created_at"`
31+
UpdatedAt time.Time `json:"updated_at"`
32+
TestMode bool `json:"test_mode"`
2933
}
3034

3135
// SubscriptionURLs is object of customer-facing URLs for managing the subscription.
@@ -58,11 +62,14 @@ type SubscriptionUpdateParamsAttributes struct {
5862

5963
// ApiResponseRelationshipsSubscription relationships of a subscription object
6064
type ApiResponseRelationshipsSubscription struct {
61-
Store ApiResponseLinks `json:"store"`
62-
Order ApiResponseLinks `json:"order"`
63-
OrderItem ApiResponseLinks `json:"order-item"`
64-
Product ApiResponseLinks `json:"product"`
65-
Variant ApiResponseLinks `json:"variant"`
65+
Store ApiResponseLinks `json:"store"`
66+
Customer ApiResponseLinks `json:"customer"`
67+
Order ApiResponseLinks `json:"order"`
68+
OrderItem ApiResponseLinks `json:"order-item"`
69+
Product ApiResponseLinks `json:"product"`
70+
Variant ApiResponseLinks `json:"variant"`
71+
SubscriptionItems ApiResponseLinks `json:"subscription-items"`
72+
SubscriptionInvoices ApiResponseLinks `json:"subscription-invoices"`
6673
}
6774

6875
// ApiResponseSubscription represents a subscription api response

0 commit comments

Comments
 (0)