diff --git a/SDKS.md b/SDKS.md index 9e2ce038f..f5fe806d3 100644 --- a/SDKS.md +++ b/SDKS.md @@ -22,6 +22,16 @@ They are slightly modified from the original ones for our needs. SDK will be generated in `./sdks` directory in the respective language folder. +## Updating SDK version: + +### Dotnet: + +In order to update the SDK version, we must update 2 files: +- `package.json` - script `generate-sdk-dotnet` - find and update `packageVersion=` value +- `sdks/dotnet/src/Voucherify/Voucherify.nuspec` - find and update `` value + +Additionally, we need to copy the updated changelog from `sdks/dotnet/readme.md` to `sdks/dotnet/src/Voucherify/Voucherify.nuspec` + ## Command explanation ### `build-update-md-tables-from-openapi` diff --git a/mustache-templates/csharp/README.mustache b/mustache-templates/csharp/README.mustache index dffd829ad..317ab1075 100644 --- a/mustache-templates/csharp/README.mustache +++ b/mustache-templates/csharp/README.mustache @@ -250,7 +250,7 @@ This SDK is auto-generated (except for tests), so changes made here will be over ## 🏷️ Link tags -[OpenAPI generated from tag](https://github.com/voucherifyio/voucherify-openapi/releases/tag/sdk-dotnet-8.1.0). +[OpenAPI generated from tag](https://github.com/voucherifyio/voucherify-openapi/releases/tag/sdk-dotnet-{{packageVersion}}). ## πŸ” Authorization {{^authMethods}}Endpoints do not require authorization.{{/authMethods}} @@ -280,7 +280,13 @@ This SDK is auto-generated (except for tests), so changes made here will be over ## πŸ“… Changelog -- **2024-10-21** - `8.1.0` +- **2025-12-14** - `9.0.0` + - All POST requests now require a payload. As a result, the order of parameters in API method calls may have changed. If you encounter a build error, please check the documentation for the method you are calling. + - `OrdersImportCreateRequestBodyItem` no longer has `CreatedAt` property. + - `RelatedObjectParent` property `Amount` now is `int?` type, instead of `string?`. + - `SegmentsCreateResponseBody` and `SegmentsGetResponseBody` no longer have `InitialSyncStatus` property. + - Added support for advanced filtering while listing vouchers. +- **2025-10-21** - `8.1.0` - **Invalid/New Enums will be parsed as null** - **If a property is missing will be simply skipped, please ensure on your side if parameter is expected** - Added support for POST /v1/loyalties/members/{memberId}/pending-points/{pendingPointsId}/balance @@ -292,9 +298,9 @@ This SDK is auto-generated (except for tests), so changes made here will be over - `PointsFormula` is supported now - `ManagementProjectsStackingRulesUpdateResponseBody` has many more properties now. - Aligned with the latest OpenAPI definition. -- **2024-05-06** - `8.0.1` +- **2025-05-07** - `8.0.1` - Added OAuth support for Loyalty Pending Points endpoints. -- **2024-05-06** - `8.0.0` +- **2025-05-07** - `8.0.0` - The new version of the SDK includes coverage for all Voucherify endpoints and supports typed models. *Previous versions of the SDK are no longer supported. We highly recommend upgrading to version 8.0.0 or newer, as it is now designated as Long-Term Support (LTS).* diff --git a/package-lock.json b/package-lock.json index 7847c3029..86cd57831 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,7 +37,7 @@ "ts-jest": "29.1.1" }, "engines": { - "node": "^16 || ^18" + "node": "^22" } }, "node_modules/@actions/core": { diff --git a/package.json b/package.json index 4c4550c55..23861ac6a 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "generate-sdk-php": "npm run generate-endpoints-coverage-doc -- --generateFor=php;rm -r ./sdks/php/src;npm run prepare-open-api-for-sdk -- --language=php;java -jar openapi-generator-jar/openapi-generator-cli-7.0.1.jar generate -i ./reference/readonly-sdks/php/OpenAPI.json -g php-nextgen -o ./sdks/php -t ./mustache-templates/php-nextgen --additional-properties=variableNamingConvention=camelCase,developerOrganization=voucherify,developerOrganizationUrl=https://www.voucherify.io/,composerPackageName=rspective/voucherify,artifactVersion=5.0.3;npm run search-and-replace-in-files -- --path=php", "generate-sdk-python": "npm run generate-endpoints-coverage-doc -- --generateFor=python;rm -r ./sdks/python/voucherify_client;npm run prepare-open-api-for-sdk -- --language=python;java -jar openapi-generator-jar/openapi-generator-cli-7.8.0.jar generate -i ./reference/readonly-sdks/python/OpenAPI.json -g python -o ./sdks/python -t ./mustache-templates/python --additional-properties=packageName=voucherify,packageVersion=6.0.0,packageUrl=https://voucherify.io/,projectName=voucherify;npm run search-and-replace-in-files -- --path=python", "generate-sdk-js": "mv ./sdks/js/test ./sdks/js/testToRestore;scripts/clean-js-sdk-files.sh && npm run generate-endpoints-coverage-doc -- --generateFor=js;npm run prepare-open-api-for-sdk -- --language=js;java -jar openapi-generator-jar/openapi-generator-cli-7.16.0.jar generate -i ./reference/readonly-sdks/js/OpenAPI.json -g javascript -o ./sdks/js -t ./mustache-templates/javascript --additional-properties=packageName=@voucherify/sdk,projectVersion=3.0.1,packageUrl=https://voucherify.io/,projectName=voucherify,licenseName=MIT,npmName=@voucherify/sdk,npmRepository=git+https://github.com/voucherifyio/voucherify-js-sdk.git;mv ./sdks/js/test ./sdks/js/testToDelete;mv ./sdks/js/testToRestore ./sdks/js/test;rm -rf ./sdks/js/testToDelete;rm sdks/js/mocha.opts;rm sdks/js/yarn.lock;node scripts/fix-JS-sdk-types.js;node scripts/fix-JS-sdk-required-properties-types.js", - "generate-sdk-dotnet": "mv ./sdks/dotnet/src/Voucherify.Test ./sdks/dotnet/src/TMP.Test;npm run generate-endpoints-coverage-doc -- --generateFor=dotnet; npm run prepare-open-api-for-sdk -- --language=dotnet; java -jar openapi-generator-jar/openapi-generator-cli-7.12.0.jar generate -i ./reference/readonly-sdks/dotnet/OpenAPI.json -g csharp -o ./sdks/dotnet -t ./mustache-templates/csharp --additional-properties=packageCompany=Voucherify,packageCopyright=MIT,packageAuthors=Voucherify,packageTitle=VoucherifySDK,packageName=Voucherify,hideGenerationTimestamp=true,modelPropertyNaming=PascalCase,nullableReferenceTypes=false,netCoreProjectFile=true,useSourceGeneration=false,optionalMethodArgument=true,packageVersion=8.1.0,conditionalSerialization=true,optionalEmitDefaultValues=true,useDateTimeForDate=true,useDateTimeOffset=true,nullableReferenceTypes=false,targetFramework=netstandard2.0; rm -r ./sdks/dotnet/Voucherify.sln;mv ./sdks/dotnet/src/Voucherify.Test ./sdks/dotnet/src/TODELETE.Test;mv ./sdks/dotnet/src/TMP.Test ./sdks/dotnet/src/Voucherify.Test;rm -r ./sdks/dotnet/src/TODELETE.Test;rm -rf ./sdks/dotnet/src/Voucherify/bin;rm -rf ./sdks/dotnet/lib;npm run search-and-replace-in-files -- --path=dotnet;node scripts/fix-enums-in-dotnet.js;ts-node scripts/fix-dotnet-imports.ts;cd sdks/dotnet;dotnet build src/Voucherify/Voucherify.csproj && mv src/Voucherify/bin/Debug lib;nuget pack src/Voucherify/Voucherify.nuspec;cd ../..;", + "generate-sdk-dotnet": "mv ./sdks/dotnet/src/Voucherify.Test ./sdks/dotnet/src/TMP.Test;npm run generate-endpoints-coverage-doc -- --generateFor=dotnet; npm run prepare-open-api-for-sdk -- --language=dotnet; java -jar openapi-generator-jar/openapi-generator-cli-7.12.0.jar generate -i ./reference/readonly-sdks/dotnet/OpenAPI.json -g csharp -o ./sdks/dotnet -t ./mustache-templates/csharp --additional-properties=packageCompany=Voucherify,packageCopyright=MIT,packageAuthors=Voucherify,packageTitle=VoucherifySDK,packageName=Voucherify,hideGenerationTimestamp=true,modelPropertyNaming=PascalCase,nullableReferenceTypes=false,netCoreProjectFile=true,useSourceGeneration=false,optionalMethodArgument=true,packageVersion=9.0.0,conditionalSerialization=true,optionalEmitDefaultValues=true,useDateTimeForDate=true,useDateTimeOffset=true,nullableReferenceTypes=false,targetFramework=netstandard2.0; rm -r ./sdks/dotnet/Voucherify.sln;mv ./sdks/dotnet/src/Voucherify.Test ./sdks/dotnet/src/TODELETE.Test;mv ./sdks/dotnet/src/TMP.Test ./sdks/dotnet/src/Voucherify.Test;rm -r ./sdks/dotnet/src/TODELETE.Test;rm -rf ./sdks/dotnet/src/Voucherify/bin;rm -rf ./sdks/dotnet/lib;npm run search-and-replace-in-files -- --path=dotnet;node scripts/fix-enums-in-dotnet.js;ts-node scripts/fix-dotnet-imports.ts;cd sdks/dotnet;dotnet build src/Voucherify/Voucherify.csproj && mv src/Voucherify/bin/Debug lib;nuget pack src/Voucherify/Voucherify.nuspec;cd ../..;", "generate-sdks": "concurrently \"npm run generate-sdk-ruby\" \"npm run generate-sdk-java\" \"npm run generate-sdk-php\" \"npm run generate-sdk-python\" \"npm run generate-sdk-dotnet\"", "test-sdks": "rm -rf ./logs && mkdir -p logs && (npm run test-dotnet-sdk 2>&1 | tee ./logs/dotnet-tests.log) && echo 'Dotnet SDK test completed - check ./logs/dotnet-tests.log' && (npm run test-ruby-sdk 2>&1 | tee ./logs/ruby-tests.log) && echo 'Ruby SDK test completed - check ./logs/ruby-tests.log' && (npm run test-php-sdk 2>&1 | tee ./logs/php-tests.log) && echo 'Php SDK test completed - check ./logs/php-tests.log' && (npm run test-java-sdk 2>&1 | tee ./logs/java-tests.log) && echo 'Java SDK test completed - check ./logs/java-tests.log' && (npm run test-python-sdk 2>&1 | tee ./logs/python-tests.log) && echo 'Python SDK test completnpmred - check ./logs/python-tests.log'", "test-python-sdk": "mkdir -p logs && rm -f ./logs/python-tests.log && (cd ./sdks/python && docker build -t python . && docker run --rm python) 2>&1 | tee ./logs/python-tests.log && echo 'Python SDK test completed - check ./logs/python-tests.log'", diff --git a/reference/OpenAPI.json b/reference/OpenAPI.json index bba20bd4d..1c88a82b6 100644 --- a/reference/OpenAPI.json +++ b/reference/OpenAPI.json @@ -26902,7 +26902,7 @@ "description": "Type of reward." }, "amount": { - "type": "number", + "type": "integer", "description": "Define the number of `points` to add to a loyalty card or `credits` to the balance on a gift card. In case of the gift card, the value is multiplied by 100 to precisely represent 2 decimal places. For example, $100 amount is written as 10000." } } @@ -100678,4 +100678,4 @@ } } } -} \ No newline at end of file +} diff --git a/reference/readonly-sdks/dotnet/OpenAPI.json b/reference/readonly-sdks/dotnet/OpenAPI.json index ef584a7b7..a61ae9936 100644 --- a/reference/readonly-sdks/dotnet/OpenAPI.json +++ b/reference/readonly-sdks/dotnet/OpenAPI.json @@ -3592,7 +3592,7 @@ "nullable": true } }, - "description": "Response body schema for **POST** `v1/validations`." + "description": "Request body schema for **POST** `v1/validations`." }, "ClientValidationsValidateResponseBody": { "title": "ClientValidationsValidateResponseBody", @@ -19333,12 +19333,6 @@ "type": "object", "description": "Order information.", "properties": { - "created_at": { - "type": "string", - "example": "2021-12-22T10:13:06.487Z", - "description": "Timestamp representing the date and time when the order was created. The value is shown in the ISO 8601 format.", - "format": "date-time" - }, "referrer_id": { "type": "string", "nullable": true, @@ -21741,7 +21735,6 @@ "properties": { "id": { "type": "string", - "example": "prod_0a41bcf807c5fcaaf6", "description": "The product ID." }, "product_id": { @@ -28519,7 +28512,7 @@ "balance": { "type": "integer", "nullable": true, - "description": "The incremental points to be added to the current balance on the loyalty card. and The incremental amout to be added to the current balance on the gift card. The value is multiplied by 100 to represent 2 decimal places. For example `10000 cents` for `$100.00`." + "description": "The incremental points to be added to the current balance on the loyalty card. and The incremental amount to be added to the current balance on the gift card. The value is multiplied by 100 to represent 2 decimal places. For example `10000 cents` for `$100.00`." } }, "nullable": true @@ -28985,14 +28978,6 @@ "nullable": true, "description": "Defines a set of criteria for an `auto-update` or `passive` segment type." }, - "initial_sync_status": { - "type": "string", - "enum": [ - "IN_PROGRESS", - "DONE" - ], - "nullable": true - }, "object": { "type": "string", "description": "The type of the object represented by JSON. This object stores information about the customer segment.", @@ -29042,14 +29027,6 @@ "nullable": true, "description": "Defines a set of criteria for an `auto-update` or `passive` segment type." }, - "initial_sync_status": { - "type": "string", - "enum": [ - "IN_PROGRESS", - "DONE" - ], - "nullable": true - }, "object": { "type": "string", "description": "The type of the object represented by JSON. This object stores information about the customer segment.", @@ -30781,7 +30758,7 @@ "nullable": true } }, - "description": "Response body schema for **POST** `v1/validations`." + "description": "Request body schema for **POST** `v1/validations`." }, "ValidationsValidateResponseBody": { "title": "ValidationsValidateResponseBody", @@ -37420,7 +37397,7 @@ "source": { "type": "string", "nullable": true, - "description": "The channel through which the transaction took place, whether through the API or the the Dashboard. In case of a redemption, this value is null." + "description": "The channel through which the transaction took place, whether through the API or the Dashboard. In case of a redemption, this value is null." }, "reason": { "type": "string", @@ -38011,7 +37988,7 @@ }, "status": { "type": "string", - "description": "Loyalty point point bucket status.", + "description": "Loyalty point bucket status.", "nullable": true }, "expires_at": { @@ -43574,7 +43551,7 @@ "nullable": true }, "amount": { - "type": "string", + "type": "integer", "description": "Define the number of `points` to add to a loyalty card or `credits` to the balance on a gift card. In case of the gift card, the value is multiplied by 100 to precisely represent 2 decimal places. For example, $100 amount is written as 10000.", "nullable": true } @@ -44974,11 +44951,11 @@ "daily": { "title": "ValidityHoursDaily", "type": "array", - "description": "Defines the reccuring period(s) when the resource is active. The periods should not overlap.", + "description": "Defines the recurring period(s) when the resource is active. The periods should not overlap.", "items": { "title": "ValidityHoursDailyItem", "type": "object", - "description": "Defines the reccuring period(s) when the resource will be active.", + "description": "Defines the recurring period(s) when the resource will be active.", "properties": { "start_time": { "type": "string", @@ -45396,7 +45373,7 @@ "source": { "type": "string", "nullable": true, - "description": "The channel through which the transaction took place, whether through the API or the the Dashboard. In case of a redemption, this value is null." + "description": "The channel through which the transaction took place, whether through the API or the Dashboard. In case of a redemption, this value is null." }, "reason": { "type": "string", @@ -49217,7 +49194,7 @@ "source": { "type": "string", "nullable": true, - "description": "The channel through which the transaction took place, whether through the API or the the Dashboard. In case of a redemption, this value is null." + "description": "The channel through which the transaction took place, whether through the API or the Dashboard. In case of a redemption, this value is null." }, "reason": { "type": "string", @@ -52419,7 +52396,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -52821,7 +52799,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -53946,7 +53925,7 @@ "Redemptions" ], "summary": "Redeem Stackable Discounts", - "description": "# How API returns calculated discounts and order amounts in the response\nIn the table below, you can see the logic the API follows to calculate discounts and amounts:\n\n\nAPI keys with a Merchant role cant use this endpoint.\n πŸ“˜ Rollbacks\n You cant roll back a child redemption. When you call rollback on a stacked redemption, all child redemptions will be rolled back. You need to refer to a parent redemption ID in your [rollback request](/api-reference/redemptions/rollback-stackable-redemptions). \n πŸ“˜ Also available on client-side\n This method is also accessible through public keys which you can use in client-side​ apps: mobile and web browser apps. Go to the dedicated [endpoint](/api-reference/client-side/redeem-stackable-discounts-client-side) to learn more.\n - Use X-Client-Application-Id as the application ID header.\n - Use X-Client-Token as the appliction secret key header.\n - Use client-side base URL.\n - Use an origin header for your custom domain.", + "description": "# How API returns calculated discounts and order amounts in the response\nIn the table below, you can see the logic the API follows to calculate discounts and amounts:\n\n\nAPI keys with a Merchant role cant use this endpoint.\n πŸ“˜ Rollbacks\n You cant roll back a child redemption. When you call rollback on a stacked redemption, all child redemptions will be rolled back. You need to refer to a parent redemption ID in your [rollback request](/api-reference/redemptions/rollback-stackable-redemptions). \n πŸ“˜ Also available on client-side\n This method is also accessible through public keys which you can use in client-side​ apps: mobile and web browser apps. Go to the dedicated [endpoint](/api-reference/client-side/redeem-stackable-discounts-client-side) to learn more.", "parameters": [], "security": [ { @@ -54038,7 +54017,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -54116,6 +54096,16 @@ }, { "$ref": "#/components/parameters/ids" + }, + { + "schema": { + "type": "object" + }, + "in": "query", + "name": "filters", + "description": "Object for setting voucher filters. Read [Advanced filters for fetching resources](/api-reference/listing#advanced-filters-for-fetching-resources) for filter examples.", + "style": "deepObject", + "explode": true } ], "security": [ @@ -54452,7 +54442,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -56075,7 +56066,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -57066,7 +57058,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -57152,7 +57145,7 @@ "Vouchers" ], "summary": "Import Vouchers", - "description": "Import generic (standalone) vouchers and gift cards into the repository.\n πŸ“˜ Important notes\n - **Start and expiration dates** need to be provided in compliance with the ISO 8601 norms. For example, 2020-03-11T09:00:00.000Z.\n - Custom code attributes (not supported by-default) need to be added as code **metadata**.\n - You **cannot import the same codes** to a single Voucherify Project.\nAny parameters not provided in the payload will be left blank or null.\nFor both **standalone discount vouchers and gift cards**, you can import the following fields: \n- code\n- category\n- active\n- type\n- start_date\n- expiration_date\n- redemption.quantity\n- additional_info\n- metadata\nFor **gift cards**, you can also import the following field:\n- gift.amount\nFor **discount vouchers**, you can import the discount object. The object will slightly vary depending on the type of discount. Each discount type **requires** the type to be defined in the import.\n\n\nFields other than the ones listed above wont be imported. Even if provided, they will be silently skipped.\nThis API request starts a process that affects Voucherify data in bulk. \nIn case of small jobs (like bulk update) the request is put into a queue and processed once every other bulk request placed in the queue prior to this request is finished. However, when the job takes a longer time (like vouchers generation) then it is processed in small portions in a round-robin fashion. When there is a list of vouchers generation scheduled, then they will all have the IN_PROGRESS status shortly. This way, small jobs added just after scheduling big jobs of the same type will be processed in a short time window. \nThe result will return the async ID. You can verify the status of your request via this [API request](/api-reference/async-actions/get-async-action).\n🚧 Standalone Vouchers and Campaigns\nIn version [v20241004](https://support.voucherify.io/article/23-whats-new-in-voucherify#v20241004), generic (standalone) vouchers created through the Voucherify dashboard create a campaign for that voucher. However, vouchers imported through the dashboard in the Vouchers section or through the API do not have a campaign attached, so the values for campaign and campaign_id are null.", + "description": "Import generic (standalone) vouchers and gift cards into the repository.\nYou can upload up to 100,000 codes to a campaign, as a campaign can have up to 100,000 codes by default. \n Also, the request can include up to **10 MB** of data.\n πŸ“˜ Important notes\n - **Start and expiration dates** need to be provided in compliance with the ISO 8601 norms. For example, 2020-03-11T09:00:00.000Z.\n - Custom code attributes (not supported by-default) need to be added as code **metadata**.\n - You **cannot import the same codes** to a single Voucherify Project.\nAny parameters not provided in the payload will be left blank or null.\nFor both **standalone discount vouchers and gift cards**, you can import the following fields: \n- code\n- category\n- active\n- type\n- start_date\n- expiration_date\n- redemption.quantity\n- additional_info\n- metadata\nFor **gift cards**, you can also import the following field:\n- gift.amount\nFor **discount vouchers**, you can import the discount object. The object will slightly vary depending on the type of discount. Each discount type **requires** the type to be defined in the import.\n\n\nFields other than the ones listed above wont be imported. Even if provided, they will be silently skipped.\nThis API request starts a process that affects Voucherify data in bulk. \nIn case of small jobs (like bulk update) the request is put into a queue and processed once every other bulk request placed in the queue prior to this request is finished. However, when the job takes a longer time (like vouchers generation) then it is processed in small portions in a round-robin fashion. When there is a list of vouchers generation scheduled, then they will all have the IN_PROGRESS status shortly. This way, small jobs added just after scheduling big jobs of the same type will be processed in a short time window. \nThe result will return the async ID. You can verify the status of your request via this [API request](/api-reference/async-actions/get-async-action).\n🚧 Standalone Vouchers and Campaigns\nIn version [v20241004](https://support.voucherify.io/article/23-whats-new-in-voucherify#v20241004), generic (standalone) vouchers created through the Voucherify dashboard create a campaign for that voucher. However, vouchers imported through the dashboard in the Vouchers section or through the API do not have a campaign attached, so the values for campaign and campaign_id are null.", "parameters": [], "security": [ { @@ -57429,7 +57422,7 @@ "Vouchers" ], "summary": "Import Vouchers using CSV", - "description": "Import generic (standalone) vouchers into the repository using a CSV file.\nThe CSV file has to include headers in the first line. All properties listed in the file headers that cannot be mapped to standard voucher fields will be added to the metadata object. \nYou can find an example CSV file [here](https://support.voucherify.io/article/45-import-codes-and-share-them-digitally#coupons).\n___\n πŸ“˜ Standard voucher fields mapping\n - Go to the [import vouchers](/api-reference/vouchers/import-vouchers) endpoint to see all standard CSV fields description (body params section).\n - Supported CSV file headers: Code,Voucher Type,Value,Discount Type,Category,Start Date,Expiration Date,Redemption Limit,Redeemed Quantity, Redeemed Amount,Active,Additional Info,Custom Metadata Property Name\n- **Start and expiration dates** need to be provided in compliance with the ISO 8601 standard. For example, 2020-03-11T09:00:00.000Z. \n - YYYY-MM-DD\n - YYYY-MM-DDTHH\n - YYYY-MM-DDTHH:mm\n - YYYY-MM-DDTHH:mm:ss\n - YYYY-MM-DDTHH:mm:ssZ\n - YYYY-MM-DDTHH:mm:ssZ\n - YYYY-MM-DDTHH:mm:ss.SSSZ\n - Custom code attributes (not supported by-default) need to be added as code **metadata**.\n - You **cannot import the same codes** to a single Voucherify project.\n - You can, however, upload the same codes to update them.\n πŸ“˜ Categories\n In the structure representing your data, you can define a category that the voucher belongs to. You can later use the category of a voucher to group and search by specific criteria in the Dashboard and using the [List Vouchers](/api-reference/vouchers/list-vouchers) endpoint.\nThis API request starts a process that affects Voucherify data in bulk. \nIn case of small jobs (like bulk update) the request is put into a queue and processed once every other bulk request placed in the queue prior to this request is finished. However, when the job takes a longer time (like vouchers generation) then it is processed in small portions in a round-robin fashion. When there is a list of vouchers generation scheduled, then they will all have the IN_PROGRESS status shortly. This way, small jobs added just after scheduling big jobs of the same type will be processed in a short time window. \nThe result will return the async ID. You can verify the status of your request via this [API request](/api-reference/async-actions/get-async-action).\nYou can pass the webhooks_enable true parameter to trigger a webhook sendout for created or updated vouchers. Configure the [respective webhooks](/api-reference/introduction-to-webhooks) in Project settings. For updated webhooks, a webhook is sent even if the voucher hasnt been changed in the CSV file.\n🚧 Generic (standalone) vouchers and campaigns\nIn version [v20241004](https://support.voucherify.io/article/23-whats-new-in-voucherify#v20241004), generic (standalone) vouchers created through the Voucherify dashboard create a campaign for that voucher. However, vouchers imported through the dashboard in the Vouchers section or through the API do not have a campaign attached, so the values for campaign and campaign_id are null.", + "description": "Import generic (standalone) vouchers into the repository using a CSV file.\nThe CSV file has to include headers in the first line. All properties listed in the file headers that cannot be mapped to standard voucher fields will be added to the metadata object.\nYou can upload up to 100,000 codes to a campaign, as a campaign can have up to 100,000 codes by default. \n Also, the request can include a max. **10 MB** CSV file.\nYou can find an example CSV file [here](https://support.voucherify.io/article/45-import-codes-and-share-them-digitally#coupons).\n___\n πŸ“˜ Standard voucher fields mapping\n - Go to the [import vouchers](/api-reference/vouchers/import-vouchers) endpoint to see all standard CSV fields description (body params section).\n - Supported CSV file headers: Code,Voucher Type,Value,Discount Type,Category,Start Date,Expiration Date,Redemption Limit,Redeemed Quantity, Redeemed Amount,Active,Additional Info,Custom Metadata Property Name\n- **Start and expiration dates** need to be provided in compliance with the ISO 8601 standard. For example, 2020-03-11T09:00:00.000Z. \n - YYYY-MM-DD\n - YYYY-MM-DDTHH\n - YYYY-MM-DDTHH:mm\n - YYYY-MM-DDTHH:mm:ss\n - YYYY-MM-DDTHH:mm:ssZ\n - YYYY-MM-DDTHH:mm:ssZ\n - YYYY-MM-DDTHH:mm:ss.SSSZ\n - Custom code attributes (not supported by-default) need to be added as code **metadata**.\n - You **cannot import the same codes** to a single Voucherify project.\n - You can, however, upload the same codes to update them.\n πŸ“˜ Categories\n In the structure representing your data, you can define a category that the voucher belongs to. You can later use the category of a voucher to group and search by specific criteria in the Dashboard and using the [List Vouchers](/api-reference/vouchers/list-vouchers) endpoint.\nThis API request starts a process that affects Voucherify data in bulk. \nIn case of small jobs (like bulk update) the request is put into a queue and processed once every other bulk request placed in the queue prior to this request is finished. However, when the job takes a longer time (like vouchers generation) then it is processed in small portions in a round-robin fashion. When there is a list of vouchers generation scheduled, then they will all have the IN_PROGRESS status shortly. This way, small jobs added just after scheduling big jobs of the same type will be processed in a short time window. \nThe result will return the async ID. You can verify the status of your request via this [API request](/api-reference/async-actions/get-async-action).\nYou can pass the webhooks_enable true parameter to trigger a webhook sendout for created or updated vouchers. Configure the [respective webhooks](/api-reference/introduction-to-webhooks) in Project settings. For updated webhooks, a webhook is sent even if the voucher hasnt been changed in the CSV file.\n🚧 Generic (standalone) vouchers and campaigns\nIn version [v20241004](https://support.voucherify.io/article/23-whats-new-in-voucherify#v20241004), generic (standalone) vouchers created through the Voucherify dashboard create a campaign for that voucher. However, vouchers imported through the dashboard in the Vouchers section or through the API do not have a campaign attached, so the values for campaign and campaign_id are null.", "parameters": [], "security": [ { @@ -57449,7 +57442,8 @@ "$ref": "#/components/schemas/VouchersImportCSVRequestBody" } } - } + }, + "required": true }, "responses": { "202": { @@ -57936,7 +57930,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -58923,7 +58918,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -59106,7 +59102,8 @@ "$ref": "#/components/schemas/CampaignsVouchersCreateInBulkRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -59186,7 +59183,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -59438,7 +59436,8 @@ } } } - } + }, + "required": true }, "responses": { "202": { @@ -59492,7 +59491,8 @@ } } }, - "description": "The file path is stored in the form file header." + "description": "The file path is stored in the form file header.", + "required": true }, "responses": { "200": { @@ -59824,7 +59824,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -60449,7 +60450,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -60636,7 +60638,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -61283,7 +61286,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -61428,7 +61432,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -61751,7 +61756,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -61939,7 +61945,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -62133,7 +62140,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -62225,7 +62233,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -62646,7 +62655,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -64776,7 +64786,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -65467,7 +65478,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -65792,7 +65804,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -66106,7 +66119,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -66532,7 +66546,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -67567,7 +67582,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -67841,7 +67857,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -67937,7 +67954,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -68029,7 +68047,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -68314,7 +68333,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -69199,7 +69219,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -69346,7 +69367,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -69633,7 +69655,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -70832,7 +70855,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -71813,7 +71837,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -72775,7 +72800,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -73033,7 +73059,8 @@ } } } - } + }, + "required": true } }, "delete": { @@ -74509,7 +74536,8 @@ } } } - } + }, + "required": true } } }, @@ -74791,7 +74819,8 @@ } } } - } + }, + "required": true } } }, @@ -75005,7 +75034,8 @@ "$ref": "#/components/schemas/LoyaltiesTiersCreateInBulkRequestBody" } } - } + }, + "required": true } } }, @@ -76376,7 +76406,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -76627,7 +76658,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -76817,7 +76849,8 @@ }, "examples": {} } - } + }, + "required": true }, "responses": { "202": { @@ -76938,7 +76971,8 @@ } } } - } + }, + "required": true }, "responses": { "202": { @@ -76995,7 +77029,8 @@ } } } - } + }, + "required": true }, "responses": { "202": { @@ -78274,7 +78309,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -78457,7 +78493,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -78571,7 +78608,7 @@ "Orders" ], "summary": "Import Orders", - "description": "\n 🚧 Historical orders\n This endpoint should only be used to import historical orders into Voucherify. For on-going synchronization, the [update order](/api-reference/orders/update-order) endpoints should be used. This is critical because this endpoint does not store events or launch distributions.\n# Limitations\n## Import volume\nThere can be only a single on-going order import per tenant per project at a given time. The user can schedule more imports but those extra imports will be scheduled to run in sequence one by one. \n## Maximum count of orders in single import\nThere is a 2000 limit but we might decide to change it to a lower / higher value at any given time depending if we find this value is too high or too low with time.\n# Notifications\nThere are no notifications on the Dashboard because this import is launched via the API.\n# Triggered actions\n \nIf you import orders with customers, then a logic will be scheduled responsible for placing these customers into segments and refreshing the segments summary. Consequently, this update will trigger \n- **customers entering into segments** \n- **distributions** based on any rules tied to customer entering segment(s)\n- **earning rules** based on the customer entering segment(s)\n# What is not triggered\n1. No webhooks are triggered during the import of orders - for both orders and upserted products / SKUs. \n2. Distributions based on Order Update, Order Paid, Order Created and Order Cancelled. In other words if you have a distribution based on Order Paid and you import an order with a PAID status, the distribution is not going to be triggered. \n3. No events are created during the import of orders - for both orders and upserted products / SKUs. In other words you wont see any events in the Activity tab in the Dashboard such as Order created or Order paid. If you are additionally upserting products / SKUs, then you wont see the Product created events listed, etc. \n4. Earning rules based on Order Paid wont be triggered.\nThis API request starts a process that affects Voucherify data in bulk. \nIn case of small jobs (like bulk update) the request is put into a queue and processed once every other bulk request placed in the queue prior to this request is finished. However, when the job takes a longer time (like vouchers generation) then it is processed in small portions in a round-robin fashion. When there is a list of vouchers generation scheduled, then they will all have the IN_PROGRESS status shortly. This way, small jobs added just after scheduling big jobs of the same type will be processed in a short time window. \nThe result will return the async ID. You can verify the status of your request with [GET Async Action](/api-reference/async-actions/get-async-action) endpoint.", + "description": "\n 🚧 Historical orders\n This endpoint should only be used to import historical orders into Voucherify. For on-going synchronization, the [update order](/api-reference/orders/update-order) endpoint should be used. This is critical because this endpoint does not store events or launch distributions.\nThe orders will also have a created_at date thats assigned when theyve been imported to Voucherify. To keep track of the actual order creation date, add an order metadata in ISO 8601 date or date time format to each imported order.\n# Limitations\n## Import volume\nThere can be only a single on-going order import per tenant per project at a given time. The user can schedule more imports but those extra imports will be scheduled to run in sequence one by one. \n## Maximum count of orders in single import\nThere is a 2000 limit of orders per one request.\n# Notifications\nThere are no notifications on the Dashboard because this import is launched via the API.\n# Triggered actions\n \nIf you import orders with customers, then a logic will be scheduled responsible for placing these customers into segments and refreshing the segments summary. Consequently, this update will trigger \n- Customers entering into segments\n- Distributions based on any rules tied to customer entering segment(s)\n- Earning rules based on the customer entering segment(s)\n# What is not triggered\n1. No webhooks are triggered during the import of orders - for both orders and upserted products / SKUs. \n2. Distributions based on Order Update, Order Paid, Order Created and Order Cancelled. In other words if you have a distribution based on Order Paid and you import an order with a PAID status, the distribution is not going to be triggered. \n3. No events are created during the import of orders - for both orders and upserted products / SKUs. In other words you wont see any events in the Activity tab in the Dashboard such as Order created or Order paid. If you are additionally upserting products / SKUs, then you wont see the Product created events listed, etc. \n4. Earning rules based on Order Paid wont be triggered.\nThis API request starts a process that affects Voucherify data in bulk. \nIn case of small jobs (like bulk update) the request is put into a queue and processed once every other bulk request placed in the queue prior to this request is finished. However, when the job takes a longer time (like vouchers generation) then it is processed in small portions in a round-robin fashion. When there is a list of vouchers generation scheduled, then they will all have the IN_PROGRESS status shortly. This way, small jobs added just after scheduling big jobs of the same type will be processed in a short time window. \nThe result will return the async ID. You can verify the status of your request with [GET Async Action](/api-reference/async-actions/get-async-action) endpoint.", "parameters": [], "security": [ { @@ -78841,7 +78878,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -78943,7 +78981,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -79210,7 +79249,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -79388,7 +79428,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -79526,7 +79567,8 @@ } } } - } + }, + "required": true }, "responses": { "202": { @@ -79590,7 +79632,8 @@ } } } - } + }, + "required": true }, "responses": { "202": { @@ -79866,7 +79909,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -79961,7 +80005,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -80061,7 +80106,8 @@ "$ref": "#/components/schemas/ProductsImportCSVRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -80111,7 +80157,8 @@ "$ref": "#/components/schemas/SkusImportCSVRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -80375,9 +80422,47 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ProductCollectionsCreateRequestBody" + }, + "examples": { + "Create static collection": { + "value": { + "type": "STATIC", + "name": "Static collection example", + "products": [ + { + "id": "prod_0a41dd45dc85fcab40", + "object": "product" + } + ] + } + }, + "Create dynamic collection": { + "value": { + "type": "AUTO_UPDATE", + "name": "Voucherify example collection", + "filter": { + "junction": "and", + "metadata.brand": { + "conditions": { + "$is": [ + "Voucherify" + ] + } + }, + "price": { + "conditions": { + "$more_than": [ + 5000 + ] + } + } + } + } + } } } - } + }, + "required": true } } }, @@ -81031,7 +81116,8 @@ } } }, - "description": "Specify the validation rules parameters." + "description": "Specify the validation rules parameters.", + "required": true }, "responses": { "200": { @@ -81294,7 +81380,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -81712,7 +81799,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -81960,7 +82048,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -82085,7 +82174,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -82769,7 +82859,8 @@ "$ref": "#/components/schemas/ExportsCreateRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -83191,7 +83282,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -83330,7 +83422,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -84717,7 +84810,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -84984,7 +85078,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -85438,7 +85533,8 @@ "$ref": "#/components/schemas/TemplatesCampaignsCreateRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -85547,7 +85643,8 @@ "$ref": "#/components/schemas/TemplatesCampaignsUpdateRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -85648,7 +85745,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -85801,7 +85899,8 @@ "$ref": "#/components/schemas/TemplatesCampaignsTierSetupCreateRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -85907,7 +86006,8 @@ "$ref": "#/components/schemas/ManagementProjectsCreateRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -86458,7 +86558,8 @@ "$ref": "#/components/schemas/ManagementProjectsUpdateRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -86616,7 +86717,8 @@ "$ref": "#/components/schemas/ManagementProjectsUsersAssignRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -86801,7 +86903,8 @@ "$ref": "#/components/schemas/ManagementProjectsUsersUpdateRoleRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -86879,7 +86982,8 @@ "$ref": "#/components/schemas/ManagementProjectsUsersInviteCreateRequestBody" } } - } + }, + "required": true }, "responses": { "204": { @@ -87037,7 +87141,8 @@ "$ref": "#/components/schemas/ManagementProjectsTemplatesCampaignsCopyCreateRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -87099,7 +87204,8 @@ "$ref": "#/components/schemas/ManagementProjectsStackingRulesCreateRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -87341,7 +87447,8 @@ "$ref": "#/components/schemas/ManagementProjectsStackingRulesUpdateRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -87452,7 +87559,8 @@ "$ref": "#/components/schemas/ManagementProjectsMetadataSchemasCreateRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -87914,7 +88022,8 @@ "$ref": "#/components/schemas/ManagementProjectsMetadataSchemasUpdateRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -88010,7 +88119,8 @@ "$ref": "#/components/schemas/ManagementProjectsCustomEventSchemasCreateRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -88196,7 +88306,8 @@ "$ref": "#/components/schemas/ManagementProjectsCustomEventSchemasUpdateRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -88293,7 +88404,8 @@ "$ref": "#/components/schemas/ManagementProjectsWebhooksCreateRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -88501,7 +88613,8 @@ "$ref": "#/components/schemas/ManagementProjectsWebhooksUpdateRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -88619,7 +88732,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -88844,7 +88958,8 @@ "$ref": "#/components/schemas/ManagementProjectsBrandingUpdateRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -88947,7 +89062,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -89006,7 +89122,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -89071,7 +89188,8 @@ } } } - } + }, + "required": true }, "responses": { "204": { @@ -89107,7 +89225,8 @@ "$ref": "#/components/schemas/ClientQualificationsCheckEligibilityRequestBody" } } - } + }, + "required": true }, "responses": { "200": { @@ -89457,7 +89576,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -89619,7 +89739,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -89703,7 +89824,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { diff --git a/scripts/generate-endpoints-coverage-doc.ts b/scripts/generate-endpoints-coverage-doc.ts index d0a32a239..8475b01b4 100644 --- a/scripts/generate-endpoints-coverage-doc.ts +++ b/scripts/generate-endpoints-coverage-doc.ts @@ -179,7 +179,7 @@ const main = async (generateFor: GenerateForOption) => { tags: methodContent.tags, summary: methodContent.summary, isDeprecated: - methodContent.summary.toLowerCase().includes("deprecated") || false, + methodContent.deprecated || false, supported: { [generateFor]: supported, }, diff --git a/scripts/prepare-open-api-for-sdk/index.ts b/scripts/prepare-open-api-for-sdk/index.ts index b2d05d4bf..e94777a6f 100644 --- a/scripts/prepare-open-api-for-sdk/index.ts +++ b/scripts/prepare-open-api-for-sdk/index.ts @@ -63,7 +63,7 @@ const supportedLanguages: { name: "dotnet", supportOauth: true, removeAllSchemasDefaults: true, - breakingChangesVersion: 2, + breakingChangesVersion: 4, }, js: { name: "js", @@ -388,29 +388,29 @@ const main = async (languageOptions: LanguageOptions) => { ); // Restore previous voucher_type filter openAPIContent.components.schemas.ParameterFiltersListCampaigns.properties.voucher_type = - { - type: "object", - description: "Filter by voucher type", - properties: { - conditions: { - $ref: "#/components/schemas/FilterConditionsString", + { + type: "object", + description: "Filter by voucher type", + properties: { + conditions: { + $ref: "#/components/schemas/FilterConditionsString", + }, }, - }, - }; + }; // Restore previous is_referral_code filter openAPIContent.components.schemas.ParameterFiltersListCampaigns.properties.is_referral_code.properties = - { - $is: { - type: "string", - description: "Value is exactly this value (single value).", - enum: ["TRUE", "FALSE"], - }, - $is_not: { - type: "string", - description: "Results omit this value (single value).", - enum: ["TRUE", "FALSE"], - }, - }; + { + $is: { + type: "string", + description: "Value is exactly this value (single value).", + enum: ["TRUE", "FALSE"], + }, + $is_not: { + type: "string", + description: "Results omit this value (single value).", + enum: ["TRUE", "FALSE"], + }, + }; // Remove new conditions – $contains, $not_contain from FilterConditionsString delete openAPIContent.components.schemas.FilterConditionsString.properties .$contains; @@ -422,29 +422,35 @@ const main = async (languageOptions: LanguageOptions) => { }; } if (languageOptions.breakingChangesVersion <= 2) { - //ADD MORE TO IT ONCE DOTNET IS RELEASED // Restore faulty type for referee_reward.amount - openAPIContent.components.schemas.ReferralProgram.properties.referee_reward.properties.amount.type = "string"; + openAPIContent.components.schemas.ReferralProgram.properties.referee_reward.properties.amount.type = + "string"; // Restore `initial_sync_status` openAPIContent.components.schemas.Segment.properties[ "initial_sync_status" ] = { type: "string", - enum: [ - "IN_PROGRESS", - "DONE" - ], - } - // Restore `created_at` to POST `v1/orders/import` - openAPIContent.components.schemas.OrdersImportCreateRequestBody.items.allOf[1].properties.created_at = { - type: "string", - description: "Timestamp representing the date and time when the order was created. The value is shown in the ISO 8601 format.", - format: "date-time" + enum: ["IN_PROGRESS", "DONE"], }; + // Restore `created_at` to POST `v1/orders/import` + openAPIContent.components.schemas.OrdersImportCreateRequestBody.items.allOf[1].properties.created_at = + { + type: "string", + description: + "Timestamp representing the date and time when the order was created. The value is shown in the ISO 8601 format.", + format: "date-time", + }; + } + if (languageOptions.breakingChangesVersion <= 3) { + openAPIContent.components.schemas.ReferralProgram.properties.referee_reward.properties.amount.type = + "number"; + openApi.paths["/v1/vouchers"].get.parameters = openApi.paths[ + "/v1/vouchers" + ].get.parameters.filter((e) => e.name !== "filters"); + } + if (languageOptions.breakingChangesVersion <= 4) { + //ADD MORE TO IT ONCE DOTNET IS RELEASED } - openApi.paths["/v1/vouchers"].get.parameters = openApi.paths[ - "/v1/vouchers" - ].get.parameters.filter((e) => e.name !== "filters"); ////////////////////////////////////////////////////////////////////////////// ///////////////////////////END OF BREAKING CHANGES//////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -577,9 +583,9 @@ const main = async (languageOptions: LanguageOptions) => { }; }); newOpenApiFile.components.schemas.OrdersListResponseBody.properties.orders.items = - { - $ref: "#/components/schemas/OrderCalculated", - }; + { + $ref: "#/components/schemas/OrderCalculated", + }; newOpenApiFile.components.schemas.LoyaltiesMembersPointsExpirationListResponseBody.properties.data.items = newOpenApiFile.components.schemas.LoyaltyPointsBucket; newOpenApiFile.components.schemas.LoyaltyCardTransaction.properties.details.properties.balance = @@ -588,7 +594,8 @@ const main = async (languageOptions: LanguageOptions) => { newOpenApiFile.components.schemas.VoucherBalance; if (languageOptions.name === "dotnet") { - newOpenApiFile.paths['/v1/products/{productId}/skus'].get.operationId = 'list-skus-in-product' + newOpenApiFile.paths["/v1/products/{productId}/skus"].get.operationId = + "list-skus-in-product"; } //NOTHING MORE HERE! } @@ -609,10 +616,12 @@ const main = async (languageOptions: LanguageOptions) => { newOpenApiFile.paths[path][method].requestBody.required = true; } } - //NOTHING MORE HERE! } - //!!!!!!!!!!!!!!!!!!!TYPE MORE BREAKING CHANGES BELOW!!!!!!!!!!!!!!!!!!!!!!!!! - + if (languageOptions.breakingChangesVersion <= 3) { + //!!!!!!!!!!!!!!!!!!!TYPE MORE BREAKING CHANGES BELOW!!!!!!!!!!!!!!!!!!!!!!!!! + // + // + } ////////////////////////////////////////////////////////////////////////////// ///////////////////////////END OF BREAKING CHANGES//////////////////////////// ////////////////////////////////////////////////////////////////////////////// diff --git a/sdks/dotnet b/sdks/dotnet index 17a00b236..131012a8e 160000 --- a/sdks/dotnet +++ b/sdks/dotnet @@ -1 +1 @@ -Subproject commit 17a00b2363df548a00ca41e968a009fc801a85ba +Subproject commit 131012a8ecce971e5d2b1d931919282baf7dcad1