refactor(dynamic_routing): update the authentication for update config to include JWT type (#6785)

Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
Prajjwal Kumar
2024-12-18 14:28:11 +05:30
committed by GitHub
parent 03c71ea366
commit db51ec43bc
4 changed files with 282 additions and 5 deletions

View File

@ -3922,7 +3922,91 @@
] ]
} }
}, },
"/account/:account_id/business_profile/:profile_id/dynamic_routing/success_based/toggle": { "/account/{account_id}/business_profile/{profile_id}/dynamic_routing/success_based/config/{algorithm_id}": {
"patch": {
"tags": [
"Routing"
],
"summary": "Routing - Update success based dynamic routing config for profile",
"description": "Update success based dynamic routing algorithm",
"operationId": "Update success based dynamic routing configs",
"parameters": [
{
"name": "account_id",
"in": "path",
"description": "Merchant id",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "profile_id",
"in": "path",
"description": "Profile id under which Dynamic routing needs to be toggled",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "algorithm_id",
"in": "path",
"description": "Success based routing algorithm id which was last activated to update the config",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DynamicRoutingFeatures"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Routing Algorithm updated",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RoutingDictionaryRecord"
}
}
}
},
"400": {
"description": "Update body is malformed"
},
"403": {
"description": "Forbidden"
},
"404": {
"description": "Resource missing"
},
"422": {
"description": "Unprocessable request"
},
"500": {
"description": "Internal server error"
}
},
"security": [
{
"api_key": []
},
{
"jwt_key": []
}
]
}
},
"/account/{account_id}/business_profile/{profile_id}/dynamic_routing/success_based/toggle": {
"post": { "post": {
"tags": [ "tags": [
"Routing" "Routing"
@ -3996,6 +4080,80 @@
] ]
} }
}, },
"/account/{account_id}/business_profile/{profile_id}/dynamic_routing/elimination/toggle": {
"post": {
"tags": [
"Routing"
],
"summary": "Routing - Toggle elimination routing for profile",
"description": "Create a elimination based dynamic routing algorithm",
"operationId": "Toggle elimination routing algorithm",
"parameters": [
{
"name": "account_id",
"in": "path",
"description": "Merchant id",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "profile_id",
"in": "path",
"description": "Profile id under which Dynamic routing needs to be toggled",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "enable",
"in": "query",
"description": "Feature to enable for success based routing",
"required": true,
"schema": {
"$ref": "#/components/schemas/DynamicRoutingFeatures"
}
}
],
"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": []
}
]
}
},
"/blocklist": { "/blocklist": {
"delete": { "delete": {
"tags": [ "tags": [
@ -9551,6 +9709,23 @@
"ZWL" "ZWL"
] ]
}, },
"CurrentBlockThreshold": {
"type": "object",
"properties": {
"duration_in_mins": {
"type": "integer",
"format": "int64",
"nullable": true,
"minimum": 0
},
"max_total_count": {
"type": "integer",
"format": "int64",
"nullable": true,
"minimum": 0
}
}
},
"CustomerAcceptance": { "CustomerAcceptance": {
"type": "object", "type": "object",
"description": "This \"CustomerAcceptance\" object is passed during Payments-Confirm request, it enlists the type, time, and mode of acceptance properties related to an acceptance done by the customer. The customer_acceptance sub object is usually passed by the SDK or client.", "description": "This \"CustomerAcceptance\" object is passed during Payments-Confirm request, it enlists the type, time, and mode of acceptance properties related to an acceptance done by the customer. The customer_acceptance sub object is usually passed by the SDK or client.",
@ -10373,6 +10548,18 @@
} }
} }
}, },
"DynamicRoutingConfigParams": {
"type": "string",
"enum": [
"PaymentMethod",
"PaymentMethodType",
"AuthenticationType",
"Currency",
"Country",
"CardNetwork",
"CardBin"
]
},
"DynamicRoutingFeatures": { "DynamicRoutingFeatures": {
"type": "string", "type": "string",
"enum": [ "enum": [
@ -24345,6 +24532,56 @@
}, },
"additionalProperties": false "additionalProperties": false
}, },
"SuccessBasedRoutingConfig": {
"type": "object",
"properties": {
"params": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DynamicRoutingConfigParams"
},
"nullable": true
},
"config": {
"allOf": [
{
"$ref": "#/components/schemas/SuccessBasedRoutingConfigBody"
}
],
"nullable": true
}
}
},
"SuccessBasedRoutingConfigBody": {
"type": "object",
"properties": {
"min_aggregates_size": {
"type": "integer",
"format": "int32",
"nullable": true,
"minimum": 0
},
"default_success_rate": {
"type": "number",
"format": "double",
"nullable": true
},
"max_aggregates_size": {
"type": "integer",
"format": "int32",
"nullable": true,
"minimum": 0
},
"current_block_threshold": {
"allOf": [
{
"$ref": "#/components/schemas/CurrentBlockThreshold"
}
],
"nullable": true
}
}
},
"SurchargeDetailsResponse": { "SurchargeDetailsResponse": {
"type": "object", "type": "object",
"required": [ "required": [

View File

@ -159,7 +159,9 @@ Never share your secret api keys. Keep them guarded and secure.
routes::routing::routing_retrieve_linked_config, routes::routing::routing_retrieve_linked_config,
routes::routing::routing_retrieve_default_config_for_profiles, routes::routing::routing_retrieve_default_config_for_profiles,
routes::routing::routing_update_default_config_for_profile, routes::routing::routing_update_default_config_for_profile,
routes::routing::success_based_routing_update_configs,
routes::routing::toggle_success_based_routing, routes::routing::toggle_success_based_routing,
routes::routing::toggle_elimination_routing,
// Routes for blocklist // Routes for blocklist
routes::blocklist::remove_entry_from_blocklist, routes::blocklist::remove_entry_from_blocklist,
@ -590,6 +592,10 @@ Never share your secret api keys. Keep them guarded and secure.
api_models::routing::RoutingKind, api_models::routing::RoutingKind,
api_models::routing::RoutableConnectorChoice, api_models::routing::RoutableConnectorChoice,
api_models::routing::DynamicRoutingFeatures, api_models::routing::DynamicRoutingFeatures,
api_models::routing::SuccessBasedRoutingConfig,
api_models::routing::DynamicRoutingConfigParams,
api_models::routing::CurrentBlockThreshold,
api_models::routing::SuccessBasedRoutingConfigBody,
api_models::routing::LinkedRoutingConfigRetrieveResponse, api_models::routing::LinkedRoutingConfigRetrieveResponse,
api_models::routing::RoutingRetrieveResponse, api_models::routing::RoutingRetrieveResponse,
api_models::routing::ProfileDefaultRoutingConfig, api_models::routing::ProfileDefaultRoutingConfig,

View File

@ -260,7 +260,7 @@ pub async fn routing_update_default_config_for_profile() {}
/// Create a success based dynamic routing algorithm /// Create a success based dynamic routing algorithm
#[utoipa::path( #[utoipa::path(
post, post,
path = "/account/:account_id/business_profile/:profile_id/dynamic_routing/success_based/toggle", path = "/account/{account_id}/business_profile/{profile_id}/dynamic_routing/success_based/toggle",
params( params(
("account_id" = String, Path, description = "Merchant id"), ("account_id" = String, Path, description = "Merchant id"),
("profile_id" = String, Path, description = "Profile id under which Dynamic routing needs to be toggled"), ("profile_id" = String, Path, description = "Profile id under which Dynamic routing needs to be toggled"),
@ -280,13 +280,40 @@ pub async fn routing_update_default_config_for_profile() {}
)] )]
pub async fn toggle_success_based_routing() {} pub async fn toggle_success_based_routing() {}
#[cfg(feature = "v1")]
/// Routing - Update success based dynamic routing config for profile
///
/// Update success based dynamic routing algorithm
#[utoipa::path(
patch,
path = "/account/{account_id}/business_profile/{profile_id}/dynamic_routing/success_based/config/{algorithm_id}",
params(
("account_id" = String, Path, description = "Merchant id"),
("profile_id" = String, Path, description = "Profile id under which Dynamic routing needs to be toggled"),
("algorithm_id" = String, Path, description = "Success based routing algorithm id which was last activated to update the config"),
),
request_body = DynamicRoutingFeatures,
responses(
(status = 200, description = "Routing Algorithm updated", body = RoutingDictionaryRecord),
(status = 400, description = "Update 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 = "Update success based dynamic routing configs",
security(("api_key" = []), ("jwt_key" = []))
)]
pub async fn success_based_routing_update_configs() {}
#[cfg(feature = "v1")] #[cfg(feature = "v1")]
/// Routing - Toggle elimination routing for profile /// Routing - Toggle elimination routing for profile
/// ///
/// Create a elimination based dynamic routing algorithm /// Create a elimination based dynamic routing algorithm
#[utoipa::path( #[utoipa::path(
post, post,
path = "/account/:account_id/business_profile/:profile_id/dynamic_routing/elimination/toggle", path = "/account/{account_id}/business_profile/{profile_id}/dynamic_routing/elimination/toggle",
params( params(
("account_id" = String, Path, description = "Merchant id"), ("account_id" = String, Path, description = "Merchant id"),
("profile_id" = String, Path, description = "Profile id under which Dynamic routing needs to be toggled"), ("profile_id" = String, Path, description = "Profile id under which Dynamic routing needs to be toggled"),

View File

@ -1071,7 +1071,7 @@ pub async fn success_based_routing_update_configs(
flow, flow,
state, state,
&req, &req,
routing_payload_wrapper, routing_payload_wrapper.clone(),
|state, _, wrapper: routing_types::SuccessBasedRoutingPayloadWrapper, _| async { |state, _, wrapper: routing_types::SuccessBasedRoutingPayloadWrapper, _| async {
Box::pin(routing::success_based_routing_update_configs( Box::pin(routing::success_based_routing_update_configs(
state, state,
@ -1081,7 +1081,14 @@ pub async fn success_based_routing_update_configs(
)) ))
.await .await
}, },
&auth::AdminApiAuth, auth::auth_type(
&auth::HeaderAuth(auth::ApiKeyAuth),
&auth::JWTAuthProfileFromRoute {
profile_id: routing_payload_wrapper.profile_id,
required_permission: Permission::ProfileRoutingWrite,
},
req.headers(),
),
api_locking::LockAction::NotApplicable, api_locking::LockAction::NotApplicable,
)) ))
.await .await