mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-27 19:46:48 +08:00
refactor: Refactored Response types for subscription APIs (#9788)
This commit is contained in:
@ -212,6 +212,7 @@ impl ApiEventMetric for GetPlansResponse {}
|
|||||||
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, ToSchema)]
|
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, ToSchema)]
|
||||||
pub struct ConfirmSubscriptionPaymentDetails {
|
pub struct ConfirmSubscriptionPaymentDetails {
|
||||||
pub shipping: Option<Address>,
|
pub shipping: Option<Address>,
|
||||||
|
pub billing: Option<Address>,
|
||||||
pub payment_method: api_enums::PaymentMethod,
|
pub payment_method: api_enums::PaymentMethod,
|
||||||
pub payment_method_type: Option<api_enums::PaymentMethodType>,
|
pub payment_method_type: Option<api_enums::PaymentMethodType>,
|
||||||
pub payment_method_data: PaymentMethodDataRequest,
|
pub payment_method_data: PaymentMethodDataRequest,
|
||||||
@ -305,6 +306,8 @@ pub struct PaymentResponseData {
|
|||||||
pub error_message: Option<String>,
|
pub error_message: Option<String>,
|
||||||
pub payment_method_type: Option<api_enums::PaymentMethodType>,
|
pub payment_method_type: Option<api_enums::PaymentMethodType>,
|
||||||
pub client_secret: Option<Secret<String>>,
|
pub client_secret: Option<Secret<String>>,
|
||||||
|
pub billing: Option<Address>,
|
||||||
|
pub shipping: Option<Address>,
|
||||||
pub payment_type: Option<api_enums::PaymentType>,
|
pub payment_type: Option<api_enums::PaymentType>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -346,16 +349,13 @@ impl ConfirmSubscriptionRequest {
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_billing_address(&self) -> Result<Address, error_stack::Report<ValidationError>> {
|
pub fn get_billing_address(&self) -> Option<Address> {
|
||||||
self.payment_details
|
self.payment_details
|
||||||
.payment_method_data
|
.payment_method_data
|
||||||
.billing
|
.billing
|
||||||
.clone()
|
.as_ref()
|
||||||
.ok_or(error_stack::report!(
|
.or(self.payment_details.billing.as_ref())
|
||||||
ValidationError::MissingRequiredField {
|
.cloned()
|
||||||
field_name: "billing".to_string()
|
|
||||||
}
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -394,6 +394,16 @@ pub struct CreateAndConfirmSubscriptionRequest {
|
|||||||
pub merchant_reference_id: Option<String>,
|
pub merchant_reference_id: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl CreateAndConfirmSubscriptionRequest {
|
||||||
|
pub fn get_billing_address(&self) -> Option<Address> {
|
||||||
|
self.payment_details
|
||||||
|
.payment_method_data
|
||||||
|
.as_ref()
|
||||||
|
.and_then(|data| data.billing.clone())
|
||||||
|
.or(self.billing.clone())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl ApiEventMetric for CreateAndConfirmSubscriptionRequest {}
|
impl ApiEventMetric for CreateAndConfirmSubscriptionRequest {}
|
||||||
|
|
||||||
#[derive(Debug, Clone, serde::Serialize, ToSchema)]
|
#[derive(Debug, Clone, serde::Serialize, ToSchema)]
|
||||||
|
|||||||
@ -189,7 +189,7 @@ pub async fn create_and_confirm_subscription(
|
|||||||
&state,
|
&state,
|
||||||
customer.clone(),
|
customer.clone(),
|
||||||
request.customer_id.clone(),
|
request.customer_id.clone(),
|
||||||
request.billing.clone(),
|
request.get_billing_address(),
|
||||||
request
|
request
|
||||||
.payment_details
|
.payment_details
|
||||||
.payment_method_data
|
.payment_method_data
|
||||||
@ -212,7 +212,7 @@ pub async fn create_and_confirm_subscription(
|
|||||||
&state,
|
&state,
|
||||||
subs_handler.subscription.clone(),
|
subs_handler.subscription.clone(),
|
||||||
request.item_price_id.clone(),
|
request.item_price_id.clone(),
|
||||||
request.billing.clone(),
|
request.get_billing_address(),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
@ -271,6 +271,8 @@ pub async fn create_and_confirm_subscription(
|
|||||||
&invoice_entry,
|
&invoice_entry,
|
||||||
&payment_response,
|
&payment_response,
|
||||||
subscription_create_response.status,
|
subscription_create_response.status,
|
||||||
|
request.plan_id.clone(),
|
||||||
|
request.item_price_id.clone(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Ok(ApplicationResponse::Json(response))
|
Ok(ApplicationResponse::Json(response))
|
||||||
@ -337,11 +339,12 @@ pub async fn confirm_subscription(
|
|||||||
&state,
|
&state,
|
||||||
customer.clone(),
|
customer.clone(),
|
||||||
subscription.customer_id.clone(),
|
subscription.customer_id.clone(),
|
||||||
request.payment_details.payment_method_data.billing.clone(),
|
request.get_billing_address(),
|
||||||
request
|
request
|
||||||
.payment_details
|
.payment_details
|
||||||
.payment_method_data
|
.payment_method_data
|
||||||
.payment_method_data,
|
.payment_method_data
|
||||||
|
.clone(),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
let _customer_updated_response = SubscriptionHandler::update_connector_customer_id_in_customer(
|
let _customer_updated_response = SubscriptionHandler::update_connector_customer_id_in_customer(
|
||||||
@ -358,8 +361,8 @@ pub async fn confirm_subscription(
|
|||||||
.create_subscription_on_connector(
|
.create_subscription_on_connector(
|
||||||
&state,
|
&state,
|
||||||
subscription,
|
subscription,
|
||||||
request.item_price_id,
|
request.item_price_id.clone(),
|
||||||
request.payment_details.payment_method_data.billing,
|
request.get_billing_address(),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
@ -406,6 +409,8 @@ pub async fn confirm_subscription(
|
|||||||
&invoice_entry,
|
&invoice_entry,
|
||||||
&payment_response,
|
&payment_response,
|
||||||
subscription_create_response.status,
|
subscription_create_response.status,
|
||||||
|
request.plan_id.clone(),
|
||||||
|
request.item_price_id.clone(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Ok(ApplicationResponse::Json(response))
|
Ok(ApplicationResponse::Json(response))
|
||||||
|
|||||||
@ -176,7 +176,7 @@ impl InvoiceHandler {
|
|||||||
currency,
|
currency,
|
||||||
confirm: true,
|
confirm: true,
|
||||||
customer_id: Some(self.subscription.customer_id.clone()),
|
customer_id: Some(self.subscription.customer_id.clone()),
|
||||||
billing: request.billing.clone(),
|
billing: request.get_billing_address(),
|
||||||
shipping: request.shipping.clone(),
|
shipping: request.shipping.clone(),
|
||||||
profile_id: Some(self.profile.get_id().clone()),
|
profile_id: Some(self.profile.get_id().clone()),
|
||||||
setup_future_usage: payment_details.setup_future_usage,
|
setup_future_usage: payment_details.setup_future_usage,
|
||||||
@ -206,7 +206,7 @@ impl InvoiceHandler {
|
|||||||
) -> errors::RouterResult<subscription_types::PaymentResponseData> {
|
) -> errors::RouterResult<subscription_types::PaymentResponseData> {
|
||||||
let payment_details = &request.payment_details;
|
let payment_details = &request.payment_details;
|
||||||
let cit_payment_request = subscription_types::ConfirmPaymentsRequestData {
|
let cit_payment_request = subscription_types::ConfirmPaymentsRequestData {
|
||||||
billing: request.payment_details.payment_method_data.billing.clone(),
|
billing: request.get_billing_address(),
|
||||||
shipping: request.payment_details.shipping.clone(),
|
shipping: request.payment_details.shipping.clone(),
|
||||||
profile_id: Some(self.profile.get_id().clone()),
|
profile_id: Some(self.profile.get_id().clone()),
|
||||||
payment_method: payment_details.payment_method,
|
payment_method: payment_details.payment_method,
|
||||||
|
|||||||
@ -288,16 +288,18 @@ impl SubscriptionWithHandler<'_> {
|
|||||||
invoice: &hyperswitch_domain_models::invoice::Invoice,
|
invoice: &hyperswitch_domain_models::invoice::Invoice,
|
||||||
payment_response: &subscription_types::PaymentResponseData,
|
payment_response: &subscription_types::PaymentResponseData,
|
||||||
status: subscription_response_types::SubscriptionStatus,
|
status: subscription_response_types::SubscriptionStatus,
|
||||||
|
plan_id: Option<String>,
|
||||||
|
price_id: Option<String>,
|
||||||
) -> errors::RouterResult<subscription_types::ConfirmSubscriptionResponse> {
|
) -> errors::RouterResult<subscription_types::ConfirmSubscriptionResponse> {
|
||||||
Ok(subscription_types::ConfirmSubscriptionResponse {
|
Ok(subscription_types::ConfirmSubscriptionResponse {
|
||||||
id: self.subscription.id.clone(),
|
id: self.subscription.id.clone(),
|
||||||
merchant_reference_id: self.subscription.merchant_reference_id.clone(),
|
merchant_reference_id: self.subscription.merchant_reference_id.clone(),
|
||||||
status: subscription_types::SubscriptionStatus::from(status),
|
status: subscription_types::SubscriptionStatus::from(status),
|
||||||
plan_id: None,
|
plan_id,
|
||||||
profile_id: self.subscription.profile_id.to_owned(),
|
profile_id: self.subscription.profile_id.to_owned(),
|
||||||
payment: Some(payment_response.clone()),
|
payment: Some(payment_response.clone()),
|
||||||
customer_id: Some(self.subscription.customer_id.clone()),
|
customer_id: Some(self.subscription.customer_id.clone()),
|
||||||
price_id: None,
|
price_id,
|
||||||
coupon: None,
|
coupon: None,
|
||||||
billing_processor_subscription_id: self.subscription.connector_subscription_id.clone(),
|
billing_processor_subscription_id: self.subscription.connector_subscription_id.clone(),
|
||||||
invoice: Some(subscription_types::Invoice::foreign_try_from(invoice)?),
|
invoice: Some(subscription_types::Invoice::foreign_try_from(invoice)?),
|
||||||
|
|||||||
Reference in New Issue
Block a user