mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-27 19:46:48 +08:00
feat(core): update card_details for an existing mandate (#3452)
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
@ -9,6 +9,13 @@ use error_stack::{IntoReport, ResultExt};
|
||||
use masking::{PeekInterface, Secret};
|
||||
use time::PrimitiveDateTime;
|
||||
|
||||
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub struct MandateDetails {
|
||||
pub update_mandate_id: Option<String>,
|
||||
pub mandate_type: Option<MandateDataType>,
|
||||
}
|
||||
|
||||
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum MandateDataType {
|
||||
@ -16,6 +23,13 @@ pub enum MandateDataType {
|
||||
MultiUse(Option<MandateAmountData>),
|
||||
}
|
||||
|
||||
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
#[serde(untagged)]
|
||||
pub enum MandateTypeDetails {
|
||||
MandateType(MandateDataType),
|
||||
MandateDetails(MandateDetails),
|
||||
}
|
||||
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq)]
|
||||
pub struct MandateAmountData {
|
||||
pub amount: i64,
|
||||
@ -29,6 +43,8 @@ pub struct MandateAmountData {
|
||||
// information about creating mandates
|
||||
#[derive(Default, Eq, PartialEq, Debug, Clone)]
|
||||
pub struct MandateData {
|
||||
/// A way to update the mandate's payment method details
|
||||
pub update_mandate_id: Option<String>,
|
||||
/// A concent from the customer to store the payment method
|
||||
pub customer_acceptance: Option<CustomerAcceptance>,
|
||||
/// A way to select the type of mandate used
|
||||
@ -90,6 +106,7 @@ impl From<ApiMandateData> for MandateData {
|
||||
Self {
|
||||
customer_acceptance: value.customer_acceptance.map(|d| d.into()),
|
||||
mandate_type: value.mandate_type.map(|d| d.into()),
|
||||
update_mandate_id: value.update_mandate_id,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,7 +4,7 @@ use serde::{Deserialize, Serialize};
|
||||
use time::PrimitiveDateTime;
|
||||
|
||||
use super::PaymentIntent;
|
||||
use crate::{errors, mandates::MandateDataType, ForeignIDRef};
|
||||
use crate::{errors, mandates::MandateTypeDetails, ForeignIDRef};
|
||||
|
||||
#[async_trait::async_trait]
|
||||
pub trait PaymentAttemptInterface {
|
||||
@ -143,7 +143,7 @@ pub struct PaymentAttempt {
|
||||
pub straight_through_algorithm: Option<serde_json::Value>,
|
||||
pub preprocessing_step_id: Option<String>,
|
||||
// providing a location to store mandate details intermediately for transaction
|
||||
pub mandate_details: Option<MandateDataType>,
|
||||
pub mandate_details: Option<MandateTypeDetails>,
|
||||
pub error_reason: Option<String>,
|
||||
pub multiple_capture_count: Option<i16>,
|
||||
// reference to the payment at connector side
|
||||
@ -184,7 +184,7 @@ pub struct PaymentAttemptNew {
|
||||
pub attempt_id: String,
|
||||
pub status: storage_enums::AttemptStatus,
|
||||
pub amount: i64,
|
||||
/// amount + surcharge_amount + tax_amount
|
||||
/// amount + surcharge_amount + tax_amount
|
||||
/// This field will always be derived before updating in the Database
|
||||
pub net_amount: i64,
|
||||
pub currency: Option<storage_enums::Currency>,
|
||||
@ -221,7 +221,7 @@ pub struct PaymentAttemptNew {
|
||||
pub business_sub_label: Option<String>,
|
||||
pub straight_through_algorithm: Option<serde_json::Value>,
|
||||
pub preprocessing_step_id: Option<String>,
|
||||
pub mandate_details: Option<MandateDataType>,
|
||||
pub mandate_details: Option<MandateTypeDetails>,
|
||||
pub error_reason: Option<String>,
|
||||
pub connector_response_reference_id: Option<String>,
|
||||
pub multiple_capture_count: Option<i16>,
|
||||
|
||||
Reference in New Issue
Block a user