fix: empty payment attempts on payment retrieve (#3447)

This commit is contained in:
Kartikeya Hegde
2024-01-30 10:43:04 +00:00
committed by GitHub
parent a7bc8c655f
commit bec4f2a24e
2 changed files with 27 additions and 7 deletions

View File

@ -932,12 +932,23 @@ impl<T: DatabaseStore> PaymentAttemptInterface for KVRouterStore<T> {
}
MerchantStorageScheme::RedisKv => {
let key = format!("mid_{merchant_id}_pid_{payment_id}");
Box::pin(try_redis_get_else_try_database_get(
async {
kv_wrapper(self, KvOperation::<DieselPaymentAttempt>::Scan("pa_*"), key)
.await
.change_context(errors::StorageError::KVError)?
.await?
.try_into_scan()
.change_context(errors::StorageError::KVError)
},
|| async {
self.router_store
.find_attempts_by_merchant_id_payment_id(
merchant_id,
payment_id,
storage_scheme,
)
.await
},
))
.await
}
}
}

View File

@ -131,7 +131,16 @@ where
}
KvOperation::Scan(pattern) => {
let result: Vec<T> = redis_conn.hscan_and_deserialize(key, pattern, None).await?;
let result: Vec<T> = redis_conn
.hscan_and_deserialize(key, pattern, None)
.await
.and_then(|result| {
if result.is_empty() {
Err(RedisError::NotFound).into_report()
} else {
Ok(result)
}
})?;
Ok(KvResult::Scan(result))
}