mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-31 01:57:45 +08:00
feat(refunds): Add refunds diesel model support in V2 API (#7503)
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com> Co-authored-by: Hrithikesh <61539176+hrithikesh026@users.noreply.github.com>
This commit is contained in:
@ -14,6 +14,7 @@ v1 = ["common_utils/v1"]
|
||||
v2 = ["common_utils/v2"]
|
||||
customer_v2 = []
|
||||
payment_methods_v2 = []
|
||||
refunds_v2 = []
|
||||
|
||||
[dependencies]
|
||||
async-bb8-diesel = { git = "https://github.com/jarnura/async-bb8-diesel", rev = "53b4ab901aab7635c8215fd1c2d542c8db443094" }
|
||||
|
||||
@ -133,9 +133,14 @@ impl DBOperation {
|
||||
)
|
||||
.await?,
|
||||
)),
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
Updateable::RefundUpdate(a) => {
|
||||
DBResult::Refund(Box::new(a.orig.update(conn, a.update_data).await?))
|
||||
}
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
Updateable::RefundUpdate(a) => {
|
||||
DBResult::Refund(Box::new(a.orig.update_with_id(conn, a.update_data).await?))
|
||||
}
|
||||
Updateable::AddressUpdate(a) => {
|
||||
DBResult::Address(Box::new(a.orig.update(conn, a.update_data).await?))
|
||||
}
|
||||
|
||||
@ -3,10 +3,19 @@ use diesel::{associations::HasTable, BoolExpressionMethods, ExpressionMethods, T
|
||||
use super::generics;
|
||||
use crate::{
|
||||
errors,
|
||||
refund::{Refund, RefundNew, RefundUpdate, RefundUpdateInternal},
|
||||
schema::refund::dsl,
|
||||
refund::{RefundUpdate, RefundUpdateInternal},
|
||||
PgPooledConn, StorageResult,
|
||||
};
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
use crate::{
|
||||
refund::{Refund, RefundNew},
|
||||
schema::refund::dsl,
|
||||
};
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
use crate::{
|
||||
refund::{Refund, RefundNew},
|
||||
schema_v2::refund::dsl,
|
||||
};
|
||||
|
||||
impl RefundNew {
|
||||
pub async fn insert(self, conn: &PgPooledConn) -> StorageResult<Refund> {
|
||||
@ -14,6 +23,7 @@ impl RefundNew {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
impl Refund {
|
||||
pub async fn update(self, conn: &PgPooledConn, refund: RefundUpdate) -> StorageResult<Self> {
|
||||
match generics::generic_update_with_unique_predicate_get_result::<
|
||||
@ -127,3 +137,37 @@ impl Refund {
|
||||
.await
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
impl Refund {
|
||||
pub async fn update_with_id(
|
||||
self,
|
||||
conn: &PgPooledConn,
|
||||
refund: RefundUpdate,
|
||||
) -> StorageResult<Self> {
|
||||
match generics::generic_update_by_id::<<Self as HasTable>::Table, _, _, _>(
|
||||
conn,
|
||||
self.id.to_owned(),
|
||||
RefundUpdateInternal::from(refund),
|
||||
)
|
||||
.await
|
||||
{
|
||||
Err(error) => match error.current_context() {
|
||||
errors::DatabaseError::NoFieldsToUpdate => Ok(self),
|
||||
_ => Err(error),
|
||||
},
|
||||
result => result,
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn find_by_global_id(
|
||||
conn: &PgPooledConn,
|
||||
id: &common_utils::id_type::GlobalRefundId,
|
||||
) -> StorageResult<Self> {
|
||||
generics::generic_find_one::<<Self as HasTable>::Table, _, _>(
|
||||
conn,
|
||||
dsl::id.eq(id.to_owned()),
|
||||
)
|
||||
.await
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,16 +6,16 @@ use router_env::logger;
|
||||
#[cfg(feature = "v1")]
|
||||
use crate::schema::{
|
||||
payment_attempt::dsl as payment_attempt_dsl, payment_intent::dsl as payment_intent_dsl,
|
||||
refund::dsl as refund_dsl,
|
||||
};
|
||||
#[cfg(feature = "v2")]
|
||||
use crate::schema_v2::{
|
||||
payment_attempt::dsl as payment_attempt_dsl, payment_intent::dsl as payment_intent_dsl,
|
||||
refund::dsl as refund_dsl,
|
||||
};
|
||||
use crate::{
|
||||
errors,
|
||||
schema::{dispute::dsl as dispute_dsl, refund::dsl as refund_dsl},
|
||||
user, Dispute, DisputeNew, PaymentAttempt, PaymentIntent, PaymentIntentNew, PgPooledConn,
|
||||
Refund, RefundNew, StorageResult,
|
||||
errors, schema::dispute::dsl as dispute_dsl, user, Dispute, DisputeNew, PaymentAttempt,
|
||||
PaymentIntent, PaymentIntentNew, PgPooledConn, Refund, RefundNew, StorageResult,
|
||||
};
|
||||
|
||||
#[cfg(feature = "v1")]
|
||||
|
||||
@ -6,8 +6,13 @@ use diesel::{AsChangeset, Identifiable, Insertable, Queryable, Selectable};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use time::PrimitiveDateTime;
|
||||
|
||||
use crate::{enums as storage_enums, schema::refund};
|
||||
use crate::enums as storage_enums;
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
use crate::schema::refund;
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
use crate::schema_v2::refund;
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
#[derive(
|
||||
Clone,
|
||||
Debug,
|
||||
@ -64,6 +69,58 @@ pub struct Refund {
|
||||
pub issuer_error_message: Option<String>,
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
#[derive(
|
||||
Clone,
|
||||
Debug,
|
||||
Eq,
|
||||
Identifiable,
|
||||
Queryable,
|
||||
Selectable,
|
||||
PartialEq,
|
||||
serde::Serialize,
|
||||
serde::Deserialize,
|
||||
)]
|
||||
#[diesel(table_name = refund, primary_key(id), check_for_backend(diesel::pg::Pg))]
|
||||
pub struct Refund {
|
||||
pub payment_id: common_utils::id_type::GlobalPaymentId,
|
||||
pub merchant_id: common_utils::id_type::MerchantId,
|
||||
pub connector_transaction_id: ConnectorTransactionId,
|
||||
pub connector: String,
|
||||
pub connector_refund_id: Option<ConnectorTransactionId>,
|
||||
pub external_reference_id: Option<String>,
|
||||
pub refund_type: storage_enums::RefundType,
|
||||
pub total_amount: MinorUnit,
|
||||
pub currency: storage_enums::Currency,
|
||||
pub refund_amount: MinorUnit,
|
||||
pub refund_status: storage_enums::RefundStatus,
|
||||
pub sent_to_gateway: bool,
|
||||
pub refund_error_message: Option<String>,
|
||||
pub metadata: Option<pii::SecretSerdeValue>,
|
||||
pub refund_arn: Option<String>,
|
||||
#[serde(with = "common_utils::custom_serde::iso8601")]
|
||||
pub created_at: PrimitiveDateTime,
|
||||
#[serde(with = "common_utils::custom_serde::iso8601")]
|
||||
pub modified_at: PrimitiveDateTime,
|
||||
pub description: Option<String>,
|
||||
pub attempt_id: common_utils::id_type::GlobalAttemptId,
|
||||
pub refund_reason: Option<String>,
|
||||
pub refund_error_code: Option<String>,
|
||||
pub profile_id: Option<common_utils::id_type::ProfileId>,
|
||||
pub updated_by: String,
|
||||
pub charges: Option<ChargeRefunds>,
|
||||
pub organization_id: common_utils::id_type::OrganizationId,
|
||||
pub split_refunds: Option<common_types::refunds::SplitRefund>,
|
||||
pub unified_code: Option<String>,
|
||||
pub unified_message: Option<String>,
|
||||
pub processor_refund_data: Option<String>,
|
||||
pub processor_transaction_data: Option<String>,
|
||||
pub id: common_utils::id_type::GlobalRefundId,
|
||||
pub merchant_reference_id: common_utils::id_type::RefundReferenceId,
|
||||
pub connector_id: Option<common_utils::id_type::MerchantConnectorAccountId>,
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
#[derive(
|
||||
Clone,
|
||||
Debug,
|
||||
@ -110,6 +167,54 @@ pub struct RefundNew {
|
||||
pub processor_transaction_data: Option<String>,
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
#[derive(
|
||||
Clone,
|
||||
Debug,
|
||||
Eq,
|
||||
PartialEq,
|
||||
Insertable,
|
||||
router_derive::DebugAsDisplay,
|
||||
serde::Serialize,
|
||||
serde::Deserialize,
|
||||
router_derive::Setter,
|
||||
)]
|
||||
#[diesel(table_name = refund)]
|
||||
pub struct RefundNew {
|
||||
pub merchant_reference_id: common_utils::id_type::RefundReferenceId,
|
||||
pub payment_id: common_utils::id_type::GlobalPaymentId,
|
||||
pub merchant_id: common_utils::id_type::MerchantId,
|
||||
pub id: common_utils::id_type::GlobalRefundId,
|
||||
pub external_reference_id: Option<String>,
|
||||
pub connector_transaction_id: ConnectorTransactionId,
|
||||
pub connector: String,
|
||||
pub connector_refund_id: Option<ConnectorTransactionId>,
|
||||
pub refund_type: storage_enums::RefundType,
|
||||
pub total_amount: MinorUnit,
|
||||
pub currency: storage_enums::Currency,
|
||||
pub refund_amount: MinorUnit,
|
||||
pub refund_status: storage_enums::RefundStatus,
|
||||
pub sent_to_gateway: bool,
|
||||
pub metadata: Option<pii::SecretSerdeValue>,
|
||||
pub refund_arn: Option<String>,
|
||||
#[serde(with = "common_utils::custom_serde::iso8601")]
|
||||
pub created_at: PrimitiveDateTime,
|
||||
#[serde(with = "common_utils::custom_serde::iso8601")]
|
||||
pub modified_at: PrimitiveDateTime,
|
||||
pub description: Option<String>,
|
||||
pub attempt_id: common_utils::id_type::GlobalAttemptId,
|
||||
pub refund_reason: Option<String>,
|
||||
pub profile_id: Option<common_utils::id_type::ProfileId>,
|
||||
pub updated_by: String,
|
||||
pub connector_id: Option<common_utils::id_type::MerchantConnectorAccountId>,
|
||||
pub charges: Option<ChargeRefunds>,
|
||||
pub organization_id: common_utils::id_type::OrganizationId,
|
||||
pub split_refunds: Option<common_types::refunds::SplitRefund>,
|
||||
pub processor_refund_data: Option<String>,
|
||||
pub processor_transaction_data: Option<String>,
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
||||
pub enum RefundUpdate {
|
||||
Update {
|
||||
@ -153,6 +258,49 @@ pub enum RefundUpdate {
|
||||
},
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
||||
pub enum RefundUpdate {
|
||||
Update {
|
||||
connector_refund_id: ConnectorTransactionId,
|
||||
refund_status: storage_enums::RefundStatus,
|
||||
sent_to_gateway: bool,
|
||||
refund_error_message: Option<String>,
|
||||
refund_arn: String,
|
||||
updated_by: String,
|
||||
processor_refund_data: Option<String>,
|
||||
},
|
||||
MetadataAndReasonUpdate {
|
||||
metadata: Option<pii::SecretSerdeValue>,
|
||||
reason: Option<String>,
|
||||
updated_by: String,
|
||||
},
|
||||
StatusUpdate {
|
||||
connector_refund_id: Option<ConnectorTransactionId>,
|
||||
sent_to_gateway: bool,
|
||||
refund_status: storage_enums::RefundStatus,
|
||||
updated_by: String,
|
||||
processor_refund_data: Option<String>,
|
||||
},
|
||||
ErrorUpdate {
|
||||
refund_status: Option<storage_enums::RefundStatus>,
|
||||
refund_error_message: Option<String>,
|
||||
refund_error_code: Option<String>,
|
||||
updated_by: String,
|
||||
connector_refund_id: Option<ConnectorTransactionId>,
|
||||
processor_refund_data: Option<String>,
|
||||
unified_code: Option<String>,
|
||||
unified_message: Option<String>,
|
||||
},
|
||||
ManualUpdate {
|
||||
refund_status: Option<storage_enums::RefundStatus>,
|
||||
refund_error_message: Option<String>,
|
||||
refund_error_code: Option<String>,
|
||||
updated_by: String,
|
||||
},
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
#[derive(Clone, Debug, AsChangeset, router_derive::DebugAsDisplay)]
|
||||
#[diesel(table_name = refund)]
|
||||
pub struct RefundUpdateInternal {
|
||||
@ -173,6 +321,26 @@ pub struct RefundUpdateInternal {
|
||||
issuer_error_message: Option<String>,
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
#[derive(Clone, Debug, AsChangeset, router_derive::DebugAsDisplay)]
|
||||
#[diesel(table_name = refund)]
|
||||
pub struct RefundUpdateInternal {
|
||||
connector_refund_id: Option<ConnectorTransactionId>,
|
||||
refund_status: Option<storage_enums::RefundStatus>,
|
||||
sent_to_gateway: Option<bool>,
|
||||
refund_error_message: Option<String>,
|
||||
refund_arn: Option<String>,
|
||||
metadata: Option<pii::SecretSerdeValue>,
|
||||
refund_reason: Option<String>,
|
||||
refund_error_code: Option<String>,
|
||||
updated_by: String,
|
||||
modified_at: PrimitiveDateTime,
|
||||
processor_refund_data: Option<String>,
|
||||
unified_code: Option<String>,
|
||||
unified_message: Option<String>,
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
impl RefundUpdateInternal {
|
||||
pub fn create_refund(self, source: Refund) -> Refund {
|
||||
Refund {
|
||||
@ -194,6 +362,29 @@ impl RefundUpdateInternal {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
impl RefundUpdateInternal {
|
||||
pub fn create_refund(self, source: Refund) -> Refund {
|
||||
Refund {
|
||||
connector_refund_id: self.connector_refund_id,
|
||||
refund_status: self.refund_status.unwrap_or_default(),
|
||||
sent_to_gateway: self.sent_to_gateway.unwrap_or_default(),
|
||||
refund_error_message: self.refund_error_message,
|
||||
refund_arn: self.refund_arn,
|
||||
metadata: self.metadata,
|
||||
refund_reason: self.refund_reason,
|
||||
refund_error_code: self.refund_error_code,
|
||||
updated_by: self.updated_by,
|
||||
modified_at: self.modified_at,
|
||||
processor_refund_data: self.processor_refund_data,
|
||||
unified_code: self.unified_code,
|
||||
unified_message: self.unified_message,
|
||||
..source
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
impl From<RefundUpdate> for RefundUpdateInternal {
|
||||
fn from(refund_update: RefundUpdate) -> Self {
|
||||
match refund_update {
|
||||
@ -320,6 +511,122 @@ impl From<RefundUpdate> for RefundUpdateInternal {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
impl From<RefundUpdate> for RefundUpdateInternal {
|
||||
fn from(refund_update: RefundUpdate) -> Self {
|
||||
match refund_update {
|
||||
RefundUpdate::Update {
|
||||
connector_refund_id,
|
||||
refund_status,
|
||||
sent_to_gateway,
|
||||
refund_error_message,
|
||||
refund_arn,
|
||||
updated_by,
|
||||
processor_refund_data,
|
||||
} => Self {
|
||||
connector_refund_id: Some(connector_refund_id),
|
||||
refund_status: Some(refund_status),
|
||||
sent_to_gateway: Some(sent_to_gateway),
|
||||
refund_error_message,
|
||||
refund_arn: Some(refund_arn),
|
||||
updated_by,
|
||||
processor_refund_data,
|
||||
metadata: None,
|
||||
refund_reason: None,
|
||||
refund_error_code: None,
|
||||
modified_at: common_utils::date_time::now(),
|
||||
unified_code: None,
|
||||
unified_message: None,
|
||||
},
|
||||
RefundUpdate::MetadataAndReasonUpdate {
|
||||
metadata,
|
||||
reason,
|
||||
updated_by,
|
||||
} => Self {
|
||||
metadata,
|
||||
refund_reason: reason,
|
||||
updated_by,
|
||||
connector_refund_id: None,
|
||||
refund_status: None,
|
||||
sent_to_gateway: None,
|
||||
refund_error_message: None,
|
||||
refund_arn: None,
|
||||
refund_error_code: None,
|
||||
modified_at: common_utils::date_time::now(),
|
||||
processor_refund_data: None,
|
||||
unified_code: None,
|
||||
unified_message: None,
|
||||
},
|
||||
RefundUpdate::StatusUpdate {
|
||||
connector_refund_id,
|
||||
sent_to_gateway,
|
||||
refund_status,
|
||||
updated_by,
|
||||
processor_refund_data,
|
||||
} => Self {
|
||||
connector_refund_id,
|
||||
sent_to_gateway: Some(sent_to_gateway),
|
||||
refund_status: Some(refund_status),
|
||||
updated_by,
|
||||
processor_refund_data,
|
||||
refund_error_message: None,
|
||||
refund_arn: None,
|
||||
metadata: None,
|
||||
refund_reason: None,
|
||||
refund_error_code: None,
|
||||
modified_at: common_utils::date_time::now(),
|
||||
unified_code: None,
|
||||
unified_message: None,
|
||||
},
|
||||
RefundUpdate::ErrorUpdate {
|
||||
refund_status,
|
||||
refund_error_message,
|
||||
refund_error_code,
|
||||
unified_code,
|
||||
unified_message,
|
||||
updated_by,
|
||||
connector_refund_id,
|
||||
processor_refund_data,
|
||||
} => Self {
|
||||
refund_status,
|
||||
refund_error_message,
|
||||
refund_error_code,
|
||||
updated_by,
|
||||
connector_refund_id,
|
||||
processor_refund_data,
|
||||
sent_to_gateway: None,
|
||||
refund_arn: None,
|
||||
metadata: None,
|
||||
refund_reason: None,
|
||||
modified_at: common_utils::date_time::now(),
|
||||
unified_code,
|
||||
unified_message,
|
||||
},
|
||||
RefundUpdate::ManualUpdate {
|
||||
refund_status,
|
||||
refund_error_message,
|
||||
refund_error_code,
|
||||
updated_by,
|
||||
} => Self {
|
||||
refund_status,
|
||||
refund_error_message,
|
||||
refund_error_code,
|
||||
updated_by,
|
||||
connector_refund_id: None,
|
||||
sent_to_gateway: None,
|
||||
refund_arn: None,
|
||||
metadata: None,
|
||||
refund_reason: None,
|
||||
modified_at: common_utils::date_time::now(),
|
||||
processor_refund_data: None,
|
||||
unified_code: None,
|
||||
unified_message: None,
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
impl RefundUpdate {
|
||||
pub fn apply_changeset(self, source: Refund) -> Refund {
|
||||
let RefundUpdateInternal {
|
||||
@ -360,6 +667,43 @@ impl RefundUpdate {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
impl RefundUpdate {
|
||||
pub fn apply_changeset(self, source: Refund) -> Refund {
|
||||
let RefundUpdateInternal {
|
||||
connector_refund_id,
|
||||
refund_status,
|
||||
sent_to_gateway,
|
||||
refund_error_message,
|
||||
refund_arn,
|
||||
metadata,
|
||||
refund_reason,
|
||||
refund_error_code,
|
||||
updated_by,
|
||||
modified_at: _,
|
||||
processor_refund_data,
|
||||
unified_code,
|
||||
unified_message,
|
||||
} = self.into();
|
||||
Refund {
|
||||
connector_refund_id: connector_refund_id.or(source.connector_refund_id),
|
||||
refund_status: refund_status.unwrap_or(source.refund_status),
|
||||
sent_to_gateway: sent_to_gateway.unwrap_or(source.sent_to_gateway),
|
||||
refund_error_message: refund_error_message.or(source.refund_error_message),
|
||||
refund_error_code: refund_error_code.or(source.refund_error_code),
|
||||
refund_arn: refund_arn.or(source.refund_arn),
|
||||
metadata: metadata.or(source.metadata),
|
||||
refund_reason: refund_reason.or(source.refund_reason),
|
||||
updated_by,
|
||||
modified_at: common_utils::date_time::now(),
|
||||
processor_refund_data: processor_refund_data.or(source.processor_refund_data),
|
||||
unified_code: unified_code.or(source.unified_code),
|
||||
unified_message: unified_message.or(source.unified_message),
|
||||
..source
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Eq, PartialEq, Deserialize, Serialize)]
|
||||
pub struct RefundCoreWorkflow {
|
||||
pub refund_internal_reference_id: String,
|
||||
@ -379,6 +723,16 @@ impl common_utils::events::ApiEventMetric for Refund {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "v2")]
|
||||
impl common_utils::events::ApiEventMetric for Refund {
|
||||
fn get_api_event_type(&self) -> Option<common_utils::events::ApiEventsType> {
|
||||
Some(common_utils::events::ApiEventsType::Refund {
|
||||
payment_id: self.payment_id.clone(),
|
||||
refund_id: self.id.clone(),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl ConnectorTransactionIdTrait for Refund {
|
||||
fn get_optional_connector_refund_id(&self) -> Option<&String> {
|
||||
match self
|
||||
|
||||
@ -1160,11 +1160,7 @@ diesel::table! {
|
||||
use diesel::sql_types::*;
|
||||
use crate::enums::diesel_exports::*;
|
||||
|
||||
refund (merchant_id, refund_id) {
|
||||
#[max_length = 64]
|
||||
internal_reference_id -> Varchar,
|
||||
#[max_length = 64]
|
||||
refund_id -> Varchar,
|
||||
refund (id) {
|
||||
#[max_length = 64]
|
||||
payment_id -> Varchar,
|
||||
#[max_length = 64]
|
||||
@ -1200,8 +1196,6 @@ diesel::table! {
|
||||
profile_id -> Nullable<Varchar>,
|
||||
#[max_length = 32]
|
||||
updated_by -> Varchar,
|
||||
#[max_length = 32]
|
||||
merchant_connector_id -> Nullable<Varchar>,
|
||||
charges -> Nullable<Jsonb>,
|
||||
#[max_length = 32]
|
||||
organization_id -> Varchar,
|
||||
@ -1212,6 +1206,12 @@ diesel::table! {
|
||||
unified_message -> Nullable<Varchar>,
|
||||
processor_refund_data -> Nullable<Text>,
|
||||
processor_transaction_data -> Nullable<Text>,
|
||||
#[max_length = 64]
|
||||
id -> Varchar,
|
||||
#[max_length = 64]
|
||||
merchant_reference_id -> Varchar,
|
||||
#[max_length = 64]
|
||||
connector_id -> Nullable<Varchar>,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -33,12 +33,13 @@ payouts = ["api_models/payouts", "common_enums/payouts", "hyperswitch_connectors
|
||||
payout_retry = ["payouts"]
|
||||
recon = ["email", "api_models/recon"]
|
||||
retry = []
|
||||
v2 = ["customer_v2", "payment_methods_v2", "common_default", "api_models/v2", "diesel_models/v2", "hyperswitch_domain_models/v2", "storage_impl/v2", "kgraph_utils/v2", "common_utils/v2", "hyperswitch_connectors/v2","hyperswitch_interfaces/v2", "common_types/v2","revenue_recovery","scheduler/v2"]
|
||||
v2 = ["customer_v2", "payment_methods_v2", "common_default", "api_models/v2", "diesel_models/v2", "hyperswitch_domain_models/v2", "storage_impl/v2", "kgraph_utils/v2", "common_utils/v2", "hyperswitch_connectors/v2","hyperswitch_interfaces/v2", "common_types/v2","revenue_recovery","refunds_v2","scheduler/v2"]
|
||||
v1 = ["common_default", "api_models/v1", "diesel_models/v1", "hyperswitch_domain_models/v1", "storage_impl/v1", "hyperswitch_interfaces/v1", "kgraph_utils/v1", "common_utils/v1", "hyperswitch_connectors/v1", "common_types/v1","scheduler/v1"]
|
||||
customer_v2 = ["api_models/customer_v2", "diesel_models/customer_v2", "hyperswitch_domain_models/customer_v2", "storage_impl/customer_v2"]
|
||||
payment_methods_v2 = ["api_models/payment_methods_v2", "diesel_models/payment_methods_v2", "hyperswitch_domain_models/payment_methods_v2", "storage_impl/payment_methods_v2", "common_utils/payment_methods_v2"]
|
||||
dynamic_routing = ["external_services/dynamic_routing", "storage_impl/dynamic_routing", "api_models/dynamic_routing"]
|
||||
revenue_recovery =["api_models/revenue_recovery","hyperswitch_interfaces/revenue_recovery","hyperswitch_domain_models/revenue_recovery","hyperswitch_connectors/revenue_recovery"]
|
||||
refunds_v2 = ["diesel_models/refunds_v2", "storage_impl/refunds_v2"]
|
||||
|
||||
# Partial Auth
|
||||
# The feature reduces the overhead of the router authenticating the merchant for every request, and trusts on `x-merchant-id` header to be present in the request.
|
||||
|
||||
@ -2667,6 +2667,7 @@ impl CaptureInterface for KafkaStore {
|
||||
|
||||
#[async_trait::async_trait]
|
||||
impl RefundInterface for KafkaStore {
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn find_refund_by_internal_reference_id_merchant_id(
|
||||
&self,
|
||||
internal_reference_id: &str,
|
||||
@ -2682,6 +2683,7 @@ impl RefundInterface for KafkaStore {
|
||||
.await
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn find_refund_by_payment_id_merchant_id(
|
||||
&self,
|
||||
payment_id: &id_type::PaymentId,
|
||||
@ -2693,6 +2695,7 @@ impl RefundInterface for KafkaStore {
|
||||
.await
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn find_refund_by_merchant_id_refund_id(
|
||||
&self,
|
||||
merchant_id: &id_type::MerchantId,
|
||||
@ -2704,6 +2707,7 @@ impl RefundInterface for KafkaStore {
|
||||
.await
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn find_refund_by_merchant_id_connector_refund_id_connector(
|
||||
&self,
|
||||
merchant_id: &id_type::MerchantId,
|
||||
@ -2742,6 +2746,7 @@ impl RefundInterface for KafkaStore {
|
||||
Ok(refund)
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn find_refund_by_merchant_id_connector_transaction_id(
|
||||
&self,
|
||||
merchant_id: &id_type::MerchantId,
|
||||
@ -2757,6 +2762,17 @@ impl RefundInterface for KafkaStore {
|
||||
.await
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
async fn find_refund_by_id(
|
||||
&self,
|
||||
id: &id_type::GlobalRefundId,
|
||||
storage_scheme: MerchantStorageScheme,
|
||||
) -> CustomResult<storage::Refund, errors::StorageError> {
|
||||
self.diesel_store
|
||||
.find_refund_by_id(id, storage_scheme)
|
||||
.await
|
||||
}
|
||||
|
||||
async fn insert_refund(
|
||||
&self,
|
||||
new: storage::RefundNew,
|
||||
@ -2774,7 +2790,11 @@ impl RefundInterface for KafkaStore {
|
||||
Ok(refund)
|
||||
}
|
||||
|
||||
#[cfg(feature = "olap")]
|
||||
#[cfg(all(
|
||||
any(feature = "v1", feature = "v2"),
|
||||
not(feature = "refunds_v2"),
|
||||
feature = "olap"
|
||||
))]
|
||||
async fn filter_refund_by_constraints(
|
||||
&self,
|
||||
merchant_id: &id_type::MerchantId,
|
||||
@ -2794,7 +2814,11 @@ impl RefundInterface for KafkaStore {
|
||||
.await
|
||||
}
|
||||
|
||||
#[cfg(feature = "olap")]
|
||||
#[cfg(all(
|
||||
any(feature = "v1", feature = "v2"),
|
||||
not(feature = "refunds_v2"),
|
||||
feature = "olap"
|
||||
))]
|
||||
async fn filter_refund_by_meta_constraints(
|
||||
&self,
|
||||
merchant_id: &id_type::MerchantId,
|
||||
@ -2806,7 +2830,11 @@ impl RefundInterface for KafkaStore {
|
||||
.await
|
||||
}
|
||||
|
||||
#[cfg(feature = "olap")]
|
||||
#[cfg(all(
|
||||
any(feature = "v1", feature = "v2"),
|
||||
not(feature = "refunds_v2"),
|
||||
feature = "olap"
|
||||
))]
|
||||
async fn get_refund_status_with_count(
|
||||
&self,
|
||||
merchant_id: &id_type::MerchantId,
|
||||
@ -2819,7 +2847,11 @@ impl RefundInterface for KafkaStore {
|
||||
.await
|
||||
}
|
||||
|
||||
#[cfg(feature = "olap")]
|
||||
#[cfg(all(
|
||||
any(feature = "v1", feature = "v2"),
|
||||
not(feature = "refunds_v2"),
|
||||
feature = "olap"
|
||||
))]
|
||||
async fn get_total_count_of_refunds(
|
||||
&self,
|
||||
merchant_id: &id_type::MerchantId,
|
||||
|
||||
@ -17,6 +17,7 @@ const MAX_LIMIT: usize = 100;
|
||||
|
||||
#[async_trait::async_trait]
|
||||
pub trait RefundInterface {
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn find_refund_by_internal_reference_id_merchant_id(
|
||||
&self,
|
||||
internal_reference_id: &str,
|
||||
@ -24,6 +25,7 @@ pub trait RefundInterface {
|
||||
storage_scheme: enums::MerchantStorageScheme,
|
||||
) -> CustomResult<storage_types::Refund, errors::StorageError>;
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn find_refund_by_payment_id_merchant_id(
|
||||
&self,
|
||||
payment_id: &common_utils::id_type::PaymentId,
|
||||
@ -31,6 +33,7 @@ pub trait RefundInterface {
|
||||
storage_scheme: enums::MerchantStorageScheme,
|
||||
) -> CustomResult<Vec<storage_types::Refund>, errors::StorageError>;
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn find_refund_by_merchant_id_refund_id(
|
||||
&self,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
@ -38,6 +41,7 @@ pub trait RefundInterface {
|
||||
storage_scheme: enums::MerchantStorageScheme,
|
||||
) -> CustomResult<storage_types::Refund, errors::StorageError>;
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn find_refund_by_merchant_id_connector_refund_id_connector(
|
||||
&self,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
@ -53,6 +57,7 @@ pub trait RefundInterface {
|
||||
storage_scheme: enums::MerchantStorageScheme,
|
||||
) -> CustomResult<storage_types::Refund, errors::StorageError>;
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn find_refund_by_merchant_id_connector_transaction_id(
|
||||
&self,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
@ -60,13 +65,24 @@ pub trait RefundInterface {
|
||||
storage_scheme: enums::MerchantStorageScheme,
|
||||
) -> CustomResult<Vec<storage_types::Refund>, errors::StorageError>;
|
||||
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
async fn find_refund_by_id(
|
||||
&self,
|
||||
id: &common_utils::id_type::GlobalRefundId,
|
||||
storage_scheme: enums::MerchantStorageScheme,
|
||||
) -> CustomResult<storage_types::Refund, errors::StorageError>;
|
||||
|
||||
async fn insert_refund(
|
||||
&self,
|
||||
new: storage_types::RefundNew,
|
||||
storage_scheme: enums::MerchantStorageScheme,
|
||||
) -> CustomResult<storage_types::Refund, errors::StorageError>;
|
||||
|
||||
#[cfg(feature = "olap")]
|
||||
#[cfg(all(
|
||||
any(feature = "v1", feature = "v2"),
|
||||
not(feature = "refunds_v2"),
|
||||
feature = "olap"
|
||||
))]
|
||||
async fn filter_refund_by_constraints(
|
||||
&self,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
@ -76,7 +92,11 @@ pub trait RefundInterface {
|
||||
offset: i64,
|
||||
) -> CustomResult<Vec<diesel_models::refund::Refund>, errors::StorageError>;
|
||||
|
||||
#[cfg(feature = "olap")]
|
||||
#[cfg(all(
|
||||
any(feature = "v1", feature = "v2"),
|
||||
not(feature = "refunds_v2"),
|
||||
feature = "olap"
|
||||
))]
|
||||
async fn filter_refund_by_meta_constraints(
|
||||
&self,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
@ -84,7 +104,11 @@ pub trait RefundInterface {
|
||||
storage_scheme: enums::MerchantStorageScheme,
|
||||
) -> CustomResult<api_models::refunds::RefundListMetaData, errors::StorageError>;
|
||||
|
||||
#[cfg(feature = "olap")]
|
||||
#[cfg(all(
|
||||
any(feature = "v1", feature = "v2"),
|
||||
not(feature = "refunds_v2"),
|
||||
feature = "olap"
|
||||
))]
|
||||
async fn get_refund_status_with_count(
|
||||
&self,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
@ -93,7 +117,11 @@ pub trait RefundInterface {
|
||||
storage_scheme: enums::MerchantStorageScheme,
|
||||
) -> CustomResult<Vec<(common_enums::RefundStatus, i64)>, errors::StorageError>;
|
||||
|
||||
#[cfg(feature = "olap")]
|
||||
#[cfg(all(
|
||||
any(feature = "v1", feature = "v2"),
|
||||
not(feature = "refunds_v2"),
|
||||
feature = "olap"
|
||||
))]
|
||||
async fn get_total_count_of_refunds(
|
||||
&self,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
@ -320,6 +348,7 @@ mod storage {
|
||||
};
|
||||
#[async_trait::async_trait]
|
||||
impl RefundInterface for Store {
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
#[instrument(skip_all)]
|
||||
async fn find_refund_by_internal_reference_id_merchant_id(
|
||||
&self,
|
||||
@ -376,6 +405,7 @@ mod storage {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
#[instrument(skip_all)]
|
||||
async fn insert_refund(
|
||||
&self,
|
||||
@ -529,6 +559,20 @@ mod storage {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
#[instrument(skip_all)]
|
||||
async fn insert_refund(
|
||||
&self,
|
||||
new: storage_types::RefundNew,
|
||||
_storage_scheme: enums::MerchantStorageScheme,
|
||||
) -> CustomResult<storage_types::Refund, errors::StorageError> {
|
||||
let conn = connection::pg_connection_write(self).await?;
|
||||
new.insert(&conn)
|
||||
.await
|
||||
.map_err(|error| report!(errors::StorageError::from(error)))
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
#[instrument(skip_all)]
|
||||
async fn find_refund_by_merchant_id_connector_transaction_id(
|
||||
&self,
|
||||
@ -588,6 +632,7 @@ mod storage {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
#[instrument(skip_all)]
|
||||
async fn update_refund(
|
||||
&self,
|
||||
@ -652,6 +697,21 @@ mod storage {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
#[instrument(skip_all)]
|
||||
async fn update_refund(
|
||||
&self,
|
||||
this: storage_types::Refund,
|
||||
refund: storage_types::RefundUpdate,
|
||||
_storage_scheme: enums::MerchantStorageScheme,
|
||||
) -> CustomResult<storage_types::Refund, errors::StorageError> {
|
||||
let conn = connection::pg_connection_write(self).await?;
|
||||
this.update_with_id(&conn, refund)
|
||||
.await
|
||||
.map_err(|error| report!(errors::StorageError::from(error)))
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
#[instrument(skip_all)]
|
||||
async fn find_refund_by_merchant_id_refund_id(
|
||||
&self,
|
||||
@ -702,6 +762,7 @@ mod storage {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
#[instrument(skip_all)]
|
||||
async fn find_refund_by_merchant_id_connector_refund_id_connector(
|
||||
&self,
|
||||
@ -760,6 +821,7 @@ mod storage {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
#[instrument(skip_all)]
|
||||
async fn find_refund_by_payment_id_merchant_id(
|
||||
&self,
|
||||
@ -807,7 +869,24 @@ mod storage {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "olap")]
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
#[instrument(skip_all)]
|
||||
async fn find_refund_by_id(
|
||||
&self,
|
||||
id: &common_utils::id_type::GlobalRefundId,
|
||||
_storage_scheme: enums::MerchantStorageScheme,
|
||||
) -> CustomResult<storage_types::Refund, errors::StorageError> {
|
||||
let conn = connection::pg_connection_read(self).await?;
|
||||
storage_types::Refund::find_by_global_id(&conn, id)
|
||||
.await
|
||||
.map_err(|error| report!(errors::StorageError::from(error)))
|
||||
}
|
||||
|
||||
#[cfg(all(
|
||||
any(feature = "v1", feature = "v2"),
|
||||
not(feature = "refunds_v2"),
|
||||
feature = "olap"
|
||||
))]
|
||||
#[instrument(skip_all)]
|
||||
async fn filter_refund_by_constraints(
|
||||
&self,
|
||||
@ -829,7 +908,11 @@ mod storage {
|
||||
.map_err(|error| report!(errors::StorageError::from(error)))
|
||||
}
|
||||
|
||||
#[cfg(feature = "olap")]
|
||||
#[cfg(all(
|
||||
any(feature = "v1", feature = "v2"),
|
||||
not(feature = "refunds_v2"),
|
||||
feature = "olap"
|
||||
))]
|
||||
#[instrument(skip_all)]
|
||||
async fn filter_refund_by_meta_constraints(
|
||||
&self,
|
||||
@ -843,7 +926,11 @@ mod storage {
|
||||
.map_err(|error|report!(errors::StorageError::from(error)))
|
||||
}
|
||||
|
||||
#[cfg(feature = "olap")]
|
||||
#[cfg(all(
|
||||
any(feature = "v1", feature = "v2"),
|
||||
not(feature = "refunds_v2"),
|
||||
feature = "olap"
|
||||
))]
|
||||
#[instrument(skip_all)]
|
||||
async fn get_refund_status_with_count(
|
||||
&self,
|
||||
@ -858,7 +945,11 @@ mod storage {
|
||||
.map_err(|error| report!(errors::StorageError::from(error)))
|
||||
}
|
||||
|
||||
#[cfg(feature = "olap")]
|
||||
#[cfg(all(
|
||||
any(feature = "v1", feature = "v2"),
|
||||
not(feature = "refunds_v2"),
|
||||
feature = "olap"
|
||||
))]
|
||||
#[instrument(skip_all)]
|
||||
async fn get_total_count_of_refunds(
|
||||
&self,
|
||||
@ -880,6 +971,7 @@ mod storage {
|
||||
|
||||
#[async_trait::async_trait]
|
||||
impl RefundInterface for MockDb {
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn find_refund_by_internal_reference_id_merchant_id(
|
||||
&self,
|
||||
internal_reference_id: &str,
|
||||
@ -899,6 +991,7 @@ impl RefundInterface for MockDb {
|
||||
})
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn insert_refund(
|
||||
&self,
|
||||
new: storage_types::RefundNew,
|
||||
@ -950,6 +1043,56 @@ impl RefundInterface for MockDb {
|
||||
refunds.push(refund.clone());
|
||||
Ok(refund)
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
async fn insert_refund(
|
||||
&self,
|
||||
new: storage_types::RefundNew,
|
||||
_storage_scheme: enums::MerchantStorageScheme,
|
||||
) -> CustomResult<storage_types::Refund, errors::StorageError> {
|
||||
let mut refunds = self.refunds.lock().await;
|
||||
let current_time = common_utils::date_time::now();
|
||||
|
||||
let refund = storage_types::Refund {
|
||||
id: new.id,
|
||||
merchant_reference_id: new.merchant_reference_id,
|
||||
payment_id: new.payment_id,
|
||||
merchant_id: new.merchant_id,
|
||||
attempt_id: new.attempt_id,
|
||||
connector_transaction_id: new.connector_transaction_id,
|
||||
connector: new.connector,
|
||||
connector_refund_id: new.connector_refund_id,
|
||||
external_reference_id: new.external_reference_id,
|
||||
refund_type: new.refund_type,
|
||||
total_amount: new.total_amount,
|
||||
currency: new.currency,
|
||||
refund_amount: new.refund_amount,
|
||||
refund_status: new.refund_status,
|
||||
sent_to_gateway: new.sent_to_gateway,
|
||||
refund_error_message: None,
|
||||
refund_error_code: None,
|
||||
metadata: new.metadata,
|
||||
refund_arn: new.refund_arn.clone(),
|
||||
created_at: new.created_at,
|
||||
modified_at: current_time,
|
||||
description: new.description,
|
||||
refund_reason: new.refund_reason.clone(),
|
||||
profile_id: new.profile_id,
|
||||
updated_by: new.updated_by,
|
||||
connector_id: new.connector_id,
|
||||
charges: new.charges,
|
||||
split_refunds: new.split_refunds,
|
||||
organization_id: new.organization_id,
|
||||
unified_code: None,
|
||||
unified_message: None,
|
||||
processor_refund_data: new.processor_refund_data.clone(),
|
||||
processor_transaction_data: new.processor_transaction_data.clone(),
|
||||
};
|
||||
refunds.push(refund.clone());
|
||||
Ok(refund)
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn find_refund_by_merchant_id_connector_transaction_id(
|
||||
&self,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
@ -968,6 +1111,7 @@ impl RefundInterface for MockDb {
|
||||
.collect::<Vec<_>>())
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn update_refund(
|
||||
&self,
|
||||
this: storage_types::Refund,
|
||||
@ -990,6 +1134,30 @@ impl RefundInterface for MockDb {
|
||||
})
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
async fn update_refund(
|
||||
&self,
|
||||
this: storage_types::Refund,
|
||||
refund: storage_types::RefundUpdate,
|
||||
_storage_scheme: enums::MerchantStorageScheme,
|
||||
) -> CustomResult<storage_types::Refund, errors::StorageError> {
|
||||
self.refunds
|
||||
.lock()
|
||||
.await
|
||||
.iter_mut()
|
||||
.find(|refund| this.merchant_reference_id == refund.merchant_reference_id)
|
||||
.map(|r| {
|
||||
let refund_updated = RefundUpdateInternal::from(refund).create_refund(r.clone());
|
||||
*r = refund_updated.clone();
|
||||
refund_updated
|
||||
})
|
||||
.ok_or_else(|| {
|
||||
errors::StorageError::ValueNotFound("cannot find refund to update".to_string())
|
||||
.into()
|
||||
})
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn find_refund_by_merchant_id_refund_id(
|
||||
&self,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
@ -1007,6 +1175,7 @@ impl RefundInterface for MockDb {
|
||||
})
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn find_refund_by_merchant_id_connector_refund_id_connector(
|
||||
&self,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
@ -1032,6 +1201,7 @@ impl RefundInterface for MockDb {
|
||||
})
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn find_refund_by_payment_id_merchant_id(
|
||||
&self,
|
||||
payment_id: &common_utils::id_type::PaymentId,
|
||||
@ -1047,7 +1217,28 @@ impl RefundInterface for MockDb {
|
||||
.collect::<Vec<_>>())
|
||||
}
|
||||
|
||||
#[cfg(feature = "olap")]
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
async fn find_refund_by_id(
|
||||
&self,
|
||||
id: &common_utils::id_type::GlobalRefundId,
|
||||
_storage_scheme: enums::MerchantStorageScheme,
|
||||
) -> CustomResult<storage_types::Refund, errors::StorageError> {
|
||||
let refunds = self.refunds.lock().await;
|
||||
|
||||
refunds
|
||||
.iter()
|
||||
.find(|refund| refund.id == *id)
|
||||
.cloned()
|
||||
.ok_or_else(|| {
|
||||
errors::StorageError::DatabaseError(DatabaseError::NotFound.into()).into()
|
||||
})
|
||||
}
|
||||
|
||||
#[cfg(all(
|
||||
any(feature = "v1", feature = "v2"),
|
||||
not(feature = "refunds_v2"),
|
||||
feature = "olap"
|
||||
))]
|
||||
async fn filter_refund_by_constraints(
|
||||
&self,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
@ -1162,7 +1353,11 @@ impl RefundInterface for MockDb {
|
||||
Ok(filtered_refunds)
|
||||
}
|
||||
|
||||
#[cfg(feature = "olap")]
|
||||
#[cfg(all(
|
||||
any(feature = "v1", feature = "v2"),
|
||||
not(feature = "refunds_v2"),
|
||||
feature = "olap"
|
||||
))]
|
||||
async fn filter_refund_by_meta_constraints(
|
||||
&self,
|
||||
_merchant_id: &common_utils::id_type::MerchantId,
|
||||
@ -1209,7 +1404,11 @@ impl RefundInterface for MockDb {
|
||||
Ok(refund_meta_data)
|
||||
}
|
||||
|
||||
#[cfg(feature = "olap")]
|
||||
#[cfg(all(
|
||||
any(feature = "v1", feature = "v2"),
|
||||
not(feature = "refunds_v2"),
|
||||
feature = "olap"
|
||||
))]
|
||||
async fn get_refund_status_with_count(
|
||||
&self,
|
||||
_merchant_id: &common_utils::id_type::MerchantId,
|
||||
@ -1255,7 +1454,11 @@ impl RefundInterface for MockDb {
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
#[cfg(feature = "olap")]
|
||||
#[cfg(all(
|
||||
any(feature = "v1", feature = "v2"),
|
||||
not(feature = "refunds_v2"),
|
||||
feature = "olap"
|
||||
))]
|
||||
async fn get_total_count_of_refunds(
|
||||
&self,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
|
||||
@ -5,6 +5,9 @@ use common_utils::{
|
||||
use diesel_models::{enums as storage_enums, refund::Refund};
|
||||
use time::OffsetDateTime;
|
||||
|
||||
use crate::events;
|
||||
|
||||
#[cfg(feature = "v1")]
|
||||
#[derive(serde::Serialize, Debug)]
|
||||
pub struct KafkaRefund<'a> {
|
||||
pub internal_reference_id: &'a String,
|
||||
@ -35,6 +38,7 @@ pub struct KafkaRefund<'a> {
|
||||
pub organization_id: &'a id_type::OrganizationId,
|
||||
}
|
||||
|
||||
#[cfg(feature = "v1")]
|
||||
impl<'a> KafkaRefund<'a> {
|
||||
pub fn from_storage(refund: &'a Refund) -> Self {
|
||||
Self {
|
||||
@ -66,6 +70,70 @@ impl<'a> KafkaRefund<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "v2")]
|
||||
#[derive(serde::Serialize, Debug)]
|
||||
pub struct KafkaRefund<'a> {
|
||||
pub id: &'a id_type::GlobalRefundId,
|
||||
pub merchant_reference_id: &'a id_type::RefundReferenceId,
|
||||
pub payment_id: &'a id_type::GlobalPaymentId,
|
||||
pub merchant_id: &'a id_type::MerchantId,
|
||||
pub connector_transaction_id: &'a String,
|
||||
pub connector: &'a String,
|
||||
pub connector_refund_id: Option<&'a String>,
|
||||
pub external_reference_id: Option<&'a String>,
|
||||
pub refund_type: &'a storage_enums::RefundType,
|
||||
pub total_amount: &'a MinorUnit,
|
||||
pub currency: &'a storage_enums::Currency,
|
||||
pub refund_amount: &'a MinorUnit,
|
||||
pub refund_status: &'a storage_enums::RefundStatus,
|
||||
pub sent_to_gateway: &'a bool,
|
||||
pub refund_error_message: Option<&'a String>,
|
||||
pub refund_arn: Option<&'a String>,
|
||||
#[serde(default, with = "time::serde::timestamp")]
|
||||
pub created_at: OffsetDateTime,
|
||||
#[serde(default, with = "time::serde::timestamp")]
|
||||
pub modified_at: OffsetDateTime,
|
||||
pub description: Option<&'a String>,
|
||||
pub attempt_id: &'a id_type::GlobalAttemptId,
|
||||
pub refund_reason: Option<&'a String>,
|
||||
pub refund_error_code: Option<&'a String>,
|
||||
pub profile_id: Option<&'a id_type::ProfileId>,
|
||||
pub organization_id: &'a id_type::OrganizationId,
|
||||
}
|
||||
|
||||
#[cfg(feature = "v2")]
|
||||
impl<'a> KafkaRefund<'a> {
|
||||
pub fn from_storage(refund: &'a Refund) -> Self {
|
||||
Self {
|
||||
id: &refund.id,
|
||||
merchant_reference_id: &refund.merchant_reference_id,
|
||||
payment_id: &refund.payment_id,
|
||||
merchant_id: &refund.merchant_id,
|
||||
connector_transaction_id: refund.get_connector_transaction_id(),
|
||||
connector: &refund.connector,
|
||||
connector_refund_id: refund.get_optional_connector_refund_id(),
|
||||
external_reference_id: refund.external_reference_id.as_ref(),
|
||||
refund_type: &refund.refund_type,
|
||||
total_amount: &refund.total_amount,
|
||||
currency: &refund.currency,
|
||||
refund_amount: &refund.refund_amount,
|
||||
refund_status: &refund.refund_status,
|
||||
sent_to_gateway: &refund.sent_to_gateway,
|
||||
refund_error_message: refund.refund_error_message.as_ref(),
|
||||
refund_arn: refund.refund_arn.as_ref(),
|
||||
created_at: refund.created_at.assume_utc(),
|
||||
modified_at: refund.modified_at.assume_utc(),
|
||||
description: refund.description.as_ref(),
|
||||
attempt_id: &refund.attempt_id,
|
||||
refund_reason: refund.refund_reason.as_ref(),
|
||||
refund_error_code: refund.refund_error_code.as_ref(),
|
||||
profile_id: refund.profile_id.as_ref(),
|
||||
organization_id: &refund.organization_id,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "v1")]
|
||||
impl super::KafkaMessage for KafkaRefund<'_> {
|
||||
fn key(&self) -> String {
|
||||
format!(
|
||||
@ -77,7 +145,24 @@ impl super::KafkaMessage for KafkaRefund<'_> {
|
||||
)
|
||||
}
|
||||
|
||||
fn event_type(&self) -> crate::events::EventType {
|
||||
crate::events::EventType::Refund
|
||||
fn event_type(&self) -> events::EventType {
|
||||
events::EventType::Refund
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "v2")]
|
||||
impl super::KafkaMessage for KafkaRefund<'_> {
|
||||
fn key(&self) -> String {
|
||||
format!(
|
||||
"{}_{}_{}_{}",
|
||||
self.merchant_id.get_string_repr(),
|
||||
self.payment_id.get_string_repr(),
|
||||
self.attempt_id.get_string_repr(),
|
||||
self.merchant_reference_id.get_string_repr()
|
||||
)
|
||||
}
|
||||
|
||||
fn event_type(&self) -> events::EventType {
|
||||
events::EventType::Refund
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,6 +5,9 @@ use common_utils::{
|
||||
use diesel_models::{enums as storage_enums, refund::Refund};
|
||||
use time::OffsetDateTime;
|
||||
|
||||
use crate::events;
|
||||
|
||||
#[cfg(feature = "v1")]
|
||||
#[serde_with::skip_serializing_none]
|
||||
#[derive(serde::Serialize, Debug)]
|
||||
pub struct KafkaRefundEvent<'a> {
|
||||
@ -36,6 +39,7 @@ pub struct KafkaRefundEvent<'a> {
|
||||
pub organization_id: &'a id_type::OrganizationId,
|
||||
}
|
||||
|
||||
#[cfg(feature = "v1")]
|
||||
impl<'a> KafkaRefundEvent<'a> {
|
||||
pub fn from_storage(refund: &'a Refund) -> Self {
|
||||
Self {
|
||||
@ -67,6 +71,71 @@ impl<'a> KafkaRefundEvent<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "v2")]
|
||||
#[serde_with::skip_serializing_none]
|
||||
#[derive(serde::Serialize, Debug)]
|
||||
pub struct KafkaRefundEvent<'a> {
|
||||
pub id: &'a id_type::GlobalRefundId,
|
||||
pub merchant_reference_id: &'a id_type::RefundReferenceId,
|
||||
pub payment_id: &'a id_type::GlobalPaymentId,
|
||||
pub merchant_id: &'a id_type::MerchantId,
|
||||
pub connector_transaction_id: &'a String,
|
||||
pub connector: &'a String,
|
||||
pub connector_refund_id: Option<&'a String>,
|
||||
pub external_reference_id: Option<&'a String>,
|
||||
pub refund_type: &'a storage_enums::RefundType,
|
||||
pub total_amount: &'a MinorUnit,
|
||||
pub currency: &'a storage_enums::Currency,
|
||||
pub refund_amount: &'a MinorUnit,
|
||||
pub refund_status: &'a storage_enums::RefundStatus,
|
||||
pub sent_to_gateway: &'a bool,
|
||||
pub refund_error_message: Option<&'a String>,
|
||||
pub refund_arn: Option<&'a String>,
|
||||
#[serde(default, with = "time::serde::timestamp::nanoseconds")]
|
||||
pub created_at: OffsetDateTime,
|
||||
#[serde(default, with = "time::serde::timestamp::nanoseconds")]
|
||||
pub modified_at: OffsetDateTime,
|
||||
pub description: Option<&'a String>,
|
||||
pub attempt_id: &'a id_type::GlobalAttemptId,
|
||||
pub refund_reason: Option<&'a String>,
|
||||
pub refund_error_code: Option<&'a String>,
|
||||
pub profile_id: Option<&'a id_type::ProfileId>,
|
||||
pub organization_id: &'a id_type::OrganizationId,
|
||||
}
|
||||
|
||||
#[cfg(feature = "v2")]
|
||||
impl<'a> KafkaRefundEvent<'a> {
|
||||
pub fn from_storage(refund: &'a Refund) -> Self {
|
||||
Self {
|
||||
id: &refund.id,
|
||||
merchant_reference_id: &refund.merchant_reference_id,
|
||||
payment_id: &refund.payment_id,
|
||||
merchant_id: &refund.merchant_id,
|
||||
connector_transaction_id: refund.get_connector_transaction_id(),
|
||||
connector: &refund.connector,
|
||||
connector_refund_id: refund.get_optional_connector_refund_id(),
|
||||
external_reference_id: refund.external_reference_id.as_ref(),
|
||||
refund_type: &refund.refund_type,
|
||||
total_amount: &refund.total_amount,
|
||||
currency: &refund.currency,
|
||||
refund_amount: &refund.refund_amount,
|
||||
refund_status: &refund.refund_status,
|
||||
sent_to_gateway: &refund.sent_to_gateway,
|
||||
refund_error_message: refund.refund_error_message.as_ref(),
|
||||
refund_arn: refund.refund_arn.as_ref(),
|
||||
created_at: refund.created_at.assume_utc(),
|
||||
modified_at: refund.modified_at.assume_utc(),
|
||||
description: refund.description.as_ref(),
|
||||
attempt_id: &refund.attempt_id,
|
||||
refund_reason: refund.refund_reason.as_ref(),
|
||||
refund_error_code: refund.refund_error_code.as_ref(),
|
||||
profile_id: refund.profile_id.as_ref(),
|
||||
organization_id: &refund.organization_id,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "v1")]
|
||||
impl super::KafkaMessage for KafkaRefundEvent<'_> {
|
||||
fn key(&self) -> String {
|
||||
format!(
|
||||
@ -77,8 +146,23 @@ impl super::KafkaMessage for KafkaRefundEvent<'_> {
|
||||
self.refund_id
|
||||
)
|
||||
}
|
||||
|
||||
fn event_type(&self) -> crate::events::EventType {
|
||||
crate::events::EventType::Refund
|
||||
fn event_type(&self) -> events::EventType {
|
||||
events::EventType::Refund
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "v2")]
|
||||
impl super::KafkaMessage for KafkaRefundEvent<'_> {
|
||||
fn key(&self) -> String {
|
||||
format!(
|
||||
"{}_{}_{}_{}",
|
||||
self.merchant_id.get_string_repr(),
|
||||
self.payment_id.get_string_repr(),
|
||||
self.attempt_id.get_string_repr(),
|
||||
self.merchant_reference_id.get_string_repr()
|
||||
)
|
||||
}
|
||||
fn event_type(&self) -> events::EventType {
|
||||
events::EventType::Refund
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,6 +18,7 @@ use crate::{connection::PgPooledConn, logger};
|
||||
|
||||
#[async_trait::async_trait]
|
||||
pub trait RefundDbExt: Sized {
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn filter_by_constraints(
|
||||
conn: &PgPooledConn,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
@ -26,18 +27,21 @@ pub trait RefundDbExt: Sized {
|
||||
offset: i64,
|
||||
) -> CustomResult<Vec<Self>, errors::DatabaseError>;
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn filter_by_meta_constraints(
|
||||
conn: &PgPooledConn,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
refund_list_details: &common_utils::types::TimeRange,
|
||||
) -> CustomResult<api_models::refunds::RefundListMetaData, errors::DatabaseError>;
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn get_refunds_count(
|
||||
conn: &PgPooledConn,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
refund_list_details: &refunds::RefundListConstraints,
|
||||
) -> CustomResult<i64, errors::DatabaseError>;
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn get_refund_status_with_count(
|
||||
conn: &PgPooledConn,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
@ -48,6 +52,7 @@ pub trait RefundDbExt: Sized {
|
||||
|
||||
#[async_trait::async_trait]
|
||||
impl RefundDbExt for Refund {
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn filter_by_constraints(
|
||||
conn: &PgPooledConn,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
@ -159,6 +164,7 @@ impl RefundDbExt for Refund {
|
||||
.attach_printable_lazy(|| "Error filtering records by predicate")
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn filter_by_meta_constraints(
|
||||
conn: &PgPooledConn,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
@ -214,6 +220,7 @@ impl RefundDbExt for Refund {
|
||||
Ok(meta)
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn get_refunds_count(
|
||||
conn: &PgPooledConn,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
@ -302,6 +309,7 @@ impl RefundDbExt for Refund {
|
||||
.attach_printable_lazy(|| "Error filtering count of refunds")
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
async fn get_refund_status_with_count(
|
||||
conn: &PgPooledConn,
|
||||
merchant_id: &common_utils::id_type::MerchantId,
|
||||
|
||||
@ -17,6 +17,7 @@ v1 = ["api_models/v1", "diesel_models/v1", "hyperswitch_domain_models/v1", "comm
|
||||
v2 = ["api_models/v2", "diesel_models/v2", "hyperswitch_domain_models/v2", "common_utils/v2"]
|
||||
customer_v2 = ["api_models/customer_v2", "diesel_models/customer_v2", "hyperswitch_domain_models/customer_v2"]
|
||||
payment_methods_v2 = ["diesel_models/payment_methods_v2", "api_models/payment_methods_v2", "hyperswitch_domain_models/payment_methods_v2"]
|
||||
refunds_v2 = ["diesel_models/refunds_v2"]
|
||||
|
||||
[dependencies]
|
||||
# First Party dependencies
|
||||
|
||||
@ -345,6 +345,7 @@ impl UniqueConstraints for diesel_models::PaymentAttempt {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(any(feature = "v1", feature = "v2"), not(feature = "refunds_v2")))]
|
||||
impl UniqueConstraints for diesel_models::Refund {
|
||||
fn unique_constraints(&self) -> Vec<String> {
|
||||
vec![format!(
|
||||
@ -358,6 +359,16 @@ impl UniqueConstraints for diesel_models::Refund {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "v2", feature = "refunds_v2"))]
|
||||
impl UniqueConstraints for diesel_models::Refund {
|
||||
fn unique_constraints(&self) -> Vec<String> {
|
||||
vec![self.id.get_string_repr().to_owned()]
|
||||
}
|
||||
fn table_name(&self) -> &str {
|
||||
"Refund"
|
||||
}
|
||||
}
|
||||
|
||||
impl UniqueConstraints for diesel_models::ReverseLookup {
|
||||
fn unique_constraints(&self) -> Vec<String> {
|
||||
vec![format!("reverselookup_{}", self.lookup_id)]
|
||||
|
||||
@ -53,3 +53,8 @@ ALTER TABLE payment_methods
|
||||
DROP COLUMN IF EXISTS locker_fingerprint_id,
|
||||
DROP COLUMN IF EXISTS payment_method_type_v2,
|
||||
DROP COLUMN IF EXISTS payment_method_subtype;
|
||||
|
||||
ALTER TABLE refund
|
||||
DROP COLUMN IF EXISTS id,
|
||||
DROP COLUMN IF EXISTS merchant_reference_id,
|
||||
DROP COLUMN IF EXISTS connector_id;
|
||||
@ -63,3 +63,8 @@ ALTER TABLE payment_methods
|
||||
ADD COLUMN IF NOT EXISTS locker_fingerprint_id VARCHAR(64),
|
||||
ADD COLUMN IF NOT EXISTS payment_method_type_v2 VARCHAR(64),
|
||||
ADD COLUMN IF NOT EXISTS payment_method_subtype VARCHAR(64);
|
||||
|
||||
ALTER TABLE refund
|
||||
ADD COLUMN IF NOT EXISTS id VARCHAR(64),
|
||||
ADD COLUMN IF NOT EXISTS merchant_reference_id VARCHAR(64),
|
||||
ADD COLUMN IF NOT EXISTS connector_id VARCHAR(64);
|
||||
@ -37,3 +37,7 @@ ALTER TABLE payment_attempt
|
||||
---------------------- Payment Methods ----------------------
|
||||
ALTER TABLE payment_methods
|
||||
ADD PRIMARY KEY (payment_method_id);
|
||||
|
||||
---------------------- Refunds ----------------------
|
||||
ALTER TABLE refund
|
||||
ADD PRIMARY KEY (refund_id,merchant_id);
|
||||
@ -37,3 +37,7 @@ ALTER TABLE payment_attempt
|
||||
ALTER TABLE payment_methods
|
||||
DROP CONSTRAINT payment_methods_pkey,
|
||||
ALTER COLUMN payment_method_id DROP NOT NULL;
|
||||
|
||||
ALTER TABLE refund
|
||||
DROP CONSTRAINT refund_pkey,
|
||||
ALTER COLUMN refund_id DROP NOT NULL;
|
||||
@ -25,3 +25,6 @@ ALTER TABLE payment_attempt
|
||||
ALTER COLUMN authentication_type DROP NOT NULL,
|
||||
ALTER COLUMN payment_method_type_v2 DROP NOT NULL,
|
||||
ALTER COLUMN payment_method_subtype DROP NOT NULL;
|
||||
|
||||
ALTER TABLE refund
|
||||
ALTER COLUMN merchant_reference_id DROP NOT NULL;
|
||||
@ -24,3 +24,7 @@ ALTER TABLE payment_attempt
|
||||
ALTER COLUMN authentication_type SET NOT NULL,
|
||||
ALTER COLUMN payment_method_type_v2 SET NOT NULL,
|
||||
ALTER COLUMN payment_method_subtype SET NOT NULL;
|
||||
|
||||
-- This migration is to make fields mandatory in refund table
|
||||
ALTER TABLE refund
|
||||
ALTER COLUMN merchant_reference_id SET NOT NULL;
|
||||
@ -65,3 +65,7 @@ ALTER TABLE payment_attempt ALTER COLUMN id DROP NOT NULL;
|
||||
------------------------ Payment Methods -----------------------
|
||||
ALTER TABLE payment_methods DROP CONSTRAINT payment_methods_pkey;
|
||||
ALTER TABLE payment_methods ALTER COLUMN id DROP NOT NULL;
|
||||
|
||||
------------------------ Refunds -----------------------
|
||||
ALTER TABLE refund DROP CONSTRAINT refund_pkey;
|
||||
ALTER TABLE refund ALTER COLUMN id DROP NOT NULL;
|
||||
@ -76,3 +76,8 @@ ADD PRIMARY KEY (id);
|
||||
-- Add primary key constraint
|
||||
ALTER TABLE payment_methods
|
||||
ADD PRIMARY KEY (id);
|
||||
|
||||
------------------------ Refunds -----------------------
|
||||
-- Add primary key constraint
|
||||
ALTER TABLE refund
|
||||
ADD PRIMARY KEY (id);
|
||||
@ -131,3 +131,8 @@ ALTER TABLE refund ADD COLUMN connector_refund_data VARCHAR(512),
|
||||
ADD COLUMN connector_transaction_data VARCHAR(512);
|
||||
|
||||
ALTER TABLE captures ADD COLUMN connector_capture_data VARCHAR(512);
|
||||
|
||||
ALTER TABLE refund
|
||||
ADD COLUMN IF NOT EXISTS internal_reference_id VARCHAR(64),
|
||||
ADD COLUMN IF NOT EXISTS refund_id VARCHAR(64),
|
||||
ADD COLUMN IF NOT EXISTS merchant_connector_id VARCHAR(64);
|
||||
@ -121,3 +121,9 @@ ALTER TABLE refund DROP COLUMN connector_refund_data,
|
||||
|
||||
-- Run below queries only when V1 is deprecated
|
||||
ALTER TABLE captures DROP COLUMN connector_capture_data;
|
||||
|
||||
-- Run below queries only when V1 is deprecated
|
||||
ALTER TABLE refund
|
||||
DROP COLUMN IF EXISTS internal_reference_id,
|
||||
DROP COLUMN IF EXISTS refund_id,
|
||||
DROP COLUMN IF EXISTS merchant_connector_id;
|
||||
|
||||
Reference in New Issue
Block a user