diff --git a/crates/api_models/src/refunds.rs b/crates/api_models/src/refunds.rs index 02a92f3037..1669e9faf2 100644 --- a/crates/api_models/src/refunds.rs +++ b/crates/api_models/src/refunds.rs @@ -48,6 +48,10 @@ pub struct RefundRequest { #[derive(Default, Debug, ToSchema, Clone, Deserialize)] #[serde(deny_unknown_fields)] pub struct RefundUpdateRequest { + /// An arbitrary string attached to the object. Often useful for displaying to users and your customer support executive + #[schema(max_length = 255, example = "Customer returned the product")] + pub reason: Option, + /// You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Metadata is useful for storing additional, structured information on an object. #[schema(value_type = Option, example = r#"{ "city": "NY", "unit": "245" }"#)] pub metadata: Option, diff --git a/crates/router/src/compatibility/stripe/refunds/types.rs b/crates/router/src/compatibility/stripe/refunds/types.rs index 94c4fb1769..fe0cf42325 100644 --- a/crates/router/src/compatibility/stripe/refunds/types.rs +++ b/crates/router/src/compatibility/stripe/refunds/types.rs @@ -49,6 +49,7 @@ impl From for refunds::RefundUpdateRequest { fn from(req: StripeUpdateRefundRequest) -> Self { Self { metadata: req.metadata, + reason: None, } } } diff --git a/crates/router/src/core/refunds.rs b/crates/router/src/core/refunds.rs index eb8dca47a0..987f96bb3b 100644 --- a/crates/router/src/core/refunds.rs +++ b/crates/router/src/core/refunds.rs @@ -328,8 +328,9 @@ pub async fn refund_update_core( let response = db .update_refund( refund, - storage::RefundUpdate::MetadataUpdate { + storage::RefundUpdate::MetadataAndReasonUpdate { metadata: req.metadata, + reason: req.reason, }, merchant_account.storage_scheme, ) diff --git a/crates/storage_models/src/refund.rs b/crates/storage_models/src/refund.rs index e74935fdf5..dc2636bc4b 100644 --- a/crates/storage_models/src/refund.rs +++ b/crates/storage_models/src/refund.rs @@ -81,8 +81,9 @@ pub enum RefundUpdate { refund_error_message: Option, refund_arn: String, }, - MetadataUpdate { + MetadataAndReasonUpdate { metadata: Option, + reason: Option, }, StatusUpdate { connector_refund_id: Option, @@ -104,6 +105,7 @@ pub struct RefundUpdateInternal { refund_error_message: Option, refund_arn: Option, metadata: Option, + refund_reason: Option, } impl From for RefundUpdateInternal { @@ -123,8 +125,9 @@ impl From for RefundUpdateInternal { refund_arn: Some(refund_arn), ..Default::default() }, - RefundUpdate::MetadataUpdate { metadata } => Self { + RefundUpdate::MetadataAndReasonUpdate { metadata, reason } => Self { metadata, + refund_reason: reason, ..Default::default() }, RefundUpdate::StatusUpdate {