mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-29 09:07:09 +08:00
feat(router): Move organization_id to request header from request body for v2 (#6277)
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com> Co-authored-by: Narayan Bhat <48803246+Narayanbhat166@users.noreply.github.com>
This commit is contained in:
@ -66,6 +66,7 @@ pub mod headers {
|
||||
pub const X_API_VERSION: &str = "X-ApiVersion";
|
||||
pub const X_FORWARDED_FOR: &str = "X-Forwarded-For";
|
||||
pub const X_MERCHANT_ID: &str = "X-Merchant-Id";
|
||||
pub const X_ORGANIZATION_ID: &str = "X-Organization-Id";
|
||||
pub const X_LOGIN: &str = "X-Login";
|
||||
pub const X_TRANS_KEY: &str = "X-Trans-Key";
|
||||
pub const X_VERSION: &str = "X-Version";
|
||||
|
||||
@ -92,7 +92,7 @@ pub async fn organization_retrieve(
|
||||
.await
|
||||
}
|
||||
|
||||
#[cfg(feature = "olap")]
|
||||
#[cfg(all(feature = "olap", feature = "v1"))]
|
||||
#[instrument(skip_all, fields(flow = ?Flow::MerchantsAccountCreate))]
|
||||
pub async fn merchant_account_create(
|
||||
state: web::Data<AppState>,
|
||||
@ -112,6 +112,43 @@ pub async fn merchant_account_create(
|
||||
.await
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "olap", feature = "v2"))]
|
||||
#[instrument(skip_all, fields(flow = ?Flow::MerchantsAccountCreate))]
|
||||
pub async fn merchant_account_create(
|
||||
state: web::Data<AppState>,
|
||||
req: HttpRequest,
|
||||
json_payload: web::Json<api_models::admin::MerchantAccountCreateWithoutOrgId>,
|
||||
) -> HttpResponse {
|
||||
let flow = Flow::MerchantsAccountCreate;
|
||||
let headers = req.headers();
|
||||
|
||||
let org_id = match auth::HeaderMapStruct::new(headers).get_organization_id_from_header() {
|
||||
Ok(org_id) => org_id,
|
||||
Err(e) => return api::log_and_return_error_response(e),
|
||||
};
|
||||
|
||||
// Converting from MerchantAccountCreateWithoutOrgId to MerchantAccountCreate so we can use the existing
|
||||
// `create_merchant_account` function for v2 as well
|
||||
let json_payload = json_payload.into_inner();
|
||||
let new_request_payload_with_org_id = api_models::admin::MerchantAccountCreate {
|
||||
merchant_name: json_payload.merchant_name,
|
||||
merchant_details: json_payload.merchant_details,
|
||||
metadata: json_payload.metadata,
|
||||
organization_id: org_id,
|
||||
};
|
||||
|
||||
Box::pin(api::server_wrap(
|
||||
flow,
|
||||
state,
|
||||
&req,
|
||||
new_request_payload_with_org_id,
|
||||
|state, _, req, _| create_merchant_account(state, req),
|
||||
&auth::AdminApiAuth,
|
||||
api_locking::LockAction::NotApplicable,
|
||||
))
|
||||
.await
|
||||
}
|
||||
|
||||
/// Merchant Account - Retrieve
|
||||
///
|
||||
/// Retrieve a merchant account details.
|
||||
|
||||
@ -931,7 +931,7 @@ where
|
||||
}
|
||||
|
||||
/// A helper struct to extract headers from the request
|
||||
struct HeaderMapStruct<'a> {
|
||||
pub(crate) struct HeaderMapStruct<'a> {
|
||||
headers: &'a HeaderMap,
|
||||
}
|
||||
|
||||
@ -981,6 +981,18 @@ impl<'a> HeaderMapStruct<'a> {
|
||||
)
|
||||
})
|
||||
}
|
||||
#[cfg(feature = "v2")]
|
||||
pub fn get_organization_id_from_header(&self) -> RouterResult<id_type::OrganizationId> {
|
||||
self.get_mandatory_header_value_by_key(headers::X_ORGANIZATION_ID)
|
||||
.map(|val| val.to_owned())
|
||||
.and_then(|organization_id| {
|
||||
id_type::OrganizationId::wrap(organization_id).change_context(
|
||||
errors::ApiErrorResponse::InvalidRequestData {
|
||||
message: format!("`{}` header is invalid", headers::X_ORGANIZATION_ID),
|
||||
},
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/// Get the merchant-id from `x-merchant-id` header
|
||||
|
||||
Reference in New Issue
Block a user