mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-29 00:49:42 +08:00
fix(config): detect duplicate config insert and throw appropriate error (#1777)
This commit is contained in:
@ -79,6 +79,9 @@ pub enum StripeErrorCode {
|
||||
#[error(error_type = StripeErrorType::InvalidRequestError, code = "resource_missing", message = "No such config")]
|
||||
ConfigNotFound,
|
||||
|
||||
#[error(error_type = StripeErrorType::InvalidRequestError, code = "duplicate_resource", message = "Duplicate config")]
|
||||
DuplicateConfig,
|
||||
|
||||
#[error(error_type = StripeErrorType::InvalidRequestError, code = "resource_missing", message = "No such payment")]
|
||||
PaymentNotFound,
|
||||
|
||||
@ -460,6 +463,7 @@ impl From<errors::ApiErrorResponse> for StripeErrorCode {
|
||||
errors::ApiErrorResponse::MandateActive => Self::MandateActive, //not a stripe code
|
||||
errors::ApiErrorResponse::CustomerRedacted => Self::CustomerRedacted, //not a stripe code
|
||||
errors::ApiErrorResponse::ConfigNotFound => Self::ConfigNotFound, // not a stripe code
|
||||
errors::ApiErrorResponse::DuplicateConfig => Self::DuplicateConfig, // not a stripe code
|
||||
errors::ApiErrorResponse::DuplicateRefundRequest => Self::DuplicateRefundRequest,
|
||||
errors::ApiErrorResponse::DuplicatePayout { payout_id } => {
|
||||
Self::DuplicatePayout { payout_id }
|
||||
@ -575,6 +579,7 @@ impl actix_web::ResponseError for StripeErrorCode {
|
||||
| Self::RefundNotFound
|
||||
| Self::CustomerNotFound
|
||||
| Self::ConfigNotFound
|
||||
| Self::DuplicateConfig
|
||||
| Self::ClientSecretNotFound
|
||||
| Self::PaymentNotFound
|
||||
| Self::PaymentMethodNotFound
|
||||
|
||||
@ -17,7 +17,7 @@ pub async fn set_config(
|
||||
config: config.value,
|
||||
})
|
||||
.await
|
||||
.change_context(errors::ApiErrorResponse::InternalServerError)
|
||||
.to_duplicate_response(errors::ApiErrorResponse::DuplicateConfig)
|
||||
.attach_printable("Unknown error, while setting config key")?;
|
||||
|
||||
Ok(ApplicationResponse::Json(config.foreign_into()))
|
||||
|
||||
@ -137,6 +137,8 @@ pub enum ApiErrorResponse {
|
||||
DuplicatePayment { payment_id: String },
|
||||
#[error(error_type = ErrorType::DuplicateRequest, code = "HE_01", message = "The payout with the specified payout_id '{payout_id}' already exists in our records")]
|
||||
DuplicatePayout { payout_id: String },
|
||||
#[error(error_type = ErrorType::DuplicateRequest, code = "HE_01", message = "The config with the specified key already exists in our records")]
|
||||
DuplicateConfig,
|
||||
#[error(error_type = ErrorType::ObjectNotFound, code = "HE_02", message = "Refund does not exist in our records")]
|
||||
RefundNotFound,
|
||||
#[error(error_type = ErrorType::ObjectNotFound, code = "HE_02", message = "Customer does not exist in our records")]
|
||||
|
||||
@ -143,6 +143,9 @@ impl ErrorSwitch<api_models::errors::types::ApiErrorResponse> for ApiErrorRespon
|
||||
}
|
||||
Self::ConfigNotFound => {
|
||||
AER::NotFound(ApiError::new("HE", 2, "Config key does not exist in our records.", None))
|
||||
},
|
||||
Self::DuplicateConfig => {
|
||||
AER::BadRequest(ApiError::new("HE", 1, "The config with the specified key already exists in our records", None))
|
||||
}
|
||||
Self::PaymentNotFound => {
|
||||
AER::NotFound(ApiError::new("HE", 2, "Payment does not exist in our records", None))
|
||||
|
||||
Reference in New Issue
Block a user