diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index aa90d87..275c94b 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,12 +1,12 @@ lockVersion: 2.0.0 id: 9bfe35dd-87f6-4b74-8789-134b7aa9c364 management: - docChecksum: 314933743cdc7df0fece4d1200534ba4 + docChecksum: dd3f2cfbe8fe0d218524247e07b527e1 docVersion: "1.0" - speakeasyVersion: 1.483.0 - generationVersion: 2.502.0 - releaseVersion: 0.1.16 - configChecksum: b6439fd84ac2eebaae9223470937aff3 + speakeasyVersion: 1.484.1 + generationVersion: 2.503.2 + releaseVersion: 0.1.17 + configChecksum: fa8159268cb04ff199d7f763a9ad7919 repoURL: https://github.com/novuhq/novu-go.git installationURL: https://github.com/novuhq/novu-go features: @@ -540,6 +540,7 @@ generatedFiles: - docs/sdks/authentication/README.md - docs/sdks/credentials/README.md - docs/sdks/integrations/README.md + - docs/sdks/legacy/README.md - docs/sdks/messages/README.md - docs/sdks/notifications/README.md - docs/sdks/novu/README.md @@ -566,6 +567,7 @@ generatedFiles: - internal/utils/retries.go - internal/utils/security.go - internal/utils/utils.go + - legacy.go - messages.go - models/apierrors/apierror.go - models/operations/options.go diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index c4db6f6..337962d 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -16,7 +16,7 @@ generation: oAuth2ClientCredentialsEnabled: true oAuth2PasswordEnabled: true go: - version: 0.1.16 + version: 0.1.17 additionalDependencies: github.com/google/uuid: v1.6.0 allowUnknownFieldsInWeakUnions: false diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 638cd37..5af8747 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,21 +1,21 @@ -speakeasyVersion: 1.483.0 +speakeasyVersion: 1.484.1 sources: novu-OAS: sourceNamespace: novu-oas - sourceRevisionDigest: sha256:078d2447b35060a4781a54884ca8ba837705520ddc7877440e341fbe88b8d09c - sourceBlobDigest: sha256:01282feee062c1e6d3f5ef9c9bd81070220286d04706a6287dbd3f477a420fee + sourceRevisionDigest: sha256:4c24d7f0521c19a0dac957d4dd5d0fef332b7d5d78d3a3bdd61919c97f458985 + sourceBlobDigest: sha256:ed8d604243cb071fbd8ccd32366dc185a7381706079566388a6fb1d014368863 tags: - latest - - speakeasy-sdk-regen-1738672116 + - speakeasy-sdk-regen-1738714379 - "1.0" targets: novu: source: novu-OAS sourceNamespace: novu-oas - sourceRevisionDigest: sha256:078d2447b35060a4781a54884ca8ba837705520ddc7877440e341fbe88b8d09c - sourceBlobDigest: sha256:01282feee062c1e6d3f5ef9c9bd81070220286d04706a6287dbd3f477a420fee + sourceRevisionDigest: sha256:4c24d7f0521c19a0dac957d4dd5d0fef332b7d5d78d3a3bdd61919c97f458985 + sourceBlobDigest: sha256:ed8d604243cb071fbd8ccd32366dc185a7381706079566388a6fb1d014368863 codeSamplesNamespace: novu-oas-go-code-samples - codeSamplesRevisionDigest: sha256:b5424883459f1810251fd7c135a1a4a04eff00940e990c40edb186f6d3017691 + codeSamplesRevisionDigest: sha256:adef743b4471ef98f4d3b1ce1497bd385f6c1be4551a1306bdc38bd30025725e workflow: workflowVersion: 1.0.0 speakeasyVersion: latest @@ -33,5 +33,5 @@ workflow: registry: location: registry.speakeasyapi.dev/novu/novu/novu-oas-go-code-samples labelOverride: - fixedValue: Go (SDK) + fixedValue: Go blocking: false diff --git a/README.md b/README.md index 59f397b..42f1abf 100644 --- a/README.md +++ b/README.md @@ -388,7 +388,7 @@ func main() { * [List](docs/sdks/subscribers/README.md#list) - Get subscribers * [Create](docs/sdks/subscribers/README.md#create) - Create subscriber * [RetrieveLegacy](docs/sdks/subscribers/README.md#retrievelegacy) - Get subscriber -* [Update](docs/sdks/subscribers/README.md#update) - Update subscriber +* [UpdateLegacy](docs/sdks/subscribers/README.md#updatelegacy) - Update subscriber * [~~DeleteLegacy~~](docs/sdks/subscribers/README.md#deletelegacy) - Delete subscriber :warning: **Deprecated** * [CreateBulk](docs/sdks/subscribers/README.md#createbulk) - Bulk create subscribers * [Search](docs/sdks/subscribers/README.md#search) - Search for subscribers @@ -420,13 +420,16 @@ func main() { #### [Subscribers.Preferences](docs/sdks/preferences/README.md) -* [List](docs/sdks/preferences/README.md#list) - Get subscriber preferences -* [UpdateGlobal](docs/sdks/preferences/README.md#updateglobal) - Update subscriber global preferences -* [RetrieveByLevel](docs/sdks/preferences/README.md#retrievebylevel) - Get subscriber preferences by level +* [~~ListLegacy~~](docs/sdks/preferences/README.md#listlegacy) - Get subscriber preferences :warning: **Deprecated** +* [~~RetrieveByLevelLegacy~~](docs/sdks/preferences/README.md#retrievebylevellegacy) - Get subscriber preferences by level :warning: **Deprecated** * [UpdateLegacy](docs/sdks/preferences/README.md#updatelegacy) - Update subscriber preference * [Retrieve](docs/sdks/preferences/README.md#retrieve) - Get subscriber preferences * [Update](docs/sdks/preferences/README.md#update) - Update subscriber global or workflow specific preferences +#### [Subscribers.Preferences.Legacy](docs/sdks/legacy/README.md) + +* [UpdateGlobal](docs/sdks/legacy/README.md#updateglobal) - Update subscriber global preferences + #### [Subscribers.Properties](docs/sdks/properties/README.md) * [UpdateOnlineFlag](docs/sdks/properties/README.md#updateonlineflag) - Update subscriber online status diff --git a/RELEASES.md b/RELEASES.md index b773469..c9e24b1 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -58,4 +58,14 @@ Based on: ### Generated - [go v0.1.16] . ### Releases -- [Go v0.1.16] https://github.com/novuhq/novu-go/releases/tag/v0.1.16 - . \ No newline at end of file +- [Go v0.1.16] https://github.com/novuhq/novu-go/releases/tag/v0.1.16 - . + +## 2025-02-06 00:12:42 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.484.1 (2.503.2) https://github.com/speakeasy-api/speakeasy +### Generated +- [go v0.1.17] . +### Releases +- [Go v0.1.17] https://github.com/novuhq/novu-go/releases/tag/v0.1.17 - . \ No newline at end of file diff --git a/docs/sdks/legacy/README.md b/docs/sdks/legacy/README.md new file mode 100644 index 0000000..225225b --- /dev/null +++ b/docs/sdks/legacy/README.md @@ -0,0 +1,66 @@ +# Legacy +(*Subscribers.Preferences.Legacy*) + +## Overview + +### Available Operations + +* [UpdateGlobal](#updateglobal) - Update subscriber global preferences + +## UpdateGlobal + +Update subscriber global preferences + +### Example Usage + +```go +package main + +import( + "context" + "os" + novugo "github.com/novuhq/novu-go" + "github.com/novuhq/novu-go/models/components" + "log" +) + +func main() { + ctx := context.Background() + + s := novugo.New( + novugo.WithSecurity(os.Getenv("NOVU_SECRET_KEY")), + ) + + res, err := s.Subscribers.Preferences.Legacy.UpdateGlobal(ctx, "", components.UpdateSubscriberGlobalPreferencesRequestDto{}, nil) + if err != nil { + log.Fatal(err) + } + if res.UpdateSubscriberPreferenceGlobalResponseDto != nil { + // handle response + } +} +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `ctx` | [context.Context](https://pkg.go.dev/context#Context) | :heavy_check_mark: | The context to use for the request. | +| `subscriberID` | *string* | :heavy_check_mark: | N/A | +| `updateSubscriberGlobalPreferencesRequestDto` | [components.UpdateSubscriberGlobalPreferencesRequestDto](../../models/components/updatesubscriberglobalpreferencesrequestdto.md) | :heavy_check_mark: | N/A | +| `idempotencyKey` | **string* | :heavy_minus_sign: | A header for idempotency purposes | +| `opts` | [][operations.Option](../../models/operations/option.md) | :heavy_minus_sign: | The options for this request. | + +### Response + +**[*operations.SubscribersV1ControllerUpdateSubscriberGlobalPreferencesResponse](../../models/operations/subscribersv1controllerupdatesubscriberglobalpreferencesresponse.md), error** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------------------- | -------------------------------------- | -------------------------------------- | +| apierrors.ErrorDto | 414 | application/json | +| apierrors.ErrorDto | 400, 401, 403, 404, 405, 409, 413, 415 | application/json | +| apierrors.ValidationErrorDto | 422 | application/json | +| apierrors.ErrorDto | 500 | application/json | +| apierrors.APIError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/docs/sdks/preferences/README.md b/docs/sdks/preferences/README.md index 7b158e1..03109f5 100644 --- a/docs/sdks/preferences/README.md +++ b/docs/sdks/preferences/README.md @@ -5,17 +5,18 @@ ### Available Operations -* [List](#list) - Get subscriber preferences -* [UpdateGlobal](#updateglobal) - Update subscriber global preferences -* [RetrieveByLevel](#retrievebylevel) - Get subscriber preferences by level +* [~~ListLegacy~~](#listlegacy) - Get subscriber preferences :warning: **Deprecated** +* [~~RetrieveByLevelLegacy~~](#retrievebylevellegacy) - Get subscriber preferences by level :warning: **Deprecated** * [UpdateLegacy](#updatelegacy) - Update subscriber preference * [Retrieve](#retrieve) - Get subscriber preferences * [Update](#update) - Update subscriber global or workflow specific preferences -## List +## ~~ListLegacy~~ Get subscriber preferences +> :warning: **DEPRECATED**: This will be removed in a future release, please migrate away from it as soon as possible. + ### Example Usage ```go @@ -35,7 +36,7 @@ func main() { novugo.WithSecurity(os.Getenv("NOVU_SECRET_KEY")), ) - res, err := s.Subscribers.Preferences.List(ctx, "", nil, nil) + res, err := s.Subscribers.Preferences.ListLegacy(ctx, "", nil, nil) if err != nil { log.Fatal(err) } @@ -69,68 +70,12 @@ func main() { | apierrors.ErrorDto | 500 | application/json | | apierrors.APIError | 4XX, 5XX | \*/\* | -## UpdateGlobal - -Update subscriber global preferences - -### Example Usage - -```go -package main - -import( - "context" - "os" - novugo "github.com/novuhq/novu-go" - "github.com/novuhq/novu-go/models/components" - "log" -) - -func main() { - ctx := context.Background() - - s := novugo.New( - novugo.WithSecurity(os.Getenv("NOVU_SECRET_KEY")), - ) - - res, err := s.Subscribers.Preferences.UpdateGlobal(ctx, "", components.UpdateSubscriberGlobalPreferencesRequestDto{}, nil) - if err != nil { - log.Fatal(err) - } - if res.UpdateSubscriberPreferenceGlobalResponseDto != nil { - // handle response - } -} -``` - -### Parameters - -| Parameter | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -| `ctx` | [context.Context](https://pkg.go.dev/context#Context) | :heavy_check_mark: | The context to use for the request. | -| `subscriberID` | *string* | :heavy_check_mark: | N/A | -| `updateSubscriberGlobalPreferencesRequestDto` | [components.UpdateSubscriberGlobalPreferencesRequestDto](../../models/components/updatesubscriberglobalpreferencesrequestdto.md) | :heavy_check_mark: | N/A | -| `idempotencyKey` | **string* | :heavy_minus_sign: | A header for idempotency purposes | -| `opts` | [][operations.Option](../../models/operations/option.md) | :heavy_minus_sign: | The options for this request. | - -### Response - -**[*operations.SubscribersV1ControllerUpdateSubscriberGlobalPreferencesResponse](../../models/operations/subscribersv1controllerupdatesubscriberglobalpreferencesresponse.md), error** - -### Errors - -| Error Type | Status Code | Content Type | -| -------------------------------------- | -------------------------------------- | -------------------------------------- | -| apierrors.ErrorDto | 414 | application/json | -| apierrors.ErrorDto | 400, 401, 403, 404, 405, 409, 413, 415 | application/json | -| apierrors.ValidationErrorDto | 422 | application/json | -| apierrors.ErrorDto | 500 | application/json | -| apierrors.APIError | 4XX, 5XX | \*/\* | - -## RetrieveByLevel +## ~~RetrieveByLevelLegacy~~ Get subscriber preferences by level +> :warning: **DEPRECATED**: This will be removed in a future release, please migrate away from it as soon as possible. + ### Example Usage ```go @@ -151,7 +96,7 @@ func main() { novugo.WithSecurity(os.Getenv("NOVU_SECRET_KEY")), ) - res, err := s.Subscribers.Preferences.RetrieveByLevel(ctx, operations.ParameterTemplate, "", nil, nil) + res, err := s.Subscribers.Preferences.RetrieveByLevelLegacy(ctx, operations.ParameterTemplate, "", nil, nil) if err != nil { log.Fatal(err) } diff --git a/docs/sdks/subscribers/README.md b/docs/sdks/subscribers/README.md index 9807cf2..9e59872 100644 --- a/docs/sdks/subscribers/README.md +++ b/docs/sdks/subscribers/README.md @@ -11,7 +11,7 @@ A subscriber in Novu represents someone who should receive a message. A subscrib * [List](#list) - Get subscribers * [Create](#create) - Create subscriber * [RetrieveLegacy](#retrievelegacy) - Get subscriber -* [Update](#update) - Update subscriber +* [UpdateLegacy](#updatelegacy) - Update subscriber * [~~DeleteLegacy~~](#deletelegacy) - Delete subscriber :warning: **Deprecated** * [CreateBulk](#createbulk) - Bulk create subscribers * [Search](#search) - Search for subscribers @@ -204,7 +204,7 @@ func main() { | apierrors.ErrorDto | 500 | application/json | | apierrors.APIError | 4XX, 5XX | \*/\* | -## Update +## UpdateLegacy Used to update the subscriber entity with new information @@ -228,7 +228,7 @@ func main() { novugo.WithSecurity(os.Getenv("NOVU_SECRET_KEY")), ) - res, err := s.Subscribers.Update(ctx, "", components.UpdateSubscriberRequestDto{ + res, err := s.Subscribers.UpdateLegacy(ctx, "", components.UpdateSubscriberRequestDto{ Email: novugo.String("john.doe@example.com"), FirstName: novugo.String("John"), LastName: novugo.String("Doe"), diff --git a/legacy.go b/legacy.go new file mode 100644 index 0000000..b7c2862 --- /dev/null +++ b/legacy.go @@ -0,0 +1,371 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package novugo + +import ( + "bytes" + "context" + "fmt" + "github.com/novuhq/novu-go/internal/hooks" + "github.com/novuhq/novu-go/internal/utils" + "github.com/novuhq/novu-go/models/apierrors" + "github.com/novuhq/novu-go/models/components" + "github.com/novuhq/novu-go/models/operations" + "github.com/novuhq/novu-go/retry" + "net/http" +) + +type Legacy struct { + sdkConfiguration sdkConfiguration +} + +func newLegacy(sdkConfig sdkConfiguration) *Legacy { + return &Legacy{ + sdkConfiguration: sdkConfig, + } +} + +// UpdateGlobal - Update subscriber global preferences +func (s *Legacy) UpdateGlobal(ctx context.Context, subscriberID string, updateSubscriberGlobalPreferencesRequestDto components.UpdateSubscriberGlobalPreferencesRequestDto, idempotencyKey *string, opts ...operations.Option) (*operations.SubscribersV1ControllerUpdateSubscriberGlobalPreferencesResponse, error) { + hookCtx := hooks.HookContext{ + Context: ctx, + OperationID: "SubscribersV1Controller_updateSubscriberGlobalPreferences", + OAuth2Scopes: []string{}, + SecuritySource: s.sdkConfiguration.Security, + } + + request := operations.SubscribersV1ControllerUpdateSubscriberGlobalPreferencesRequest{ + SubscriberID: subscriberID, + IdempotencyKey: idempotencyKey, + UpdateSubscriberGlobalPreferencesRequestDto: updateSubscriberGlobalPreferencesRequestDto, + } + + o := operations.Options{} + supportedOptions := []string{ + operations.SupportedOptionRetries, + operations.SupportedOptionTimeout, + } + + for _, opt := range opts { + if err := opt(&o, supportedOptions...); err != nil { + return nil, fmt.Errorf("error applying option: %w", err) + } + } + + var baseURL string + if o.ServerURL == nil { + baseURL = utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails()) + } else { + baseURL = *o.ServerURL + } + opURL, err := utils.GenerateURL(ctx, baseURL, "/v1/subscribers/{subscriberId}/preferences", request, nil) + if err != nil { + return nil, fmt.Errorf("error generating URL: %w", err) + } + + bodyReader, reqContentType, err := utils.SerializeRequestBody(ctx, request, false, false, "UpdateSubscriberGlobalPreferencesRequestDto", "json", `request:"mediaType=application/json"`) + if err != nil { + return nil, err + } + + timeout := o.Timeout + if timeout == nil { + timeout = s.sdkConfiguration.Timeout + } + + if timeout != nil { + var cancel context.CancelFunc + ctx, cancel = context.WithTimeout(ctx, *timeout) + defer cancel() + } + + req, err := http.NewRequestWithContext(ctx, "PATCH", opURL, bodyReader) + if err != nil { + return nil, fmt.Errorf("error creating request: %w", err) + } + req.Header.Set("Accept", "application/json") + req.Header.Set("User-Agent", s.sdkConfiguration.UserAgent) + if reqContentType != "" { + req.Header.Set("Content-Type", reqContentType) + } + + utils.PopulateHeaders(ctx, req, request, nil) + + if err := utils.PopulateSecurity(ctx, req, s.sdkConfiguration.Security); err != nil { + return nil, err + } + + for k, v := range o.SetHeaders { + req.Header.Set(k, v) + } + + globalRetryConfig := s.sdkConfiguration.RetryConfig + retryConfig := o.Retries + if retryConfig == nil { + if globalRetryConfig != nil { + retryConfig = globalRetryConfig + } else { + retryConfig = &retry.Config{ + Strategy: "backoff", Backoff: &retry.BackoffStrategy{ + InitialInterval: 1000, + MaxInterval: 30000, + Exponent: 1.5, + MaxElapsedTime: 3600000, + }, + RetryConnectionErrors: true, + } + } + } + + var httpRes *http.Response + if retryConfig != nil { + httpRes, err = utils.Retry(ctx, utils.Retries{ + Config: retryConfig, + StatusCodes: []string{ + "408", + "409", + "429", + "5XX", + }, + }, func() (*http.Response, error) { + if req.Body != nil { + copyBody, err := req.GetBody() + if err != nil { + return nil, err + } + req.Body = copyBody + } + + req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) + if err != nil { + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) + } + + httpRes, err := s.sdkConfiguration.Client.Do(req) + if err != nil || httpRes == nil { + if err != nil { + err = fmt.Errorf("error sending request: %w", err) + } else { + err = fmt.Errorf("error sending request: no response") + } + + _, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err) + } + return httpRes, err + }) + + if err != nil { + return nil, err + } else { + httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes) + if err != nil { + return nil, err + } + } + } else { + req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) + if err != nil { + return nil, err + } + + httpRes, err = s.sdkConfiguration.Client.Do(req) + if err != nil || httpRes == nil { + if err != nil { + err = fmt.Errorf("error sending request: %w", err) + } else { + err = fmt.Errorf("error sending request: no response") + } + + _, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err) + return nil, err + } else if utils.MatchStatusCodes([]string{"400", "401", "403", "404", "405", "409", "413", "414", "415", "422", "429", "4XX", "500", "503", "5XX"}, httpRes.StatusCode) { + _httpRes, err := s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil) + if err != nil { + return nil, err + } else if _httpRes != nil { + httpRes = _httpRes + } + } else { + httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes) + if err != nil { + return nil, err + } + } + } + + res := &operations.SubscribersV1ControllerUpdateSubscriberGlobalPreferencesResponse{ + HTTPMeta: components.HTTPMetadata{ + Request: req, + Response: httpRes, + }, + } + + switch { + case httpRes.StatusCode == 200: + res.Headers = httpRes.Header + + switch { + case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`): + rawBody, err := utils.ConsumeRawBody(httpRes) + if err != nil { + return nil, err + } + + var out components.UpdateSubscriberPreferenceGlobalResponseDto + if err := utils.UnmarshalJsonFromResponseBody(bytes.NewBuffer(rawBody), &out, ""); err != nil { + return nil, err + } + + res.UpdateSubscriberPreferenceGlobalResponseDto = &out + default: + rawBody, err := utils.ConsumeRawBody(httpRes) + if err != nil { + return nil, err + } + return nil, apierrors.NewAPIError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes) + } + case httpRes.StatusCode == 414: + switch { + case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`): + rawBody, err := utils.ConsumeRawBody(httpRes) + if err != nil { + return nil, err + } + + var out apierrors.ErrorDto + if err := utils.UnmarshalJsonFromResponseBody(bytes.NewBuffer(rawBody), &out, ""); err != nil { + return nil, err + } + + return nil, &out + default: + rawBody, err := utils.ConsumeRawBody(httpRes) + if err != nil { + return nil, err + } + return nil, apierrors.NewAPIError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes) + } + case httpRes.StatusCode == 400: + fallthrough + case httpRes.StatusCode == 401: + fallthrough + case httpRes.StatusCode == 403: + fallthrough + case httpRes.StatusCode == 404: + fallthrough + case httpRes.StatusCode == 405: + fallthrough + case httpRes.StatusCode == 409: + fallthrough + case httpRes.StatusCode == 413: + fallthrough + case httpRes.StatusCode == 415: + res.Headers = httpRes.Header + + switch { + case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`): + rawBody, err := utils.ConsumeRawBody(httpRes) + if err != nil { + return nil, err + } + + var out apierrors.ErrorDto + if err := utils.UnmarshalJsonFromResponseBody(bytes.NewBuffer(rawBody), &out, ""); err != nil { + return nil, err + } + + return nil, &out + default: + rawBody, err := utils.ConsumeRawBody(httpRes) + if err != nil { + return nil, err + } + return nil, apierrors.NewAPIError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes) + } + case httpRes.StatusCode == 422: + res.Headers = httpRes.Header + + switch { + case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`): + rawBody, err := utils.ConsumeRawBody(httpRes) + if err != nil { + return nil, err + } + + var out apierrors.ValidationErrorDto + if err := utils.UnmarshalJsonFromResponseBody(bytes.NewBuffer(rawBody), &out, ""); err != nil { + return nil, err + } + + return nil, &out + default: + rawBody, err := utils.ConsumeRawBody(httpRes) + if err != nil { + return nil, err + } + return nil, apierrors.NewAPIError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes) + } + case httpRes.StatusCode == 429: + res.Headers = httpRes.Header + rawBody, err := utils.ConsumeRawBody(httpRes) + if err != nil { + return nil, err + } + return nil, apierrors.NewAPIError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes) + case httpRes.StatusCode == 500: + res.Headers = httpRes.Header + + switch { + case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`): + rawBody, err := utils.ConsumeRawBody(httpRes) + if err != nil { + return nil, err + } + + var out apierrors.ErrorDto + if err := utils.UnmarshalJsonFromResponseBody(bytes.NewBuffer(rawBody), &out, ""); err != nil { + return nil, err + } + + return nil, &out + default: + rawBody, err := utils.ConsumeRawBody(httpRes) + if err != nil { + return nil, err + } + return nil, apierrors.NewAPIError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes) + } + case httpRes.StatusCode == 503: + res.Headers = httpRes.Header + rawBody, err := utils.ConsumeRawBody(httpRes) + if err != nil { + return nil, err + } + return nil, apierrors.NewAPIError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes) + case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500: + rawBody, err := utils.ConsumeRawBody(httpRes) + if err != nil { + return nil, err + } + return nil, apierrors.NewAPIError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes) + case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600: + rawBody, err := utils.ConsumeRawBody(httpRes) + if err != nil { + return nil, err + } + return nil, apierrors.NewAPIError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes) + default: + rawBody, err := utils.ConsumeRawBody(httpRes) + if err != nil { + return nil, err + } + return nil, apierrors.NewAPIError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes) + } + + return res, nil + +} diff --git a/novu.go b/novu.go index f35de10..387879e 100644 --- a/novu.go +++ b/novu.go @@ -171,9 +171,9 @@ func New(opts ...SDKOption) *Novu { sdkConfiguration: sdkConfiguration{ Language: "go", OpenAPIDocVersion: "1.0", - SDKVersion: "0.1.16", - GenVersion: "2.502.0", - UserAgent: "speakeasy-sdk/go 0.1.16 2.502.0 1.0 github.com/novuhq/novu-go", + SDKVersion: "0.1.17", + GenVersion: "2.503.2", + UserAgent: "speakeasy-sdk/go 0.1.17 2.503.2 1.0 github.com/novuhq/novu-go", Hooks: hooks.New(), }, } diff --git a/preferences.go b/preferences.go index 30848e8..a048fdd 100644 --- a/preferences.go +++ b/preferences.go @@ -16,17 +16,22 @@ import ( ) type Preferences struct { + Legacy *Legacy + sdkConfiguration sdkConfiguration } func newPreferences(sdkConfig sdkConfiguration) *Preferences { return &Preferences{ sdkConfiguration: sdkConfig, + Legacy: newLegacy(sdkConfig), } } -// List - Get subscriber preferences -func (s *Preferences) List(ctx context.Context, subscriberID string, includeInactiveChannels *bool, idempotencyKey *string, opts ...operations.Option) (*operations.SubscribersV1ControllerListSubscriberPreferencesResponse, error) { +// ListLegacy - Get subscriber preferences +// +// Deprecated: This will be removed in a future release, please migrate away from it as soon as possible. +func (s *Preferences) ListLegacy(ctx context.Context, subscriberID string, includeInactiveChannels *bool, idempotencyKey *string, opts ...operations.Option) (*operations.SubscribersV1ControllerListSubscriberPreferencesResponse, error) { hookCtx := hooks.HookContext{ Context: ctx, OperationID: "SubscribersV1Controller_listSubscriberPreferences", @@ -366,353 +371,10 @@ func (s *Preferences) List(ctx context.Context, subscriberID string, includeInac } -// UpdateGlobal - Update subscriber global preferences -func (s *Preferences) UpdateGlobal(ctx context.Context, subscriberID string, updateSubscriberGlobalPreferencesRequestDto components.UpdateSubscriberGlobalPreferencesRequestDto, idempotencyKey *string, opts ...operations.Option) (*operations.SubscribersV1ControllerUpdateSubscriberGlobalPreferencesResponse, error) { - hookCtx := hooks.HookContext{ - Context: ctx, - OperationID: "SubscribersV1Controller_updateSubscriberGlobalPreferences", - OAuth2Scopes: []string{}, - SecuritySource: s.sdkConfiguration.Security, - } - - request := operations.SubscribersV1ControllerUpdateSubscriberGlobalPreferencesRequest{ - SubscriberID: subscriberID, - IdempotencyKey: idempotencyKey, - UpdateSubscriberGlobalPreferencesRequestDto: updateSubscriberGlobalPreferencesRequestDto, - } - - o := operations.Options{} - supportedOptions := []string{ - operations.SupportedOptionRetries, - operations.SupportedOptionTimeout, - } - - for _, opt := range opts { - if err := opt(&o, supportedOptions...); err != nil { - return nil, fmt.Errorf("error applying option: %w", err) - } - } - - var baseURL string - if o.ServerURL == nil { - baseURL = utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails()) - } else { - baseURL = *o.ServerURL - } - opURL, err := utils.GenerateURL(ctx, baseURL, "/v1/subscribers/{subscriberId}/preferences", request, nil) - if err != nil { - return nil, fmt.Errorf("error generating URL: %w", err) - } - - bodyReader, reqContentType, err := utils.SerializeRequestBody(ctx, request, false, false, "UpdateSubscriberGlobalPreferencesRequestDto", "json", `request:"mediaType=application/json"`) - if err != nil { - return nil, err - } - - timeout := o.Timeout - if timeout == nil { - timeout = s.sdkConfiguration.Timeout - } - - if timeout != nil { - var cancel context.CancelFunc - ctx, cancel = context.WithTimeout(ctx, *timeout) - defer cancel() - } - - req, err := http.NewRequestWithContext(ctx, "PATCH", opURL, bodyReader) - if err != nil { - return nil, fmt.Errorf("error creating request: %w", err) - } - req.Header.Set("Accept", "application/json") - req.Header.Set("User-Agent", s.sdkConfiguration.UserAgent) - if reqContentType != "" { - req.Header.Set("Content-Type", reqContentType) - } - - utils.PopulateHeaders(ctx, req, request, nil) - - if err := utils.PopulateSecurity(ctx, req, s.sdkConfiguration.Security); err != nil { - return nil, err - } - - for k, v := range o.SetHeaders { - req.Header.Set(k, v) - } - - globalRetryConfig := s.sdkConfiguration.RetryConfig - retryConfig := o.Retries - if retryConfig == nil { - if globalRetryConfig != nil { - retryConfig = globalRetryConfig - } else { - retryConfig = &retry.Config{ - Strategy: "backoff", Backoff: &retry.BackoffStrategy{ - InitialInterval: 1000, - MaxInterval: 30000, - Exponent: 1.5, - MaxElapsedTime: 3600000, - }, - RetryConnectionErrors: true, - } - } - } - - var httpRes *http.Response - if retryConfig != nil { - httpRes, err = utils.Retry(ctx, utils.Retries{ - Config: retryConfig, - StatusCodes: []string{ - "408", - "409", - "429", - "5XX", - }, - }, func() (*http.Response, error) { - if req.Body != nil { - copyBody, err := req.GetBody() - if err != nil { - return nil, err - } - req.Body = copyBody - } - - req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) - if err != nil { - if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { - return nil, err - } - - return nil, retry.Permanent(err) - } - - httpRes, err := s.sdkConfiguration.Client.Do(req) - if err != nil || httpRes == nil { - if err != nil { - err = fmt.Errorf("error sending request: %w", err) - } else { - err = fmt.Errorf("error sending request: no response") - } - - _, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err) - } - return httpRes, err - }) - - if err != nil { - return nil, err - } else { - httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes) - if err != nil { - return nil, err - } - } - } else { - req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) - if err != nil { - return nil, err - } - - httpRes, err = s.sdkConfiguration.Client.Do(req) - if err != nil || httpRes == nil { - if err != nil { - err = fmt.Errorf("error sending request: %w", err) - } else { - err = fmt.Errorf("error sending request: no response") - } - - _, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err) - return nil, err - } else if utils.MatchStatusCodes([]string{"400", "401", "403", "404", "405", "409", "413", "414", "415", "422", "429", "4XX", "500", "503", "5XX"}, httpRes.StatusCode) { - _httpRes, err := s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil) - if err != nil { - return nil, err - } else if _httpRes != nil { - httpRes = _httpRes - } - } else { - httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes) - if err != nil { - return nil, err - } - } - } - - res := &operations.SubscribersV1ControllerUpdateSubscriberGlobalPreferencesResponse{ - HTTPMeta: components.HTTPMetadata{ - Request: req, - Response: httpRes, - }, - } - - switch { - case httpRes.StatusCode == 200: - res.Headers = httpRes.Header - - switch { - case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`): - rawBody, err := utils.ConsumeRawBody(httpRes) - if err != nil { - return nil, err - } - - var out components.UpdateSubscriberPreferenceGlobalResponseDto - if err := utils.UnmarshalJsonFromResponseBody(bytes.NewBuffer(rawBody), &out, ""); err != nil { - return nil, err - } - - res.UpdateSubscriberPreferenceGlobalResponseDto = &out - default: - rawBody, err := utils.ConsumeRawBody(httpRes) - if err != nil { - return nil, err - } - return nil, apierrors.NewAPIError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes) - } - case httpRes.StatusCode == 414: - switch { - case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`): - rawBody, err := utils.ConsumeRawBody(httpRes) - if err != nil { - return nil, err - } - - var out apierrors.ErrorDto - if err := utils.UnmarshalJsonFromResponseBody(bytes.NewBuffer(rawBody), &out, ""); err != nil { - return nil, err - } - - return nil, &out - default: - rawBody, err := utils.ConsumeRawBody(httpRes) - if err != nil { - return nil, err - } - return nil, apierrors.NewAPIError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes) - } - case httpRes.StatusCode == 400: - fallthrough - case httpRes.StatusCode == 401: - fallthrough - case httpRes.StatusCode == 403: - fallthrough - case httpRes.StatusCode == 404: - fallthrough - case httpRes.StatusCode == 405: - fallthrough - case httpRes.StatusCode == 409: - fallthrough - case httpRes.StatusCode == 413: - fallthrough - case httpRes.StatusCode == 415: - res.Headers = httpRes.Header - - switch { - case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`): - rawBody, err := utils.ConsumeRawBody(httpRes) - if err != nil { - return nil, err - } - - var out apierrors.ErrorDto - if err := utils.UnmarshalJsonFromResponseBody(bytes.NewBuffer(rawBody), &out, ""); err != nil { - return nil, err - } - - return nil, &out - default: - rawBody, err := utils.ConsumeRawBody(httpRes) - if err != nil { - return nil, err - } - return nil, apierrors.NewAPIError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes) - } - case httpRes.StatusCode == 422: - res.Headers = httpRes.Header - - switch { - case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`): - rawBody, err := utils.ConsumeRawBody(httpRes) - if err != nil { - return nil, err - } - - var out apierrors.ValidationErrorDto - if err := utils.UnmarshalJsonFromResponseBody(bytes.NewBuffer(rawBody), &out, ""); err != nil { - return nil, err - } - - return nil, &out - default: - rawBody, err := utils.ConsumeRawBody(httpRes) - if err != nil { - return nil, err - } - return nil, apierrors.NewAPIError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes) - } - case httpRes.StatusCode == 429: - res.Headers = httpRes.Header - rawBody, err := utils.ConsumeRawBody(httpRes) - if err != nil { - return nil, err - } - return nil, apierrors.NewAPIError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes) - case httpRes.StatusCode == 500: - res.Headers = httpRes.Header - - switch { - case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`): - rawBody, err := utils.ConsumeRawBody(httpRes) - if err != nil { - return nil, err - } - - var out apierrors.ErrorDto - if err := utils.UnmarshalJsonFromResponseBody(bytes.NewBuffer(rawBody), &out, ""); err != nil { - return nil, err - } - - return nil, &out - default: - rawBody, err := utils.ConsumeRawBody(httpRes) - if err != nil { - return nil, err - } - return nil, apierrors.NewAPIError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes) - } - case httpRes.StatusCode == 503: - res.Headers = httpRes.Header - rawBody, err := utils.ConsumeRawBody(httpRes) - if err != nil { - return nil, err - } - return nil, apierrors.NewAPIError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes) - case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500: - rawBody, err := utils.ConsumeRawBody(httpRes) - if err != nil { - return nil, err - } - return nil, apierrors.NewAPIError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes) - case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600: - rawBody, err := utils.ConsumeRawBody(httpRes) - if err != nil { - return nil, err - } - return nil, apierrors.NewAPIError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes) - default: - rawBody, err := utils.ConsumeRawBody(httpRes) - if err != nil { - return nil, err - } - return nil, apierrors.NewAPIError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes) - } - - return res, nil - -} - -// RetrieveByLevel - Get subscriber preferences by level -func (s *Preferences) RetrieveByLevel(ctx context.Context, preferenceLevel operations.Parameter, subscriberID string, includeInactiveChannels *bool, idempotencyKey *string, opts ...operations.Option) (*operations.SubscribersV1ControllerGetSubscriberPreferenceByLevelResponse, error) { +// RetrieveByLevelLegacy - Get subscriber preferences by level +// +// Deprecated: This will be removed in a future release, please migrate away from it as soon as possible. +func (s *Preferences) RetrieveByLevelLegacy(ctx context.Context, preferenceLevel operations.Parameter, subscriberID string, includeInactiveChannels *bool, idempotencyKey *string, opts ...operations.Option) (*operations.SubscribersV1ControllerGetSubscriberPreferenceByLevelResponse, error) { hookCtx := hooks.HookContext{ Context: ctx, OperationID: "SubscribersV1Controller_getSubscriberPreferenceByLevel", diff --git a/subscribers.go b/subscribers.go index b440592..2881614 100644 --- a/subscribers.go +++ b/subscribers.go @@ -1118,9 +1118,9 @@ func (s *Subscribers) RetrieveLegacy(ctx context.Context, subscriberID string, i } -// Update subscriber +// UpdateLegacy - Update subscriber // Used to update the subscriber entity with new information -func (s *Subscribers) Update(ctx context.Context, subscriberID string, updateSubscriberRequestDto components.UpdateSubscriberRequestDto, idempotencyKey *string, opts ...operations.Option) (*operations.SubscribersV1ControllerUpdateSubscriberResponse, error) { +func (s *Subscribers) UpdateLegacy(ctx context.Context, subscriberID string, updateSubscriberRequestDto components.UpdateSubscriberRequestDto, idempotencyKey *string, opts ...operations.Option) (*operations.SubscribersV1ControllerUpdateSubscriberResponse, error) { hookCtx := hooks.HookContext{ Context: ctx, OperationID: "SubscribersV1Controller_updateSubscriber",