Skip to content

Commit

Permalink
feat: fix error details using stripe transfer (#510)
Browse files Browse the repository at this point in the history
  • Loading branch information
gfyrag authored Sep 13, 2023
1 parent ee9780f commit 2650fc7
Show file tree
Hide file tree
Showing 3,699 changed files with 83,314 additions and 35,866 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"net/http"

"github.com/formancehq/formance-sdk-go/pkg/models/shared"
"go.temporal.io/sdk/temporal"
"go.temporal.io/sdk/workflow"
)

Expand All @@ -23,6 +24,13 @@ func (a Activities) StripeTransfer(ctx context.Context, request shared.StripeTra
case http.StatusOK:
return nil
default:
if response.ErrorResponse != nil {
return temporal.NewApplicationError(
*response.ErrorResponse.ErrorMessage,
string(*response.ErrorResponse.ErrorCode),
response.ErrorResponse.Details)
}

return fmt.Errorf("unexpected status code: %d", response.StatusCode)
}
}
Expand Down
13 changes: 13 additions & 0 deletions components/payments/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,13 @@ paths:
responses:
'200':
$ref: '#/components/responses/Transfer'
5XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'

get:
summary: List transfers and their statuses
tags:
Expand All @@ -257,6 +264,12 @@ paths:
responses:
'200':
$ref: '#/components/responses/StripeTransfer'
5XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'

# ---------------------- COMPONENTS ----------------------
components:
Expand Down
22 changes: 21 additions & 1 deletion openapi/build/generate.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"url": "https://avatars.githubusercontent.com/u/84325077?s=200&v=4",
"altText": "Formance"
},
"version": "v1.0.20230810"
"version": "v1.0.20230905"
},
"servers": [
{
Expand Down Expand Up @@ -2345,6 +2345,16 @@
"responses": {
"200": {
"$ref": "#/components/responses/Transfer"
},
"5XX": {
"description": "Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
},
Expand Down Expand Up @@ -2381,6 +2391,16 @@
"responses": {
"200": {
"$ref": "#/components/responses/StripeTransfer"
},
"5XX": {
"description": "Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions sdks/go/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# This allows generated code to be indexed correctly
*.go linguist-generated=false
279 changes: 141 additions & 138 deletions sdks/go/README.md

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion sdks/go/USAGE.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
<!-- Start SDK Example Usage -->


```go
package main

import(
"context"
"log"
"github.com/formancehq/formance-sdk-go"
"github.com/formancehq/formance-sdk-go/pkg/models/shared"
)

func main() {
s := formance.New(
formance.WithSecurity(shared.Security{
Authorization: "Bearer YOUR_ACCESS_TOKEN_HERE",
Authorization: "",
}),
)

Expand Down
103 changes: 66 additions & 37 deletions sdks/go/accounts.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,37 +3,30 @@
package formance

import (
"bytes"
"context"
"fmt"
"github.com/formancehq/formance-sdk-go/pkg/models/operations"
"github.com/formancehq/formance-sdk-go/pkg/models/sdkerrors"
"github.com/formancehq/formance-sdk-go/pkg/models/shared"
"github.com/formancehq/formance-sdk-go/pkg/utils"
"io"
"net/http"
)

type accounts struct {
defaultClient HTTPClient
securityClient HTTPClient
serverURL string
language string
sdkVersion string
genVersion string
sdkConfiguration sdkConfiguration
}

func newAccounts(defaultClient, securityClient HTTPClient, serverURL, language, sdkVersion, genVersion string) *accounts {
func newAccounts(sdkConfig sdkConfiguration) *accounts {
return &accounts{
defaultClient: defaultClient,
securityClient: securityClient,
serverURL: serverURL,
language: language,
sdkVersion: sdkVersion,
genVersion: genVersion,
sdkConfiguration: sdkConfig,
}
}

// AddMetadataToAccount - Add metadata to an account
func (s *accounts) AddMetadataToAccount(ctx context.Context, request operations.AddMetadataToAccountRequest) (*operations.AddMetadataToAccountResponse, error) {
baseURL := s.serverURL
baseURL := utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
url, err := utils.GenerateURL(ctx, baseURL, "/api/ledger/{ledger}/accounts/{address}/metadata", request, nil)
if err != nil {
return nil, fmt.Errorf("error generating URL: %w", err)
Expand All @@ -52,11 +45,11 @@ func (s *accounts) AddMetadataToAccount(ctx context.Context, request operations.
return nil, fmt.Errorf("error creating request: %w", err)
}
req.Header.Set("Accept", "application/json")
req.Header.Set("user-agent", fmt.Sprintf("speakeasy-sdk/%s %s %s", s.language, s.sdkVersion, s.genVersion))
req.Header.Set("user-agent", fmt.Sprintf("speakeasy-sdk/%s %s %s %s", s.sdkConfiguration.Language, s.sdkConfiguration.SDKVersion, s.sdkConfiguration.GenVersion, s.sdkConfiguration.OpenAPIDocVersion))

req.Header.Set("Content-Type", reqContentType)

client := s.securityClient
client := s.sdkConfiguration.SecurityClient

httpRes, err := client.Do(req)
if err != nil {
Expand All @@ -65,7 +58,13 @@ func (s *accounts) AddMetadataToAccount(ctx context.Context, request operations.
if httpRes == nil {
return nil, fmt.Errorf("error sending request: no response")
}
defer httpRes.Body.Close()

rawBody, err := io.ReadAll(httpRes.Body)
if err != nil {
return nil, fmt.Errorf("error reading response body: %w", err)
}
httpRes.Body.Close()
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))

contentType := httpRes.Header.Get("Content-Type")

Expand All @@ -80,11 +79,13 @@ func (s *accounts) AddMetadataToAccount(ctx context.Context, request operations.
switch {
case utils.MatchContentType(contentType, `application/json`):
var out *shared.ErrorResponse
if err := utils.UnmarshalJsonFromResponseBody(httpRes.Body, &out); err != nil {
if err := utils.UnmarshalJsonFromResponseBody(bytes.NewBuffer(rawBody), &out); err != nil {
return nil, err
}

res.ErrorResponse = out
default:
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", contentType), httpRes.StatusCode, string(rawBody), httpRes)
}
}

Expand All @@ -93,7 +94,7 @@ func (s *accounts) AddMetadataToAccount(ctx context.Context, request operations.

// CountAccounts - Count the accounts from a ledger
func (s *accounts) CountAccounts(ctx context.Context, request operations.CountAccountsRequest) (*operations.CountAccountsResponse, error) {
baseURL := s.serverURL
baseURL := utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
url, err := utils.GenerateURL(ctx, baseURL, "/api/ledger/{ledger}/accounts", request, nil)
if err != nil {
return nil, fmt.Errorf("error generating URL: %w", err)
Expand All @@ -104,13 +105,13 @@ func (s *accounts) CountAccounts(ctx context.Context, request operations.CountAc
return nil, fmt.Errorf("error creating request: %w", err)
}
req.Header.Set("Accept", "application/json")
req.Header.Set("user-agent", fmt.Sprintf("speakeasy-sdk/%s %s %s", s.language, s.sdkVersion, s.genVersion))
req.Header.Set("user-agent", fmt.Sprintf("speakeasy-sdk/%s %s %s %s", s.sdkConfiguration.Language, s.sdkConfiguration.SDKVersion, s.sdkConfiguration.GenVersion, s.sdkConfiguration.OpenAPIDocVersion))

if err := utils.PopulateQueryParams(ctx, req, request, nil); err != nil {
return nil, fmt.Errorf("error populating query params: %w", err)
}

client := s.securityClient
client := s.sdkConfiguration.SecurityClient

httpRes, err := client.Do(req)
if err != nil {
Expand All @@ -119,7 +120,13 @@ func (s *accounts) CountAccounts(ctx context.Context, request operations.CountAc
if httpRes == nil {
return nil, fmt.Errorf("error sending request: no response")
}
defer httpRes.Body.Close()

rawBody, err := io.ReadAll(httpRes.Body)
if err != nil {
return nil, fmt.Errorf("error reading response body: %w", err)
}
httpRes.Body.Close()
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))

contentType := httpRes.Header.Get("Content-Type")

Expand All @@ -136,11 +143,13 @@ func (s *accounts) CountAccounts(ctx context.Context, request operations.CountAc
switch {
case utils.MatchContentType(contentType, `application/json`):
var out *shared.ErrorResponse
if err := utils.UnmarshalJsonFromResponseBody(httpRes.Body, &out); err != nil {
if err := utils.UnmarshalJsonFromResponseBody(bytes.NewBuffer(rawBody), &out); err != nil {
return nil, err
}

res.ErrorResponse = out
default:
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", contentType), httpRes.StatusCode, string(rawBody), httpRes)
}
}

Expand All @@ -149,7 +158,7 @@ func (s *accounts) CountAccounts(ctx context.Context, request operations.CountAc

// GetAccount - Get account by its address
func (s *accounts) GetAccount(ctx context.Context, request operations.GetAccountRequest) (*operations.GetAccountResponse, error) {
baseURL := s.serverURL
baseURL := utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
url, err := utils.GenerateURL(ctx, baseURL, "/api/ledger/{ledger}/accounts/{address}", request, nil)
if err != nil {
return nil, fmt.Errorf("error generating URL: %w", err)
Expand All @@ -159,10 +168,10 @@ func (s *accounts) GetAccount(ctx context.Context, request operations.GetAccount
if err != nil {
return nil, fmt.Errorf("error creating request: %w", err)
}
req.Header.Set("Accept", "application/json;q=1, application/json;q=0")
req.Header.Set("user-agent", fmt.Sprintf("speakeasy-sdk/%s %s %s", s.language, s.sdkVersion, s.genVersion))
req.Header.Set("Accept", "application/json")
req.Header.Set("user-agent", fmt.Sprintf("speakeasy-sdk/%s %s %s %s", s.sdkConfiguration.Language, s.sdkConfiguration.SDKVersion, s.sdkConfiguration.GenVersion, s.sdkConfiguration.OpenAPIDocVersion))

client := s.securityClient
client := s.sdkConfiguration.SecurityClient

httpRes, err := client.Do(req)
if err != nil {
Expand All @@ -171,7 +180,13 @@ func (s *accounts) GetAccount(ctx context.Context, request operations.GetAccount
if httpRes == nil {
return nil, fmt.Errorf("error sending request: no response")
}
defer httpRes.Body.Close()

rawBody, err := io.ReadAll(httpRes.Body)
if err != nil {
return nil, fmt.Errorf("error reading response body: %w", err)
}
httpRes.Body.Close()
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))

contentType := httpRes.Header.Get("Content-Type")

Expand All @@ -185,21 +200,25 @@ func (s *accounts) GetAccount(ctx context.Context, request operations.GetAccount
switch {
case utils.MatchContentType(contentType, `application/json`):
var out *shared.AccountResponse
if err := utils.UnmarshalJsonFromResponseBody(httpRes.Body, &out); err != nil {
if err := utils.UnmarshalJsonFromResponseBody(bytes.NewBuffer(rawBody), &out); err != nil {
return nil, err
}

res.AccountResponse = out
default:
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", contentType), httpRes.StatusCode, string(rawBody), httpRes)
}
default:
switch {
case utils.MatchContentType(contentType, `application/json`):
var out *shared.ErrorResponse
if err := utils.UnmarshalJsonFromResponseBody(httpRes.Body, &out); err != nil {
if err := utils.UnmarshalJsonFromResponseBody(bytes.NewBuffer(rawBody), &out); err != nil {
return nil, err
}

res.ErrorResponse = out
default:
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", contentType), httpRes.StatusCode, string(rawBody), httpRes)
}
}

Expand All @@ -209,7 +228,7 @@ func (s *accounts) GetAccount(ctx context.Context, request operations.GetAccount
// ListAccounts - List accounts from a ledger
// List accounts from a ledger, sorted by address in descending order.
func (s *accounts) ListAccounts(ctx context.Context, request operations.ListAccountsRequest) (*operations.ListAccountsResponse, error) {
baseURL := s.serverURL
baseURL := utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
url, err := utils.GenerateURL(ctx, baseURL, "/api/ledger/{ledger}/accounts", request, nil)
if err != nil {
return nil, fmt.Errorf("error generating URL: %w", err)
Expand All @@ -219,14 +238,14 @@ func (s *accounts) ListAccounts(ctx context.Context, request operations.ListAcco
if err != nil {
return nil, fmt.Errorf("error creating request: %w", err)
}
req.Header.Set("Accept", "application/json;q=1, application/json;q=0")
req.Header.Set("user-agent", fmt.Sprintf("speakeasy-sdk/%s %s %s", s.language, s.sdkVersion, s.genVersion))
req.Header.Set("Accept", "application/json")
req.Header.Set("user-agent", fmt.Sprintf("speakeasy-sdk/%s %s %s %s", s.sdkConfiguration.Language, s.sdkConfiguration.SDKVersion, s.sdkConfiguration.GenVersion, s.sdkConfiguration.OpenAPIDocVersion))

if err := utils.PopulateQueryParams(ctx, req, request, nil); err != nil {
return nil, fmt.Errorf("error populating query params: %w", err)
}

client := s.securityClient
client := s.sdkConfiguration.SecurityClient

httpRes, err := client.Do(req)
if err != nil {
Expand All @@ -235,7 +254,13 @@ func (s *accounts) ListAccounts(ctx context.Context, request operations.ListAcco
if httpRes == nil {
return nil, fmt.Errorf("error sending request: no response")
}
defer httpRes.Body.Close()

rawBody, err := io.ReadAll(httpRes.Body)
if err != nil {
return nil, fmt.Errorf("error reading response body: %w", err)
}
httpRes.Body.Close()
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))

contentType := httpRes.Header.Get("Content-Type")

Expand All @@ -249,21 +274,25 @@ func (s *accounts) ListAccounts(ctx context.Context, request operations.ListAcco
switch {
case utils.MatchContentType(contentType, `application/json`):
var out *shared.AccountsCursorResponse
if err := utils.UnmarshalJsonFromResponseBody(httpRes.Body, &out); err != nil {
if err := utils.UnmarshalJsonFromResponseBody(bytes.NewBuffer(rawBody), &out); err != nil {
return nil, err
}

res.AccountsCursorResponse = out
default:
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", contentType), httpRes.StatusCode, string(rawBody), httpRes)
}
default:
switch {
case utils.MatchContentType(contentType, `application/json`):
var out *shared.ErrorResponse
if err := utils.UnmarshalJsonFromResponseBody(httpRes.Body, &out); err != nil {
if err := utils.UnmarshalJsonFromResponseBody(bytes.NewBuffer(rawBody), &out); err != nil {
return nil, err
}

res.ErrorResponse = out
default:
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", contentType), httpRes.StatusCode, string(rawBody), httpRes)
}
}

Expand Down
Loading

0 comments on commit 2650fc7

Please sign in to comment.