mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-11-02 04:04:43 +08:00
feat(refunds_v2): Add refund create core flow (#7619)
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
@ -343,4 +343,26 @@ impl PaymentAttemptInterface for MockDb {
|
||||
.cloned()
|
||||
.unwrap())
|
||||
}
|
||||
|
||||
#[cfg(feature = "v2")]
|
||||
#[allow(clippy::unwrap_used)]
|
||||
async fn find_payment_attempt_last_successful_or_partially_captured_attempt_by_payment_id(
|
||||
&self,
|
||||
_key_manager_state: &KeyManagerState,
|
||||
_merchant_key_store: &MerchantKeyStore,
|
||||
payment_id: &id_type::GlobalPaymentId,
|
||||
_storage_scheme: storage_enums::MerchantStorageScheme,
|
||||
) -> CustomResult<PaymentAttempt, StorageError> {
|
||||
let payment_attempts = self.payment_attempts.lock().await;
|
||||
|
||||
Ok(payment_attempts
|
||||
.iter()
|
||||
.find(|payment_attempt| {
|
||||
payment_attempt.payment_id == *payment_id
|
||||
&& (payment_attempt.status == storage_enums::AttemptStatus::PartialCharged
|
||||
|| payment_attempt.status == storage_enums::AttemptStatus::Charged)
|
||||
})
|
||||
.cloned()
|
||||
.unwrap())
|
||||
}
|
||||
}
|
||||
|
||||
@ -216,6 +216,33 @@ impl<T: DatabaseStore> PaymentAttemptInterface for RouterStore<T> {
|
||||
.map(PaymentAttempt::from_storage_model)
|
||||
}
|
||||
|
||||
#[cfg(feature = "v2")]
|
||||
#[instrument(skip_all)]
|
||||
async fn find_payment_attempt_last_successful_or_partially_captured_attempt_by_payment_id(
|
||||
&self,
|
||||
key_manager_state: &KeyManagerState,
|
||||
merchant_key_store: &MerchantKeyStore,
|
||||
payment_id: &common_utils::id_type::GlobalPaymentId,
|
||||
_storage_scheme: MerchantStorageScheme,
|
||||
) -> CustomResult<PaymentAttempt, errors::StorageError> {
|
||||
let conn = pg_connection_read(self).await?;
|
||||
DieselPaymentAttempt::find_last_successful_or_partially_captured_attempt_by_payment_id(
|
||||
&conn, payment_id,
|
||||
)
|
||||
.await
|
||||
.map_err(|er| {
|
||||
let new_err = diesel_error_to_data_error(*er.current_context());
|
||||
er.change_context(new_err)
|
||||
})?
|
||||
.convert(
|
||||
key_manager_state,
|
||||
merchant_key_store.key.get_inner(),
|
||||
merchant_key_store.merchant_id.clone().into(),
|
||||
)
|
||||
.await
|
||||
.change_context(errors::StorageError::DecryptionError)
|
||||
}
|
||||
|
||||
#[instrument(skip_all)]
|
||||
#[cfg(feature = "v1")]
|
||||
async fn find_payment_attempt_by_merchant_id_connector_txn_id(
|
||||
@ -1051,6 +1078,26 @@ impl<T: DatabaseStore> PaymentAttemptInterface for KVRouterStore<T> {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "v2")]
|
||||
#[instrument(skip_all)]
|
||||
async fn find_payment_attempt_last_successful_or_partially_captured_attempt_by_payment_id(
|
||||
&self,
|
||||
key_manager_state: &KeyManagerState,
|
||||
merchant_key_store: &MerchantKeyStore,
|
||||
payment_id: &common_utils::id_type::GlobalPaymentId,
|
||||
storage_scheme: MerchantStorageScheme,
|
||||
) -> error_stack::Result<PaymentAttempt, errors::StorageError> {
|
||||
// Ignoring storage scheme for v2 implementation
|
||||
self.router_store
|
||||
.find_payment_attempt_last_successful_or_partially_captured_attempt_by_payment_id(
|
||||
key_manager_state,
|
||||
merchant_key_store,
|
||||
payment_id,
|
||||
storage_scheme,
|
||||
)
|
||||
.await
|
||||
}
|
||||
|
||||
#[cfg(feature = "v2")]
|
||||
async fn find_payment_attempt_by_profile_id_connector_transaction_id(
|
||||
&self,
|
||||
|
||||
Reference in New Issue
Block a user