mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-11-02 04:04:43 +08:00
feat(connector): [Adyen] add dispute flows for adyen connector (#5514)
This commit is contained in:
@ -20,34 +20,31 @@ pub async fn get_evidence_request_data(
|
||||
evidence_request: api_models::disputes::SubmitEvidenceRequest,
|
||||
dispute: &diesel_models::dispute::Dispute,
|
||||
) -> CustomResult<SubmitEvidenceRequestData, errors::ApiErrorResponse> {
|
||||
let (cancellation_policy, cancellation_policy_provider_file_id) =
|
||||
retrieve_file_and_provider_file_id_from_file_id(
|
||||
state,
|
||||
evidence_request.cancellation_policy,
|
||||
merchant_account,
|
||||
key_store,
|
||||
api::FileDataRequired::NotRequired,
|
||||
)
|
||||
.await?;
|
||||
let (customer_communication, customer_communication_provider_file_id) =
|
||||
retrieve_file_and_provider_file_id_from_file_id(
|
||||
state,
|
||||
evidence_request.customer_communication,
|
||||
merchant_account,
|
||||
key_store,
|
||||
api::FileDataRequired::NotRequired,
|
||||
)
|
||||
.await?;
|
||||
let (customer_signature, customer_signature_provider_file_id) =
|
||||
retrieve_file_and_provider_file_id_from_file_id(
|
||||
state,
|
||||
evidence_request.customer_signature,
|
||||
merchant_account,
|
||||
key_store,
|
||||
api::FileDataRequired::NotRequired,
|
||||
)
|
||||
.await?;
|
||||
let (receipt, receipt_provider_file_id) = retrieve_file_and_provider_file_id_from_file_id(
|
||||
let cancellation_policy_file_info = retrieve_file_and_provider_file_id_from_file_id(
|
||||
state,
|
||||
evidence_request.cancellation_policy,
|
||||
merchant_account,
|
||||
key_store,
|
||||
api::FileDataRequired::NotRequired,
|
||||
)
|
||||
.await?;
|
||||
let customer_communication_file_info = retrieve_file_and_provider_file_id_from_file_id(
|
||||
state,
|
||||
evidence_request.customer_communication,
|
||||
merchant_account,
|
||||
key_store,
|
||||
api::FileDataRequired::NotRequired,
|
||||
)
|
||||
.await?;
|
||||
let customer_sifnature_file_info = retrieve_file_and_provider_file_id_from_file_id(
|
||||
state,
|
||||
evidence_request.customer_signature,
|
||||
merchant_account,
|
||||
key_store,
|
||||
api::FileDataRequired::NotRequired,
|
||||
)
|
||||
.await?;
|
||||
let receipt_file_info = retrieve_file_and_provider_file_id_from_file_id(
|
||||
state,
|
||||
evidence_request.receipt,
|
||||
merchant_account,
|
||||
@ -55,45 +52,40 @@ pub async fn get_evidence_request_data(
|
||||
api::FileDataRequired::NotRequired,
|
||||
)
|
||||
.await?;
|
||||
let (refund_policy, refund_policy_provider_file_id) =
|
||||
retrieve_file_and_provider_file_id_from_file_id(
|
||||
state,
|
||||
evidence_request.refund_policy,
|
||||
merchant_account,
|
||||
key_store,
|
||||
api::FileDataRequired::NotRequired,
|
||||
)
|
||||
.await?;
|
||||
let (service_documentation, service_documentation_provider_file_id) =
|
||||
retrieve_file_and_provider_file_id_from_file_id(
|
||||
state,
|
||||
evidence_request.service_documentation,
|
||||
merchant_account,
|
||||
key_store,
|
||||
api::FileDataRequired::NotRequired,
|
||||
)
|
||||
.await?;
|
||||
let (shipping_documentation, shipping_documentation_provider_file_id) =
|
||||
retrieve_file_and_provider_file_id_from_file_id(
|
||||
state,
|
||||
evidence_request.shipping_documentation,
|
||||
merchant_account,
|
||||
key_store,
|
||||
api::FileDataRequired::NotRequired,
|
||||
)
|
||||
.await?;
|
||||
let (
|
||||
invoice_showing_distinct_transactions,
|
||||
invoice_showing_distinct_transactions_provider_file_id,
|
||||
) = retrieve_file_and_provider_file_id_from_file_id(
|
||||
let refund_policy_file_info = retrieve_file_and_provider_file_id_from_file_id(
|
||||
state,
|
||||
evidence_request.invoice_showing_distinct_transactions,
|
||||
evidence_request.refund_policy,
|
||||
merchant_account,
|
||||
key_store,
|
||||
api::FileDataRequired::NotRequired,
|
||||
)
|
||||
.await?;
|
||||
let (recurring_transaction_agreement, recurring_transaction_agreement_provider_file_id) =
|
||||
let service_documentation_file_info = retrieve_file_and_provider_file_id_from_file_id(
|
||||
state,
|
||||
evidence_request.service_documentation,
|
||||
merchant_account,
|
||||
key_store,
|
||||
api::FileDataRequired::NotRequired,
|
||||
)
|
||||
.await?;
|
||||
let shipping_documentation_file_info = retrieve_file_and_provider_file_id_from_file_id(
|
||||
state,
|
||||
evidence_request.shipping_documentation,
|
||||
merchant_account,
|
||||
key_store,
|
||||
api::FileDataRequired::NotRequired,
|
||||
)
|
||||
.await?;
|
||||
let invoice_showing_distinct_transactions_file_info =
|
||||
retrieve_file_and_provider_file_id_from_file_id(
|
||||
state,
|
||||
evidence_request.invoice_showing_distinct_transactions,
|
||||
merchant_account,
|
||||
key_store,
|
||||
api::FileDataRequired::NotRequired,
|
||||
)
|
||||
.await?;
|
||||
let recurring_transaction_agreement_file_info =
|
||||
retrieve_file_and_provider_file_id_from_file_id(
|
||||
state,
|
||||
evidence_request.recurring_transaction_agreement,
|
||||
@ -102,54 +94,68 @@ pub async fn get_evidence_request_data(
|
||||
api::FileDataRequired::NotRequired,
|
||||
)
|
||||
.await?;
|
||||
let (uncategorized_file, uncategorized_file_provider_file_id) =
|
||||
retrieve_file_and_provider_file_id_from_file_id(
|
||||
state,
|
||||
evidence_request.uncategorized_file,
|
||||
merchant_account,
|
||||
key_store,
|
||||
api::FileDataRequired::NotRequired,
|
||||
)
|
||||
.await?;
|
||||
let uncategorized_file_info = retrieve_file_and_provider_file_id_from_file_id(
|
||||
state,
|
||||
evidence_request.uncategorized_file,
|
||||
merchant_account,
|
||||
key_store,
|
||||
api::FileDataRequired::NotRequired,
|
||||
)
|
||||
.await?;
|
||||
Ok(SubmitEvidenceRequestData {
|
||||
dispute_id: dispute.dispute_id.clone(),
|
||||
connector_dispute_id: dispute.connector_dispute_id.clone(),
|
||||
access_activity_log: evidence_request.access_activity_log,
|
||||
billing_address: evidence_request.billing_address,
|
||||
cancellation_policy,
|
||||
cancellation_policy_provider_file_id,
|
||||
cancellation_policy: cancellation_policy_file_info.file_data,
|
||||
cancellation_policy_provider_file_id: cancellation_policy_file_info.provider_file_id,
|
||||
cancellation_policy_disclosure: evidence_request.cancellation_policy_disclosure,
|
||||
cancellation_rebuttal: evidence_request.cancellation_rebuttal,
|
||||
customer_communication,
|
||||
customer_communication_provider_file_id,
|
||||
customer_communication: customer_communication_file_info.file_data,
|
||||
customer_communication_provider_file_id: customer_communication_file_info.provider_file_id,
|
||||
customer_email_address: evidence_request.customer_email_address,
|
||||
customer_name: evidence_request.customer_name,
|
||||
customer_purchase_ip: evidence_request.customer_purchase_ip,
|
||||
customer_signature,
|
||||
customer_signature_provider_file_id,
|
||||
customer_signature: customer_sifnature_file_info.file_data,
|
||||
customer_signature_provider_file_id: customer_sifnature_file_info.provider_file_id,
|
||||
product_description: evidence_request.product_description,
|
||||
receipt,
|
||||
receipt_provider_file_id,
|
||||
refund_policy,
|
||||
refund_policy_provider_file_id,
|
||||
receipt: receipt_file_info.file_data,
|
||||
receipt_provider_file_id: receipt_file_info.provider_file_id,
|
||||
refund_policy: refund_policy_file_info.file_data,
|
||||
refund_policy_provider_file_id: refund_policy_file_info.provider_file_id,
|
||||
refund_policy_disclosure: evidence_request.refund_policy_disclosure,
|
||||
refund_refusal_explanation: evidence_request.refund_refusal_explanation,
|
||||
service_date: evidence_request.service_date,
|
||||
service_documentation,
|
||||
service_documentation_provider_file_id,
|
||||
service_documentation: service_documentation_file_info.file_data,
|
||||
service_documentation_provider_file_id: service_documentation_file_info.provider_file_id,
|
||||
shipping_address: evidence_request.shipping_address,
|
||||
shipping_carrier: evidence_request.shipping_carrier,
|
||||
shipping_date: evidence_request.shipping_date,
|
||||
shipping_documentation,
|
||||
shipping_documentation_provider_file_id,
|
||||
shipping_documentation: shipping_documentation_file_info.file_data,
|
||||
shipping_documentation_provider_file_id: shipping_documentation_file_info.provider_file_id,
|
||||
shipping_tracking_number: evidence_request.shipping_tracking_number,
|
||||
invoice_showing_distinct_transactions,
|
||||
invoice_showing_distinct_transactions_provider_file_id,
|
||||
recurring_transaction_agreement,
|
||||
recurring_transaction_agreement_provider_file_id,
|
||||
uncategorized_file,
|
||||
uncategorized_file_provider_file_id,
|
||||
invoice_showing_distinct_transactions: invoice_showing_distinct_transactions_file_info
|
||||
.file_data,
|
||||
invoice_showing_distinct_transactions_provider_file_id:
|
||||
invoice_showing_distinct_transactions_file_info.provider_file_id,
|
||||
recurring_transaction_agreement: recurring_transaction_agreement_file_info.file_data,
|
||||
recurring_transaction_agreement_provider_file_id: recurring_transaction_agreement_file_info
|
||||
.provider_file_id,
|
||||
uncategorized_file: uncategorized_file_info.file_data,
|
||||
uncategorized_file_provider_file_id: uncategorized_file_info.provider_file_id,
|
||||
uncategorized_text: evidence_request.uncategorized_text,
|
||||
cancellation_policy_file_type: cancellation_policy_file_info.file_type,
|
||||
customer_communication_file_type: customer_communication_file_info.file_type,
|
||||
customer_signature_file_type: customer_sifnature_file_info.file_type,
|
||||
receipt_file_type: receipt_file_info.file_type,
|
||||
refund_policy_file_type: refund_policy_file_info.file_type,
|
||||
service_documentation_file_type: service_documentation_file_info.file_type,
|
||||
shipping_documentation_file_type: shipping_documentation_file_info.file_type,
|
||||
invoice_showing_distinct_transactions_file_type:
|
||||
invoice_showing_distinct_transactions_file_info.file_type,
|
||||
recurring_transaction_agreement_file_type: recurring_transaction_agreement_file_info
|
||||
.file_type,
|
||||
uncategorized_file_type: uncategorized_file_info.file_type,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@ -110,22 +110,22 @@ pub async fn files_retrieve_core(
|
||||
.await
|
||||
.change_context(errors::ApiErrorResponse::FileNotFound)
|
||||
.attach_printable("Unable to retrieve file_metadata")?;
|
||||
let (received_data, _provider_file_id) =
|
||||
helpers::retrieve_file_and_provider_file_id_from_file_id(
|
||||
&state,
|
||||
Some(req.file_id),
|
||||
&merchant_account,
|
||||
&key_store,
|
||||
api::FileDataRequired::Required,
|
||||
)
|
||||
.await?;
|
||||
let file_info = helpers::retrieve_file_and_provider_file_id_from_file_id(
|
||||
&state,
|
||||
Some(req.file_id),
|
||||
&merchant_account,
|
||||
&key_store,
|
||||
api::FileDataRequired::Required,
|
||||
)
|
||||
.await?;
|
||||
let content_type = file_metadata_object
|
||||
.file_type
|
||||
.parse::<mime::Mime>()
|
||||
.change_context(errors::ApiErrorResponse::InternalServerError)
|
||||
.attach_printable("Failed to parse file content type")?;
|
||||
Ok(ApplicationResponse::FileData((
|
||||
received_data
|
||||
file_info
|
||||
.file_data
|
||||
.ok_or(errors::ApiErrorResponse::FileNotAvailable)
|
||||
.attach_printable("File data not found")?,
|
||||
content_type,
|
||||
|
||||
@ -2,6 +2,7 @@ use actix_multipart::Field;
|
||||
use common_utils::errors::CustomResult;
|
||||
use error_stack::ResultExt;
|
||||
use futures::TryStreamExt;
|
||||
use hyperswitch_domain_models::router_response_types::disputes::FileInfo;
|
||||
|
||||
use crate::{
|
||||
core::{
|
||||
@ -175,9 +176,13 @@ pub async fn retrieve_file_and_provider_file_id_from_file_id(
|
||||
merchant_account: &domain::MerchantAccount,
|
||||
key_store: &domain::MerchantKeyStore,
|
||||
is_connector_file_data_required: api::FileDataRequired,
|
||||
) -> CustomResult<(Option<Vec<u8>>, Option<String>), errors::ApiErrorResponse> {
|
||||
) -> CustomResult<FileInfo, errors::ApiErrorResponse> {
|
||||
match file_id {
|
||||
None => Ok((None, None)),
|
||||
None => Ok(FileInfo {
|
||||
file_data: None,
|
||||
provider_file_id: None,
|
||||
file_type: None,
|
||||
}),
|
||||
Some(file_key) => {
|
||||
let file_metadata_object = state
|
||||
.store
|
||||
@ -194,22 +199,23 @@ pub async fn retrieve_file_and_provider_file_id_from_file_id(
|
||||
.attach_printable("File not available")?,
|
||||
};
|
||||
match provider {
|
||||
diesel_models::enums::FileUploadProvider::Router => Ok((
|
||||
Some(
|
||||
diesel_models::enums::FileUploadProvider::Router => Ok(FileInfo {
|
||||
file_data: Some(
|
||||
state
|
||||
.file_storage_client
|
||||
.retrieve_file(&provider_file_id)
|
||||
.await
|
||||
.change_context(errors::ApiErrorResponse::InternalServerError)?,
|
||||
),
|
||||
Some(provider_file_id),
|
||||
)),
|
||||
provider_file_id: Some(provider_file_id),
|
||||
file_type: Some(file_metadata_object.file_type),
|
||||
}),
|
||||
_ => {
|
||||
let connector_file_data = match is_connector_file_data_required {
|
||||
api::FileDataRequired::Required => Some(
|
||||
retrieve_file_from_connector(
|
||||
state,
|
||||
file_metadata_object,
|
||||
file_metadata_object.clone(),
|
||||
merchant_account,
|
||||
key_store,
|
||||
)
|
||||
@ -217,7 +223,11 @@ pub async fn retrieve_file_and_provider_file_id_from_file_id(
|
||||
),
|
||||
api::FileDataRequired::NotRequired => None,
|
||||
};
|
||||
Ok((connector_file_data, Some(provider_file_id)))
|
||||
Ok(FileInfo {
|
||||
file_data: connector_file_data,
|
||||
provider_file_id: Some(provider_file_id),
|
||||
file_type: Some(file_metadata_object.file_type),
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -623,7 +623,6 @@ impl<const T: u8>
|
||||
default_imp_for_accept_dispute!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
connector::Authorizedotnet,
|
||||
connector::Bamboraapac,
|
||||
@ -739,7 +738,6 @@ impl<const T: u8>
|
||||
default_imp_for_file_upload!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
connector::Authorizedotnet,
|
||||
connector::Bamboraapac,
|
||||
@ -832,7 +830,6 @@ impl<const T: u8>
|
||||
default_imp_for_submit_evidence!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
connector::Authorizedotnet,
|
||||
connector::Bamboraapac,
|
||||
@ -925,7 +922,6 @@ impl<const T: u8>
|
||||
default_imp_for_defend_dispute!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
connector::Authorizedotnet,
|
||||
connector::Bamboraapac,
|
||||
|
||||
Reference in New Issue
Block a user