mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-28 04:04:55 +08:00
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:
@ -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": [
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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"),
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user