mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-28 04:04:55 +08:00
feat(core): Add support for v2 payments get intent using merchant reference id (#7123)
Co-authored-by: Chikke Srujan <chikke.srujan@Chikke-Srujan-N7WRTY72X7.local> Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
@ -185,4 +185,26 @@ impl PaymentIntentInterface for MockDb {
|
||||
|
||||
Ok(payment_intent.clone())
|
||||
}
|
||||
#[cfg(feature = "v2")]
|
||||
async fn find_payment_intent_by_merchant_reference_id_profile_id(
|
||||
&self,
|
||||
_state: &KeyManagerState,
|
||||
merchant_reference_id: &common_utils::id_type::PaymentReferenceId,
|
||||
profile_id: &common_utils::id_type::ProfileId,
|
||||
_merchant_key_store: &MerchantKeyStore,
|
||||
_storage_scheme: &common_enums::MerchantStorageScheme,
|
||||
) -> error_stack::Result<PaymentIntent, StorageError> {
|
||||
let payment_intents = self.payment_intents.lock().await;
|
||||
let payment_intent = payment_intents
|
||||
.iter()
|
||||
.find(|payment_intent| {
|
||||
payment_intent.merchant_reference_id.as_ref() == Some(merchant_reference_id)
|
||||
&& payment_intent.profile_id.eq(profile_id)
|
||||
})
|
||||
.ok_or(StorageError::ValueNotFound(
|
||||
"PaymentIntent not found".to_string(),
|
||||
))?;
|
||||
|
||||
Ok(payment_intent.clone())
|
||||
}
|
||||
}
|
||||
|
||||
@ -459,6 +459,32 @@ impl<T: DatabaseStore> PaymentIntentInterface for KVRouterStore<T> {
|
||||
)
|
||||
.await
|
||||
}
|
||||
#[cfg(feature = "v2")]
|
||||
async fn find_payment_intent_by_merchant_reference_id_profile_id(
|
||||
&self,
|
||||
state: &KeyManagerState,
|
||||
merchant_reference_id: &common_utils::id_type::PaymentReferenceId,
|
||||
profile_id: &common_utils::id_type::ProfileId,
|
||||
merchant_key_store: &MerchantKeyStore,
|
||||
storage_scheme: &MerchantStorageScheme,
|
||||
) -> error_stack::Result<PaymentIntent, StorageError> {
|
||||
match storage_scheme {
|
||||
MerchantStorageScheme::PostgresOnly => {
|
||||
self.router_store
|
||||
.find_payment_intent_by_merchant_reference_id_profile_id(
|
||||
state,
|
||||
merchant_reference_id,
|
||||
profile_id,
|
||||
merchant_key_store,
|
||||
storage_scheme,
|
||||
)
|
||||
.await
|
||||
}
|
||||
MerchantStorageScheme::RedisKv => {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait::async_trait]
|
||||
@ -622,6 +648,39 @@ impl<T: DatabaseStore> PaymentIntentInterface for crate::RouterStore<T> {
|
||||
.change_context(StorageError::DecryptionError)
|
||||
}
|
||||
|
||||
#[cfg(feature = "v2")]
|
||||
#[instrument(skip_all)]
|
||||
async fn find_payment_intent_by_merchant_reference_id_profile_id(
|
||||
&self,
|
||||
state: &KeyManagerState,
|
||||
merchant_reference_id: &common_utils::id_type::PaymentReferenceId,
|
||||
profile_id: &common_utils::id_type::ProfileId,
|
||||
merchant_key_store: &MerchantKeyStore,
|
||||
_storage_scheme: &MerchantStorageScheme,
|
||||
) -> error_stack::Result<PaymentIntent, StorageError> {
|
||||
let conn = pg_connection_read(self).await?;
|
||||
let diesel_payment_intent = DieselPaymentIntent::find_by_merchant_reference_id_profile_id(
|
||||
&conn,
|
||||
merchant_reference_id,
|
||||
profile_id,
|
||||
)
|
||||
.await
|
||||
.map_err(|er| {
|
||||
let new_err = diesel_error_to_data_error(*er.current_context());
|
||||
er.change_context(new_err)
|
||||
})?;
|
||||
let merchant_id = diesel_payment_intent.merchant_id.clone();
|
||||
|
||||
PaymentIntent::convert_back(
|
||||
state,
|
||||
diesel_payment_intent,
|
||||
merchant_key_store.key.get_inner(),
|
||||
merchant_id.to_owned().into(),
|
||||
)
|
||||
.await
|
||||
.change_context(StorageError::DecryptionError)
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "v1", feature = "olap"))]
|
||||
#[instrument(skip_all)]
|
||||
async fn filter_payment_intent_by_constraints(
|
||||
|
||||
Reference in New Issue
Block a user