feat(connector): [Adyen] add dispute flows for adyen connector (#5514)

This commit is contained in:
Kiran Kumar
2024-08-23 12:13:38 +05:30
committed by GitHub
parent a9c9d9b260
commit ad9f91b37c
16 changed files with 807 additions and 132 deletions

View File

@ -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,
})
}

View File

@ -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,

View File

@ -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),
})
}
}
}

View File

@ -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,