From 6bb97671e7df7bfbcc2be71ad9dbccda7e1bc485 Mon Sep 17 00:00:00 2001 From: Amisha Prabhat <55580080+Aprabhat19@users.noreply.github.com> Date: Tue, 27 Aug 2024 13:23:46 +0530 Subject: [PATCH] feat(openapi): Add open api routes for routing v2 (#5686) Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com> --- ...ss-profile--activate-routing-algorithm.mdx | 3 + ...-profile--deactivate-routing-algorithm.mdx | 3 + ...ile--retrieve-active-routing-algorithm.mdx | 3 + ...eve-default-fallback-routing-algorithm.mdx | 3 + ...ate-default-fallback-routing-algorithm.mdx | 3 + .../api-reference/routing/routing--create.mdx | 3 + .../routing/routing--retrieve.mdx | 3 + api-reference-v2/mint.json | 14 +- api-reference-v2/openapi_spec.json | 421 ++++++++++++++++++ api-reference/openapi_spec.json | 8 +- crates/api_models/src/routing.rs | 8 +- crates/openapi/src/openapi_v2.rs | 12 + crates/openapi/src/routes/business_profile.rs | 118 +++++ crates/openapi/src/routes/routing.rs | 63 ++- crates/router/src/core/routing.rs | 15 +- crates/router/src/routes/routing.rs | 8 +- 16 files changed, 665 insertions(+), 23 deletions(-) create mode 100644 api-reference-v2/api-reference/business-profile/business-profile--activate-routing-algorithm.mdx create mode 100644 api-reference-v2/api-reference/business-profile/business-profile--deactivate-routing-algorithm.mdx create mode 100644 api-reference-v2/api-reference/business-profile/business-profile--retrieve-active-routing-algorithm.mdx create mode 100644 api-reference-v2/api-reference/business-profile/business-profile--retrieve-default-fallback-routing-algorithm.mdx create mode 100644 api-reference-v2/api-reference/business-profile/business-profile--update-default-fallback-routing-algorithm.mdx create mode 100644 api-reference-v2/api-reference/routing/routing--create.mdx create mode 100644 api-reference-v2/api-reference/routing/routing--retrieve.mdx diff --git a/api-reference-v2/api-reference/business-profile/business-profile--activate-routing-algorithm.mdx b/api-reference-v2/api-reference/business-profile/business-profile--activate-routing-algorithm.mdx new file mode 100644 index 000000000000..9ff6f4fdd578 --- /dev/null +++ b/api-reference-v2/api-reference/business-profile/business-profile--activate-routing-algorithm.mdx @@ -0,0 +1,3 @@ +--- +openapi: patch /v2/profiles/{profile_id}/activate_routing_algorithm +--- \ No newline at end of file diff --git a/api-reference-v2/api-reference/business-profile/business-profile--deactivate-routing-algorithm.mdx b/api-reference-v2/api-reference/business-profile/business-profile--deactivate-routing-algorithm.mdx new file mode 100644 index 000000000000..5cc815612e03 --- /dev/null +++ b/api-reference-v2/api-reference/business-profile/business-profile--deactivate-routing-algorithm.mdx @@ -0,0 +1,3 @@ +--- +openapi: patch /v2/profiles/{profile_id}/deactivate_routing_algorithm +--- \ No newline at end of file diff --git a/api-reference-v2/api-reference/business-profile/business-profile--retrieve-active-routing-algorithm.mdx b/api-reference-v2/api-reference/business-profile/business-profile--retrieve-active-routing-algorithm.mdx new file mode 100644 index 000000000000..7aba27485eda --- /dev/null +++ b/api-reference-v2/api-reference/business-profile/business-profile--retrieve-active-routing-algorithm.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /v2/profiles/{profile_id}/routing_algorithm +--- \ No newline at end of file diff --git a/api-reference-v2/api-reference/business-profile/business-profile--retrieve-default-fallback-routing-algorithm.mdx b/api-reference-v2/api-reference/business-profile/business-profile--retrieve-default-fallback-routing-algorithm.mdx new file mode 100644 index 000000000000..9b1b94290777 --- /dev/null +++ b/api-reference-v2/api-reference/business-profile/business-profile--retrieve-default-fallback-routing-algorithm.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /v2/profiles/{profile_id}/fallback_routing +--- \ No newline at end of file diff --git a/api-reference-v2/api-reference/business-profile/business-profile--update-default-fallback-routing-algorithm.mdx b/api-reference-v2/api-reference/business-profile/business-profile--update-default-fallback-routing-algorithm.mdx new file mode 100644 index 000000000000..ca4cb5f8fe25 --- /dev/null +++ b/api-reference-v2/api-reference/business-profile/business-profile--update-default-fallback-routing-algorithm.mdx @@ -0,0 +1,3 @@ +--- +openapi: post /v2/profiles/{profile_id}/fallback_routing +--- \ No newline at end of file diff --git a/api-reference-v2/api-reference/routing/routing--create.mdx b/api-reference-v2/api-reference/routing/routing--create.mdx new file mode 100644 index 000000000000..65ef15008f24 --- /dev/null +++ b/api-reference-v2/api-reference/routing/routing--create.mdx @@ -0,0 +1,3 @@ +--- +openapi: post /v2/routing_algorithm +--- \ No newline at end of file diff --git a/api-reference-v2/api-reference/routing/routing--retrieve.mdx b/api-reference-v2/api-reference/routing/routing--retrieve.mdx new file mode 100644 index 000000000000..03f209951c03 --- /dev/null +++ b/api-reference-v2/api-reference/routing/routing--retrieve.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /v2/routing_algorithm/{routing_algorithm_id} +--- \ No newline at end of file diff --git a/api-reference-v2/mint.json b/api-reference-v2/mint.json index b93e4e60006f..27bc39d07622 100644 --- a/api-reference-v2/mint.json +++ b/api-reference-v2/mint.json @@ -63,7 +63,19 @@ "pages": [ "api-reference/business-profile/business-profile--create", "api-reference/business-profile/business-profile--update", - "api-reference/business-profile/business-profile--retrieve" + "api-reference/business-profile/business-profile--retrieve", + "api-reference/business-profile/business-profile--activate-routing-algorithm", + "api-reference/business-profile/business-profile--retrieve-active-routing-algorithm", + "api-reference/business-profile/business-profile--deactivate-routing-algorithm", + "api-reference/business-profile/business-profile--update-default-fallback-routing-algorithm", + "api-reference/business-profile/business-profile--retrieve-default-fallback-routing-algorithm" + ] + }, + { + "group": "Routing", + "pages": [ + "api-reference/routing/routing--create", + "api-reference/routing/routing--retrieve" ] } ], diff --git a/api-reference-v2/openapi_spec.json b/api-reference-v2/openapi_spec.json index f0be48afecd1..bdbdd9aec776 100644 --- a/api-reference-v2/openapi_spec.json +++ b/api-reference-v2/openapi_spec.json @@ -718,6 +718,416 @@ } ] } + }, + "/v2/profiles/{profile_id}/activate_routing_algorithm": { + "patch": { + "tags": [ + "Business Profile" + ], + "summary": "Business Profile - Activate routing algorithm", + "description": "Business Profile - Activate routing algorithm\n\nActivates a routing algorithm under a business profile", + "operationId": "Activates a routing algorithm under a business profile", + "parameters": [ + { + "name": "profile_id", + "in": "path", + "description": "The unique identifier for the business profile", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoutingAlgorithmId" + }, + "examples": { + "Activate a routing algorithm": { + "value": { + "routing_algorithm_id": "routing_algorithm_123" + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Routing Algorithm is activated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoutingDictionaryRecord" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "404": { + "description": "Resource missing" + }, + "500": { + "description": "Internal server error" + } + }, + "security": [ + { + "api_key": [] + }, + { + "jwt_key": [] + } + ] + } + }, + "/v2/profiles/{profile_id}/deactivate_routing_algorithm": { + "patch": { + "tags": [ + "Business Profile" + ], + "summary": "Business Profile - Deactivate routing algorithm", + "description": "Business Profile - Deactivate routing algorithm\n\nDeactivates a routing algorithm under a business profile", + "operationId": " Deactivates a routing algorithm under a business profile", + "parameters": [ + { + "name": "profile_id", + "in": "path", + "description": "The unique identifier for the business profile", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully deactivated routing config", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoutingDictionaryRecord" + } + } + } + }, + "400": { + "description": "Malformed request" + }, + "403": { + "description": "Malformed request" + }, + "422": { + "description": "Unprocessable request" + }, + "500": { + "description": "Internal server error" + } + }, + "security": [ + { + "api_key": [] + }, + { + "jwt_key": [] + } + ] + } + }, + "/v2/profiles/{profile_id}/fallback_routing": { + "post": { + "tags": [ + "Business Profile" + ], + "summary": "Business Profile - Update Default Fallback Routing Algorithm", + "description": "Business Profile - Update Default Fallback Routing Algorithm\n\nUpdate the default fallback routing algorithm for the business profile", + "operationId": "Update the default fallback routing algorithm for the business profile", + "parameters": [ + { + "name": "profile_id", + "in": "path", + "description": "The unique identifier for the business profile", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RoutableConnectorChoice" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successfully updated the default fallback routing algorithm", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RoutableConnectorChoice" + } + } + } + } + }, + "400": { + "description": "Malformed request" + }, + "422": { + "description": "Unprocessable request" + }, + "500": { + "description": "Internal server error" + } + }, + "security": [ + { + "api_key": [] + }, + { + "jwt_key": [] + } + ] + }, + "get": { + "tags": [ + "Business Profile" + ], + "summary": "Business Profile - Retrieve Default Fallback Routing Algorithm", + "description": "Business Profile - Retrieve Default Fallback Routing Algorithm\n\nRetrieve the default fallback routing algorithm for the business profile", + "operationId": "Retrieve the default fallback routing algorithm for the business profile", + "parameters": [ + { + "name": "profile_id", + "in": "path", + "description": "The unique identifier for the business profile", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved default fallback routing algorithm", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RoutableConnectorChoice" + } + } + } + } + }, + "500": { + "description": "Internal server error" + } + }, + "security": [ + { + "api_key": [] + }, + { + "jwt_key": [] + } + ] + } + }, + "/v2/profiles/{profile_id}/routing_algorithm": { + "get": { + "tags": [ + "Business Profile" + ], + "summary": "Business Profile - Retrieve Active Routing Algorithm", + "description": "Business Profile - Retrieve Active Routing Algorithm\n\nRetrieve active routing algorithm under the business profile", + "operationId": "Retrieve the active routing algorithm under the business profile", + "parameters": [ + { + "name": "profile_id", + "in": "path", + "description": "The unique identifier for the business profile", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "The number of records of the algorithms to be returned", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "nullable": true, + "minimum": 0 + } + }, + { + "name": "offset", + "in": "query", + "description": "The record offset of the algorithm from which to start gathering the results", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "nullable": true, + "minimum": 0 + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved active config", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LinkedRoutingConfigRetrieveResponse" + } + } + } + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Resource missing" + }, + "500": { + "description": "Internal server error" + } + }, + "security": [ + { + "api_key": [] + }, + { + "jwt_key": [] + } + ] + } + }, + "/v2/routing_algorithm": { + "post": { + "tags": [ + "Routing" + ], + "summary": "Routing - Create", + "description": "Routing - Create\n\nCreate a routing algorithm", + "operationId": "Create a routing algprithm", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoutingConfigRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Routing Algorithm created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoutingDictionaryRecord" + } + } + } + }, + "400": { + "description": "Request body is malformed" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Resource missing" + }, + "422": { + "description": "Unprocessable request" + }, + "500": { + "description": "Internal server error" + } + }, + "security": [ + { + "api_key": [] + }, + { + "jwt_key": [] + } + ] + } + }, + "/v2/routing_algorithm/{routing_algorithm_id}": { + "get": { + "tags": [ + "Routing" + ], + "summary": "Routing - Retrieve", + "description": "Routing - Retrieve\n\nRetrieve a routing algorithm with its algorithm id", + "operationId": "Retrieve a routing algorithm with its algorithm id", + "parameters": [ + { + "name": "routing_algorithm_id", + "in": "path", + "description": "The unique identifier for a routing algorithm", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully fetched routing algorithm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MerchantRoutingAlgorithm" + } + } + } + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Resource missing" + }, + "500": { + "description": "Internal server error" + } + }, + "security": [ + { + "api_key": [] + }, + { + "jwt_key": [] + } + ] + } } }, "components": { @@ -16479,6 +16889,17 @@ "propertyName": "type" } }, + "RoutingAlgorithmId": { + "type": "object", + "required": [ + "routing_algorithm_id" + ], + "properties": { + "routing_algorithm_id": { + "type": "string" + } + } + }, "RoutingAlgorithmKind": { "type": "string", "enum": [ diff --git a/api-reference/openapi_spec.json b/api-reference/openapi_spec.json index 682814f08d7e..cfd2fe43503d 100644 --- a/api-reference/openapi_spec.json +++ b/api-reference/openapi_spec.json @@ -3487,7 +3487,7 @@ ] } }, - "/routing/{algorithm_id}/activate": { + "/routing/{routing_algorithm_id}/activate": { "post": { "tags": [ "Routing" @@ -3497,7 +3497,7 @@ "operationId": "Activate a routing config", "parameters": [ { - "name": "algorithm_id", + "name": "routing_algorithm_id", "in": "path", "description": "The unique identifier for a config", "required": true, @@ -3537,7 +3537,7 @@ ] } }, - "/routing/{algorithm_id}": { + "/routing/{routing_algorithm_id}": { "get": { "tags": [ "Routing" @@ -3547,7 +3547,7 @@ "operationId": "Retrieve a routing config", "parameters": [ { - "name": "algorithm_id", + "name": "routing_algorithm_id", "in": "path", "description": "The unique identifier for a config", "required": true, diff --git a/crates/api_models/src/routing.rs b/crates/api_models/src/routing.rs index 04ca1fd44293..2c52f726c862 100644 --- a/crates/api_models/src/routing.rs +++ b/crates/api_models/src/routing.rs @@ -478,10 +478,10 @@ pub enum RoutingKind { RoutingAlgorithm(Vec), } -#[repr(transparent)] -#[derive(serde::Serialize, serde::Deserialize, Debug, Clone)] -#[serde(transparent)] -pub struct RoutingAlgorithmId(pub String); +#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, ToSchema)] +pub struct RoutingAlgorithmId { + pub routing_algorithm_id: String, +} #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct RoutingLinkWrapper { diff --git a/crates/openapi/src/openapi_v2.rs b/crates/openapi/src/openapi_v2.rs index f516839950c2..2b02ec7f715e 100644 --- a/crates/openapi/src/openapi_v2.rs +++ b/crates/openapi/src/openapi_v2.rs @@ -89,6 +89,17 @@ Never share your secret api keys. Keep them guarded and secure. routes::business_profile::business_profile_create, routes::business_profile::business_profile_retrieve, routes::business_profile::business_profile_update, + + // Routes for routing under business profile + routes::business_profile::routing_link_config, + routes::business_profile::routing_unlink_config, + routes::business_profile::routing_update_default_config, + routes::business_profile::routing_retrieve_default_config, + routes::business_profile::routing_retrieve_linked_config, + + // Routes for routing + routes::routing::routing_create_config, + routes::routing::routing_retrieve_config, ), components(schemas( common_utils::types::MinorUnit, @@ -452,6 +463,7 @@ Never share your secret api keys. Keep them guarded and secure. api_models::routing::ast::ValueType, api_models::routing::ast::MetadataValue, api_models::routing::ast::NumberComparison, + api_models::routing::RoutingAlgorithmId, api_models::payment_methods::RequestPaymentMethodTypes, api_models::payments::PaymentLinkStatus, api_models::blocklist::BlocklistRequest, diff --git a/crates/openapi/src/routes/business_profile.rs b/crates/openapi/src/routes/business_profile.rs index ac0a4c67768c..07442f9757ad 100644 --- a/crates/openapi/src/routes/business_profile.rs +++ b/crates/openapi/src/routes/business_profile.rs @@ -205,3 +205,121 @@ pub async fn business_profile_retrieve() {} security(("admin_api_key" = [])) )] pub async fn business_profile_retrieve() {} + +#[cfg(feature = "v2")] +/// Business Profile - Retrieve Active Routing Algorithm +/// +/// Retrieve active routing algorithm under the business profile +#[utoipa::path( + get, + path = "/v2/profiles/{profile_id}/routing_algorithm", + params( + ("profile_id" = String, Path, description = "The unique identifier for the business profile"), + ("limit" = Option, Query, description = "The number of records of the algorithms to be returned"), + ("offset" = Option, Query, description = "The record offset of the algorithm from which to start gathering the results")), + responses( + (status = 200, description = "Successfully retrieved active config", body = LinkedRoutingConfigRetrieveResponse), + (status = 500, description = "Internal server error"), + (status = 404, description = "Resource missing"), + (status = 403, description = "Forbidden") + ), + tag = "Business Profile", + operation_id = "Retrieve the active routing algorithm under the business profile", + security(("api_key" = []), ("jwt_key" = [])) +)] +pub async fn routing_retrieve_linked_config() {} +#[cfg(feature = "v2")] +/// Business Profile - Activate routing algorithm +/// +/// Activates a routing algorithm under a business profile +#[utoipa::path( + patch, + path = "/v2/profiles/{profile_id}/activate_routing_algorithm", + request_body ( content = RoutingAlgorithmId, + examples( ( + "Activate a routing algorithm" = ( + value = json!({ + "routing_algorithm_id": "routing_algorithm_123" + }) + ) + ))), + params( + ("profile_id" = String, Path, description = "The unique identifier for the business profile"), + ), + responses( + (status = 200, description = "Routing Algorithm is activated", body = RoutingDictionaryRecord), + (status = 500, description = "Internal server error"), + (status = 404, description = "Resource missing"), + (status = 400, description = "Bad request") + ), + tag = "Business Profile", + operation_id = "Activates a routing algorithm under a business profile", + security(("api_key" = []), ("jwt_key" = [])) +)] +pub async fn routing_link_config() {} + +#[cfg(feature = "v2")] +/// Business Profile - Deactivate routing algorithm +/// +/// Deactivates a routing algorithm under a business profile +#[utoipa::path( + patch, + path = "/v2/profiles/{profile_id}/deactivate_routing_algorithm", + params( + ("profile_id" = String, Path, description = "The unique identifier for the business profile"), + ), + responses( + (status = 200, description = "Successfully deactivated routing config", body = RoutingDictionaryRecord), + (status = 500, description = "Internal server error"), + (status = 400, description = "Malformed request"), + (status = 403, description = "Malformed request"), + (status = 422, description = "Unprocessable request") + ), + tag = "Business Profile", + operation_id = " Deactivates a routing algorithm under a business profile", + security(("api_key" = []), ("jwt_key" = [])) +)] +pub async fn routing_unlink_config() {} + +#[cfg(feature = "v2")] +/// Business Profile - Update Default Fallback Routing Algorithm +/// +/// Update the default fallback routing algorithm for the business profile +#[utoipa::path( + post, + path = "/v2/profiles/{profile_id}/fallback_routing", + request_body = Vec, + params( + ("profile_id" = String, Path, description = "The unique identifier for the business profile"), + ), + responses( + (status = 200, description = "Successfully updated the default fallback routing algorithm", body = Vec), + (status = 500, description = "Internal server error"), + (status = 400, description = "Malformed request"), + (status = 422, description = "Unprocessable request") + ), + tag = "Business Profile", + operation_id = "Update the default fallback routing algorithm for the business profile", + security(("api_key" = []), ("jwt_key" = [])) +)] +pub async fn routing_update_default_config() {} + +#[cfg(feature = "v2")] +/// Business Profile - Retrieve Default Fallback Routing Algorithm +/// +/// Retrieve the default fallback routing algorithm for the business profile +#[utoipa::path( + get, + path = "/v2/profiles/{profile_id}/fallback_routing", + params( + ("profile_id" = String, Path, description = "The unique identifier for the business profile"), + ), + responses( + (status = 200, description = "Successfully retrieved default fallback routing algorithm", body = Vec), + (status = 500, description = "Internal server error") + ), + tag = "Business Profile", + operation_id = "Retrieve the default fallback routing algorithm for the business profile", + security(("api_key" = []), ("jwt_key" = [])) +)] +pub async fn routing_retrieve_default_config() {} diff --git a/crates/openapi/src/routes/routing.rs b/crates/openapi/src/routes/routing.rs index ecfac39f9e9a..5e1e3f60c627 100644 --- a/crates/openapi/src/routes/routing.rs +++ b/crates/openapi/src/routes/routing.rs @@ -1,3 +1,4 @@ +#[cfg(feature = "v1")] /// Routing - Create /// /// Create a routing config @@ -19,14 +20,37 @@ )] pub async fn routing_create_config() {} +#[cfg(feature = "v2")] +/// Routing - Create +/// +/// Create a routing algorithm +#[utoipa::path( + post, + path = "/v2/routing_algorithm", + request_body = RoutingConfigRequest, + responses( + (status = 200, description = "Routing Algorithm created", body = RoutingDictionaryRecord), + (status = 400, description = "Request body is malformed"), + (status = 500, description = "Internal server error"), + (status = 404, description = "Resource missing"), + (status = 422, description = "Unprocessable request"), + (status = 403, description = "Forbidden"), + ), + tag = "Routing", + operation_id = "Create a routing algprithm", + security(("api_key" = []), ("jwt_key" = [])) +)] +pub async fn routing_create_config() {} + +#[cfg(feature = "v1")] /// Routing - Activate config /// /// Activate a routing config #[utoipa::path( post, - path = "/routing/{algorithm_id}/activate", + path = "/routing/{routing_algorithm_id}/activate", params( - ("algorithm_id" = String, Path, description = "The unique identifier for a config"), + ("routing_algorithm_id" = String, Path, description = "The unique identifier for a config"), ), responses( (status = 200, description = "Routing config activated", body = RoutingDictionaryRecord), @@ -40,15 +64,16 @@ pub async fn routing_create_config() {} )] pub async fn routing_link_config() {} +#[cfg(feature = "v1")] /// Routing - Retrieve /// /// Retrieve a routing algorithm #[utoipa::path( get, - path = "/routing/{algorithm_id}", + path = "/routing/{routing_algorithm_id}", params( - ("algorithm_id" = String, Path, description = "The unique identifier for a config"), + ("routing_algorithm_id" = String, Path, description = "The unique identifier for a config"), ), responses( (status = 200, description = "Successfully fetched routing config", body = MerchantRoutingAlgorithm), @@ -62,6 +87,30 @@ pub async fn routing_link_config() {} )] pub async fn routing_retrieve_config() {} +#[cfg(feature = "v2")] +/// Routing - Retrieve +/// +/// Retrieve a routing algorithm with its algorithm id + +#[utoipa::path( + get, + path = "/v2/routing_algorithm/{routing_algorithm_id}", + params( + ("routing_algorithm_id" = String, Path, description = "The unique identifier for a routing algorithm"), + ), + responses( + (status = 200, description = "Successfully fetched routing algorithm", body = MerchantRoutingAlgorithm), + (status = 500, description = "Internal server error"), + (status = 404, description = "Resource missing"), + (status = 403, description = "Forbidden") + ), + tag = "Routing", + operation_id = "Retrieve a routing algorithm with its algorithm id", + security(("api_key" = []), ("jwt_key" = [])) +)] +pub async fn routing_retrieve_config() {} + +#[cfg(feature = "v1")] /// Routing - List /// /// List all routing configs @@ -84,6 +133,7 @@ pub async fn routing_retrieve_config() {} )] pub async fn list_routing_configs() {} +#[cfg(feature = "v1")] /// Routing - Deactivate /// /// Deactivates a routing config @@ -104,6 +154,7 @@ pub async fn list_routing_configs() {} )] pub async fn routing_unlink_config() {} +#[cfg(feature = "v1")] /// Routing - Update Default Config /// /// Update default fallback config @@ -123,6 +174,7 @@ pub async fn routing_unlink_config() {} )] pub async fn routing_update_default_config() {} +#[cfg(feature = "v1")] /// Routing - Retrieve Default Config /// /// Retrieve default fallback config @@ -139,6 +191,7 @@ pub async fn routing_update_default_config() {} )] pub async fn routing_retrieve_default_config() {} +#[cfg(feature = "v1")] /// Routing - Retrieve Config /// /// Retrieve active config @@ -160,6 +213,7 @@ pub async fn routing_retrieve_default_config() {} )] pub async fn routing_retrieve_linked_config() {} +#[cfg(feature = "v1")] /// Routing - Retrieve Default For Profile /// /// Retrieve default config for profiles @@ -177,6 +231,7 @@ pub async fn routing_retrieve_linked_config() {} )] pub async fn routing_retrieve_default_config_for_profiles() {} +#[cfg(feature = "v1")] /// Routing - Update Default For Profile /// /// Update default config for profiles diff --git a/crates/router/src/core/routing.rs b/crates/router/src/core/routing.rs index 2b7f2d183066..640b12c52c28 100644 --- a/crates/router/src/core/routing.rs +++ b/crates/router/src/core/routing.rs @@ -424,7 +424,7 @@ pub async fn link_routing_config( } #[cfg(all(feature = "v2", feature = "routing_v2",))] -pub async fn retrieve_active_routing_config( +pub async fn retrieve_routing_algorithm_from_algorithm_id( state: SessionState, merchant_account: domain::MerchantAccount, key_store: domain::MerchantKeyStore, @@ -434,9 +434,12 @@ pub async fn retrieve_active_routing_config( let db = state.store.as_ref(); let key_manager_state = &(&state).into(); - let routing_algorithm = - RoutingAlgorithmUpdate::fetch_routing_algo(merchant_account.get_id(), &algorithm_id.0, db) - .await?; + let routing_algorithm = RoutingAlgorithmUpdate::fetch_routing_algo( + merchant_account.get_id(), + &algorithm_id.routing_algorithm_id, + db, + ) + .await?; core_utils::validate_and_get_business_profile( db, key_manager_state, @@ -457,7 +460,7 @@ pub async fn retrieve_active_routing_config( } #[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "routing_v2")))] -pub async fn retrieve_active_routing_config( +pub async fn retrieve_routing_algorithm_from_algorithm_id( state: SessionState, merchant_account: domain::MerchantAccount, key_store: domain::MerchantKeyStore, @@ -469,7 +472,7 @@ pub async fn retrieve_active_routing_config( let routing_algorithm = db .find_routing_algorithm_by_algorithm_id_merchant_id( - &algorithm_id.0, + &algorithm_id.routing_algorithm_id, merchant_account.get_id(), ) .await diff --git a/crates/router/src/routes/routing.rs b/crates/router/src/routes/routing.rs index 30edfc187b85..79e8ec11f21d 100644 --- a/crates/router/src/routes/routing.rs +++ b/crates/router/src/routes/routing.rs @@ -69,12 +69,12 @@ pub async fn routing_link_config( state, &req, path.into_inner(), - |state, auth: auth::AuthenticationData, algorithm_id, _| { + |state, auth: auth::AuthenticationData, algorithm, _| { routing::link_routing_config( state, auth.merchant_account, auth.key_store, - algorithm_id.0, + algorithm.routing_algorithm_id, transaction_type, ) }, @@ -117,7 +117,7 @@ pub async fn routing_link_config( auth.merchant_account, auth.key_store, wrapper.profile_id, - wrapper.algorithm_id.0, + wrapper.algorithm_id.routing_algorithm_id, transaction_type, ) }, @@ -149,7 +149,7 @@ pub async fn routing_retrieve_config( &req, algorithm_id, |state, auth: auth::AuthenticationData, algorithm_id, _| { - routing::retrieve_active_routing_config( + routing::retrieve_routing_algorithm_from_algorithm_id( state, auth.merchant_account, auth.key_store,