mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-28 12:15:40 +08:00
feat(core): [Payouts] Add billing address to payout list (#5004)
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
@ -69,8 +69,15 @@ impl PayoutsInterface for MockDb {
|
||||
_merchant_id: &common_utils::id_type::MerchantId,
|
||||
_filters: &hyperswitch_domain_models::payouts::PayoutFetchConstraints,
|
||||
_storage_scheme: storage_enums::MerchantStorageScheme,
|
||||
) -> CustomResult<Vec<(Payouts, PayoutAttempt, Option<diesel_models::Customer>)>, StorageError>
|
||||
{
|
||||
) -> CustomResult<
|
||||
Vec<(
|
||||
Payouts,
|
||||
PayoutAttempt,
|
||||
Option<diesel_models::Customer>,
|
||||
Option<diesel_models::Address>,
|
||||
)>,
|
||||
StorageError,
|
||||
> {
|
||||
// TODO: Implement function for `MockDb`
|
||||
Err(StorageError::MockDbError)?
|
||||
}
|
||||
|
||||
@ -19,12 +19,18 @@ use diesel::{associations::HasTable, ExpressionMethods, NullableExpressionMethod
|
||||
not(feature = "customer_v2")
|
||||
))]
|
||||
use diesel_models::payout_attempt::PayoutAttempt as DieselPayoutAttempt;
|
||||
#[cfg(all(
|
||||
feature = "olap",
|
||||
any(feature = "v1", feature = "v2"),
|
||||
not(feature = "customer_v2")
|
||||
))]
|
||||
use diesel_models::schema::{
|
||||
address::dsl as add_dsl, customers::dsl as cust_dsl, payout_attempt::dsl as poa_dsl,
|
||||
};
|
||||
#[cfg(feature = "olap")]
|
||||
use diesel_models::{
|
||||
customers::Customer as DieselCustomer,
|
||||
enums as storage_enums,
|
||||
query::generics::db_metrics,
|
||||
schema::{customers::dsl as cust_dsl, payout_attempt::dsl as poa_dsl, payouts::dsl as po_dsl},
|
||||
address::Address as DieselAddress, customers::Customer as DieselCustomer,
|
||||
enums as storage_enums, query::generics::db_metrics, schema::payouts::dsl as po_dsl,
|
||||
};
|
||||
use diesel_models::{
|
||||
enums::MerchantStorageScheme,
|
||||
@ -57,8 +63,8 @@ use crate::connection;
|
||||
not(feature = "customer_v2")
|
||||
))]
|
||||
use crate::store::schema::{
|
||||
customers::all_columns as cust_all_columns, payout_attempt::all_columns as poa_all_columns,
|
||||
payouts::all_columns as po_all_columns,
|
||||
address::all_columns as addr_all_columns, customers::all_columns as cust_all_columns,
|
||||
payout_attempt::all_columns as poa_all_columns, payouts::all_columns as po_all_columns,
|
||||
};
|
||||
use crate::{
|
||||
diesel_error_to_data_error,
|
||||
@ -331,8 +337,15 @@ impl<T: DatabaseStore> PayoutsInterface for KVRouterStore<T> {
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
filters: &PayoutFetchConstraints,
|
||||
storage_scheme: MerchantStorageScheme,
|
||||
) -> error_stack::Result<Vec<(Payouts, PayoutAttempt, Option<DieselCustomer>)>, StorageError>
|
||||
{
|
||||
) -> error_stack::Result<
|
||||
Vec<(
|
||||
Payouts,
|
||||
PayoutAttempt,
|
||||
Option<DieselCustomer>,
|
||||
Option<DieselAddress>,
|
||||
)>,
|
||||
StorageError,
|
||||
> {
|
||||
self.router_store
|
||||
.filter_payouts_and_attempts(merchant_id, filters, storage_scheme)
|
||||
.await
|
||||
@ -571,8 +584,17 @@ impl<T: DatabaseStore> PayoutsInterface for crate::RouterStore<T> {
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
filters: &PayoutFetchConstraints,
|
||||
storage_scheme: MerchantStorageScheme,
|
||||
) -> error_stack::Result<Vec<(Payouts, PayoutAttempt, Option<DieselCustomer>)>, StorageError>
|
||||
{
|
||||
) -> error_stack::Result<
|
||||
Vec<(
|
||||
Payouts,
|
||||
PayoutAttempt,
|
||||
Option<DieselCustomer>,
|
||||
Option<DieselAddress>,
|
||||
)>,
|
||||
StorageError,
|
||||
> {
|
||||
use common_utils::errors::ReportSwitchExt;
|
||||
|
||||
let conn = connection::pg_connection_read(self).await.switch()?;
|
||||
let conn = async_bb8_diesel::Connection::as_async_conn(&conn);
|
||||
let mut query = DieselPayouts::table()
|
||||
@ -585,6 +607,10 @@ impl<T: DatabaseStore> PayoutsInterface for crate::RouterStore<T> {
|
||||
.on(cust_dsl::customer_id.nullable().eq(po_dsl::customer_id)),
|
||||
)
|
||||
.filter(cust_dsl::merchant_id.eq(merchant_id.to_owned()))
|
||||
.left_outer_join(
|
||||
diesel_models::schema::address::table
|
||||
.on(add_dsl::address_id.nullable().eq(po_dsl::address_id)),
|
||||
)
|
||||
.filter(po_dsl::merchant_id.eq(merchant_id.to_owned()))
|
||||
.order(po_dsl::created_at.desc())
|
||||
.into_boxed();
|
||||
@ -675,17 +701,28 @@ impl<T: DatabaseStore> PayoutsInterface for crate::RouterStore<T> {
|
||||
logger::debug!(filter = %diesel::debug_query::<diesel::pg::Pg,_>(&query).to_string());
|
||||
|
||||
query
|
||||
.select((po_all_columns, poa_all_columns, cust_all_columns.nullable()))
|
||||
.get_results_async::<(DieselPayouts, DieselPayoutAttempt, Option<DieselCustomer>)>(conn)
|
||||
.select((
|
||||
po_all_columns,
|
||||
poa_all_columns,
|
||||
cust_all_columns.nullable(),
|
||||
addr_all_columns.nullable(),
|
||||
))
|
||||
.get_results_async::<(
|
||||
DieselPayouts,
|
||||
DieselPayoutAttempt,
|
||||
Option<DieselCustomer>,
|
||||
Option<DieselAddress>,
|
||||
)>(conn)
|
||||
.await
|
||||
.map(|results| {
|
||||
results
|
||||
.into_iter()
|
||||
.map(|(pi, pa, c)| {
|
||||
.map(|(pi, pa, c, add)| {
|
||||
(
|
||||
Payouts::from_storage_model(pi),
|
||||
PayoutAttempt::from_storage_model(pa),
|
||||
c,
|
||||
add,
|
||||
)
|
||||
})
|
||||
.collect()
|
||||
@ -706,8 +743,15 @@ impl<T: DatabaseStore> PayoutsInterface for crate::RouterStore<T> {
|
||||
_merchant_id: &common_utils::id_type::MerchantId,
|
||||
_filters: &PayoutFetchConstraints,
|
||||
_storage_scheme: MerchantStorageScheme,
|
||||
) -> error_stack::Result<Vec<(Payouts, PayoutAttempt, Option<DieselCustomer>)>, StorageError>
|
||||
{
|
||||
) -> error_stack::Result<
|
||||
Vec<(
|
||||
Payouts,
|
||||
PayoutAttempt,
|
||||
Option<DieselCustomer>,
|
||||
Option<DieselAddress>,
|
||||
)>,
|
||||
StorageError,
|
||||
> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user