Skip to content

Commit 74bbfc9

Browse files
authored
[DE-746] Major update
- Removed deprecated authentication scheme - Improved error handling, introduced error templates - Enabled additional model properties - Renamed `BulkComponentSPricePointAssignment` to `BulkComponentsPricePointAssignment` - Add query parameters for list subscription group proforma invoices - Use ProformaInvoiceStatus for list proforma invoices status query parameter - Added missing fields in the `Allocation` model - Added missing `404` errors for subscription components endpoints - Renamed components price points related models to match the proper camelCase style - Changed `includeNextProformaInvoice` param type from `String` to an enum - Add enums for proforma invoices and invoices properties: - Invoice Discount Source Type - Invoice Discount Type - Proforma Invoice Discount Source Type - Proforma Invoice Role - Proforma Invoice Status - Tax Source Type - Remove `ProformaTaxBreakout`, use `InvoiceTaxBreakout` instead - Make Proforma Invoice reuse `InvoiceConsolidationLevel` and `CollectionMethod` enums instead of strings - Remove ProformaInvoiceDiscountBreakout - use InvoiceDiscountBreakout instead - Add missing fields for ProformaInvoiceDiscount - Add tests for Proforma Invoices - Merge proforma invoice and preview proforma, add kind for invoice line item - Add kind to invoice line item - Add apply_on_subscription_expiration to Coupon models
2 parents c68a7d6 + 226dea9 commit 74bbfc9

File tree

234 files changed

+3553
-4611
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

234 files changed

+3553
-4611
lines changed

README.md

Lines changed: 110 additions & 116 deletions
Large diffs are not rendered by default.

advance_invoice_controller.go

Lines changed: 14 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package advancedbilling
33
import (
44
"context"
55
"fmt"
6+
"github.com/apimatic/go-core-runtime/https"
67
"github.com/apimatic/go-core-runtime/utilities"
78
"github.com/maxio-com/ab-golang-sdk/errors"
89
"github.com/maxio-com/ab-golang-sdk/models"
@@ -38,7 +39,11 @@ func (a *AdvanceInvoiceController) IssueAdvanceInvoice(
3839
"POST",
3940
fmt.Sprintf("/subscriptions/%v/advance_invoice/issue.json", subscriptionId),
4041
)
41-
req.Authenticate(true)
42+
req.Authenticate(NewAuth("BasicAuth"))
43+
req.AppendErrors(map[string]https.ErrorBuilder[error]{
44+
"404": {TemplatedMessage: "Not Found:'{$response.body}'"},
45+
"422": {TemplatedMessage: "HTTP Response Not OK. Status code: {$statusCode}. Response: '{$response.body}'.", Unmarshaller: errors.NewErrorListResponse},
46+
})
4247
req.Header("Content-Type", "application/json")
4348
if body != nil {
4449
req.Json(*body)
@@ -49,22 +54,8 @@ func (a *AdvanceInvoiceController) IssueAdvanceInvoice(
4954
if err != nil {
5055
return models.NewApiResponse(result, resp), err
5156
}
52-
err = validateResponse(*resp)
53-
if err != nil {
54-
return models.NewApiResponse(result, resp), err
55-
}
5657

5758
result, err = utilities.DecodeResults[models.Invoice](decoder)
58-
if err != nil {
59-
return models.NewApiResponse(result, resp), err
60-
}
61-
62-
if resp.StatusCode == 404 {
63-
err = errors.NewApiError(404, "Not Found")
64-
}
65-
if resp.StatusCode == 422 {
66-
err = errors.NewErrorListResponse(422, "Unprocessable Entity (WebDAV)")
67-
}
6859
return models.NewApiResponse(result, resp), err
6960
}
7061

@@ -82,26 +73,18 @@ func (a *AdvanceInvoiceController) ReadAdvanceInvoice(
8273
"GET",
8374
fmt.Sprintf("/subscriptions/%v/advance_invoice.json", subscriptionId),
8475
)
85-
req.Authenticate(true)
76+
req.Authenticate(NewAuth("BasicAuth"))
77+
req.AppendErrors(map[string]https.ErrorBuilder[error]{
78+
"404": {TemplatedMessage: "Not Found:'{$response.body}'"},
79+
})
8680

8781
var result models.Invoice
8882
decoder, resp, err := req.CallAsJson()
8983
if err != nil {
9084
return models.NewApiResponse(result, resp), err
9185
}
92-
err = validateResponse(*resp)
93-
if err != nil {
94-
return models.NewApiResponse(result, resp), err
95-
}
9686

9787
result, err = utilities.DecodeResults[models.Invoice](decoder)
98-
if err != nil {
99-
return models.NewApiResponse(result, resp), err
100-
}
101-
102-
if resp.StatusCode == 404 {
103-
err = errors.NewApiError(404, "Not Found")
104-
}
10588
return models.NewApiResponse(result, resp), err
10689
}
10790

@@ -121,7 +104,10 @@ func (a *AdvanceInvoiceController) VoidAdvanceInvoice(
121104
"POST",
122105
fmt.Sprintf("/subscriptions/%v/advance_invoice/void.json", subscriptionId),
123106
)
124-
req.Authenticate(true)
107+
req.Authenticate(NewAuth("BasicAuth"))
108+
req.AppendErrors(map[string]https.ErrorBuilder[error]{
109+
"404": {TemplatedMessage: "Not Found:'{$response.body}'"},
110+
})
125111
req.Header("Content-Type", "application/json")
126112
if body != nil {
127113
req.Json(*body)
@@ -132,18 +118,7 @@ func (a *AdvanceInvoiceController) VoidAdvanceInvoice(
132118
if err != nil {
133119
return models.NewApiResponse(result, resp), err
134120
}
135-
err = validateResponse(*resp)
136-
if err != nil {
137-
return models.NewApiResponse(result, resp), err
138-
}
139121

140122
result, err = utilities.DecodeResults[models.Invoice](decoder)
141-
if err != nil {
142-
return models.NewApiResponse(result, resp), err
143-
}
144-
145-
if resp.StatusCode == 404 {
146-
err = errors.NewApiError(404, "Not Found")
147-
}
148123
return models.NewApiResponse(result, resp), err
149124
}

api_exports_controller.go

Lines changed: 39 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package advancedbilling
33
import (
44
"context"
55
"fmt"
6+
"github.com/apimatic/go-core-runtime/https"
67
"github.com/apimatic/go-core-runtime/utilities"
78
"github.com/maxio-com/ab-golang-sdk/errors"
89
"github.com/maxio-com/ab-golang-sdk/models"
@@ -37,7 +38,10 @@ func (a *APIExportsController) ListExportedProformaInvoices(
3738
"GET",
3839
fmt.Sprintf("/api_exports/proforma_invoices/%v/rows.json", batchId),
3940
)
40-
req.Authenticate(true)
41+
req.Authenticate(NewAuth("BasicAuth"))
42+
req.AppendErrors(map[string]https.ErrorBuilder[error]{
43+
"404": {TemplatedMessage: "Not Found:'{$response.body}'"},
44+
})
4145
if perPage != nil {
4246
req.QueryParam("per_page", *perPage)
4347
}
@@ -50,19 +54,8 @@ func (a *APIExportsController) ListExportedProformaInvoices(
5054
if err != nil {
5155
return models.NewApiResponse(result, resp), err
5256
}
53-
err = validateResponse(*resp)
54-
if err != nil {
55-
return models.NewApiResponse(result, resp), err
56-
}
5757

5858
result, err = utilities.DecodeResults[[]models.ProformaInvoice](decoder)
59-
if err != nil {
60-
return models.NewApiResponse(result, resp), err
61-
}
62-
63-
if resp.StatusCode == 404 {
64-
err = errors.NewApiError(404, "Not Found")
65-
}
6659
return models.NewApiResponse(result, resp), err
6760
}
6861

@@ -83,7 +76,10 @@ func (a *APIExportsController) ListExportedInvoices(
8376
"GET",
8477
fmt.Sprintf("/api_exports/invoices/%v/rows.json", batchId),
8578
)
86-
req.Authenticate(true)
79+
req.Authenticate(NewAuth("BasicAuth"))
80+
req.AppendErrors(map[string]https.ErrorBuilder[error]{
81+
"404": {TemplatedMessage: "Not Found:'{$response.body}'"},
82+
})
8783
if perPage != nil {
8884
req.QueryParam("per_page", *perPage)
8985
}
@@ -96,19 +92,8 @@ func (a *APIExportsController) ListExportedInvoices(
9692
if err != nil {
9793
return models.NewApiResponse(result, resp), err
9894
}
99-
err = validateResponse(*resp)
100-
if err != nil {
101-
return models.NewApiResponse(result, resp), err
102-
}
10395

10496
result, err = utilities.DecodeResults[[]models.Invoice](decoder)
105-
if err != nil {
106-
return models.NewApiResponse(result, resp), err
107-
}
108-
109-
if resp.StatusCode == 404 {
110-
err = errors.NewApiError(404, "Not Found")
111-
}
11297
return models.NewApiResponse(result, resp), err
11398
}
11499

@@ -129,7 +114,10 @@ func (a *APIExportsController) ListExportedSubscriptions(
129114
"GET",
130115
fmt.Sprintf("/api_exports/subscriptions/%v/rows.json", batchId),
131116
)
132-
req.Authenticate(true)
117+
req.Authenticate(NewAuth("BasicAuth"))
118+
req.AppendErrors(map[string]https.ErrorBuilder[error]{
119+
"404": {TemplatedMessage: "Not Found:'{$response.body}'"},
120+
})
133121
if perPage != nil {
134122
req.QueryParam("per_page", *perPage)
135123
}
@@ -142,19 +130,8 @@ func (a *APIExportsController) ListExportedSubscriptions(
142130
if err != nil {
143131
return models.NewApiResponse(result, resp), err
144132
}
145-
err = validateResponse(*resp)
146-
if err != nil {
147-
return models.NewApiResponse(result, resp), err
148-
}
149133

150134
result, err = utilities.DecodeResults[[]models.Subscription](decoder)
151-
if err != nil {
152-
return models.NewApiResponse(result, resp), err
153-
}
154-
155-
if resp.StatusCode == 404 {
156-
err = errors.NewApiError(404, "Not Found")
157-
}
158135
return models.NewApiResponse(result, resp), err
159136
}
160137

@@ -167,28 +144,18 @@ func (a *APIExportsController) ExportProformaInvoices(ctx context.Context) (
167144
models.ApiResponse[models.BatchJobResponse],
168145
error) {
169146
req := a.prepareRequest(ctx, "POST", "/api_exports/proforma_invoices.json")
170-
req.Authenticate(true)
147+
req.Authenticate(NewAuth("BasicAuth"))
148+
req.AppendErrors(map[string]https.ErrorBuilder[error]{
149+
"404": {TemplatedMessage: "Not Found:'{$response.body}'"},
150+
"409": {TemplatedMessage: "HTTP Response Not OK. Status code: {$statusCode}. Response: '{$response.body}'.", Unmarshaller: errors.NewSingleErrorResponse},
151+
})
171152
var result models.BatchJobResponse
172153
decoder, resp, err := req.CallAsJson()
173154
if err != nil {
174155
return models.NewApiResponse(result, resp), err
175156
}
176-
err = validateResponse(*resp)
177-
if err != nil {
178-
return models.NewApiResponse(result, resp), err
179-
}
180157

181158
result, err = utilities.DecodeResults[models.BatchJobResponse](decoder)
182-
if err != nil {
183-
return models.NewApiResponse(result, resp), err
184-
}
185-
186-
if resp.StatusCode == 404 {
187-
err = errors.NewApiError(404, "Not Found")
188-
}
189-
if resp.StatusCode == 409 {
190-
err = errors.NewSingleErrorResponse(409, "Conflict")
191-
}
192159
return models.NewApiResponse(result, resp), err
193160
}
194161

@@ -200,28 +167,18 @@ func (a *APIExportsController) ExportInvoices(ctx context.Context) (
200167
models.ApiResponse[models.BatchJobResponse],
201168
error) {
202169
req := a.prepareRequest(ctx, "POST", "/api_exports/invoices.json")
203-
req.Authenticate(true)
170+
req.Authenticate(NewAuth("BasicAuth"))
171+
req.AppendErrors(map[string]https.ErrorBuilder[error]{
172+
"404": {TemplatedMessage: "Not Found:'{$response.body}'"},
173+
"409": {TemplatedMessage: "HTTP Response Not OK. Status code: {$statusCode}. Response: '{$response.body}'.", Unmarshaller: errors.NewSingleErrorResponse},
174+
})
204175
var result models.BatchJobResponse
205176
decoder, resp, err := req.CallAsJson()
206177
if err != nil {
207178
return models.NewApiResponse(result, resp), err
208179
}
209-
err = validateResponse(*resp)
210-
if err != nil {
211-
return models.NewApiResponse(result, resp), err
212-
}
213180

214181
result, err = utilities.DecodeResults[models.BatchJobResponse](decoder)
215-
if err != nil {
216-
return models.NewApiResponse(result, resp), err
217-
}
218-
219-
if resp.StatusCode == 404 {
220-
err = errors.NewApiError(404, "Not Found")
221-
}
222-
if resp.StatusCode == 409 {
223-
err = errors.NewSingleErrorResponse(409, "Conflict")
224-
}
225182
return models.NewApiResponse(result, resp), err
226183
}
227184

@@ -233,25 +190,17 @@ func (a *APIExportsController) ExportSubscriptions(ctx context.Context) (
233190
models.ApiResponse[models.BatchJobResponse],
234191
error) {
235192
req := a.prepareRequest(ctx, "POST", "/api_exports/subscriptions.json")
236-
req.Authenticate(true)
193+
req.Authenticate(NewAuth("BasicAuth"))
194+
req.AppendErrors(map[string]https.ErrorBuilder[error]{
195+
"409": {TemplatedMessage: "HTTP Response Not OK. Status code: {$statusCode}. Response: '{$response.body}'.", Unmarshaller: errors.NewSingleErrorResponse},
196+
})
237197
var result models.BatchJobResponse
238198
decoder, resp, err := req.CallAsJson()
239199
if err != nil {
240200
return models.NewApiResponse(result, resp), err
241201
}
242-
err = validateResponse(*resp)
243-
if err != nil {
244-
return models.NewApiResponse(result, resp), err
245-
}
246202

247203
result, err = utilities.DecodeResults[models.BatchJobResponse](decoder)
248-
if err != nil {
249-
return models.NewApiResponse(result, resp), err
250-
}
251-
252-
if resp.StatusCode == 409 {
253-
err = errors.NewSingleErrorResponse(409, "Conflict")
254-
}
255204
return models.NewApiResponse(result, resp), err
256205
}
257206

@@ -269,26 +218,18 @@ func (a *APIExportsController) ReadProformaInvoicesExport(
269218
"GET",
270219
fmt.Sprintf("/api_exports/proforma_invoices/%v.json", batchId),
271220
)
272-
req.Authenticate(true)
221+
req.Authenticate(NewAuth("BasicAuth"))
222+
req.AppendErrors(map[string]https.ErrorBuilder[error]{
223+
"404": {TemplatedMessage: "Not Found:'{$response.body}'"},
224+
})
273225

274226
var result models.BatchJobResponse
275227
decoder, resp, err := req.CallAsJson()
276228
if err != nil {
277229
return models.NewApiResponse(result, resp), err
278230
}
279-
err = validateResponse(*resp)
280-
if err != nil {
281-
return models.NewApiResponse(result, resp), err
282-
}
283231

284232
result, err = utilities.DecodeResults[models.BatchJobResponse](decoder)
285-
if err != nil {
286-
return models.NewApiResponse(result, resp), err
287-
}
288-
289-
if resp.StatusCode == 404 {
290-
err = errors.NewApiError(404, "Not Found")
291-
}
292233
return models.NewApiResponse(result, resp), err
293234
}
294235

@@ -306,26 +247,18 @@ func (a *APIExportsController) ReadInvoicesExport(
306247
"GET",
307248
fmt.Sprintf("/api_exports/invoices/%v.json", batchId),
308249
)
309-
req.Authenticate(true)
250+
req.Authenticate(NewAuth("BasicAuth"))
251+
req.AppendErrors(map[string]https.ErrorBuilder[error]{
252+
"404": {TemplatedMessage: "Not Found:'{$response.body}'"},
253+
})
310254

311255
var result models.BatchJobResponse
312256
decoder, resp, err := req.CallAsJson()
313257
if err != nil {
314258
return models.NewApiResponse(result, resp), err
315259
}
316-
err = validateResponse(*resp)
317-
if err != nil {
318-
return models.NewApiResponse(result, resp), err
319-
}
320260

321261
result, err = utilities.DecodeResults[models.BatchJobResponse](decoder)
322-
if err != nil {
323-
return models.NewApiResponse(result, resp), err
324-
}
325-
326-
if resp.StatusCode == 404 {
327-
err = errors.NewApiError(404, "Not Found")
328-
}
329262
return models.NewApiResponse(result, resp), err
330263
}
331264

@@ -343,25 +276,17 @@ func (a *APIExportsController) ReadSubscriptionsExport(
343276
"GET",
344277
fmt.Sprintf("/api_exports/subscriptions/%v.json", batchId),
345278
)
346-
req.Authenticate(true)
279+
req.Authenticate(NewAuth("BasicAuth"))
280+
req.AppendErrors(map[string]https.ErrorBuilder[error]{
281+
"404": {TemplatedMessage: "Not Found:'{$response.body}'"},
282+
})
347283

348284
var result models.BatchJobResponse
349285
decoder, resp, err := req.CallAsJson()
350286
if err != nil {
351287
return models.NewApiResponse(result, resp), err
352288
}
353-
err = validateResponse(*resp)
354-
if err != nil {
355-
return models.NewApiResponse(result, resp), err
356-
}
357289

358290
result, err = utilities.DecodeResults[models.BatchJobResponse](decoder)
359-
if err != nil {
360-
return models.NewApiResponse(result, resp), err
361-
}
362-
363-
if resp.StatusCode == 404 {
364-
err = errors.NewApiError(404, "Not Found")
365-
}
366291
return models.NewApiResponse(result, resp), err
367292
}

0 commit comments

Comments
 (0)