mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-11-01 11:06:50 +08:00
feat(framework): Diesel and domain model changes to support multiple outgoing webhooks (#9816)
This commit is contained in:
@ -1640,6 +1640,29 @@ pub enum WebhookDeliveryAttempt {
|
|||||||
ManualRetry,
|
ManualRetry,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(
|
||||||
|
Clone,
|
||||||
|
Copy,
|
||||||
|
Debug,
|
||||||
|
Eq,
|
||||||
|
PartialEq,
|
||||||
|
serde::Deserialize,
|
||||||
|
serde::Serialize,
|
||||||
|
strum::Display,
|
||||||
|
strum::EnumString,
|
||||||
|
ToSchema,
|
||||||
|
)]
|
||||||
|
#[serde(rename_all = "snake_case")]
|
||||||
|
#[strum(serialize_all = "snake_case")]
|
||||||
|
pub enum OutgoingWebhookEndpointStatus {
|
||||||
|
/// The webhook endpoint is active and operational.
|
||||||
|
Active,
|
||||||
|
/// The webhook endpoint is temporarily disabled.
|
||||||
|
Inactive,
|
||||||
|
/// The webhook endpoint is deprecated and can no longer be reactivated.
|
||||||
|
Deprecated,
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: This decision about using KV mode or not,
|
// TODO: This decision about using KV mode or not,
|
||||||
// should be taken at a top level rather than pushing it down to individual functions via an enum.
|
// should be taken at a top level rather than pushing it down to individual functions via an enum.
|
||||||
#[derive(
|
#[derive(
|
||||||
|
|||||||
@ -20,6 +20,7 @@ mod relay;
|
|||||||
mod routing;
|
mod routing;
|
||||||
mod subscription;
|
mod subscription;
|
||||||
mod tenant;
|
mod tenant;
|
||||||
|
mod webhook_endpoint;
|
||||||
|
|
||||||
use std::{borrow::Cow, fmt::Debug};
|
use std::{borrow::Cow, fmt::Debug};
|
||||||
|
|
||||||
@ -60,6 +61,7 @@ pub use self::{
|
|||||||
routing::RoutingId,
|
routing::RoutingId,
|
||||||
subscription::SubscriptionId,
|
subscription::SubscriptionId,
|
||||||
tenant::TenantId,
|
tenant::TenantId,
|
||||||
|
webhook_endpoint::WebhookEndpointId,
|
||||||
};
|
};
|
||||||
use crate::{fp_utils::when, generate_id_with_default_len};
|
use crate::{fp_utils::when, generate_id_with_default_len};
|
||||||
|
|
||||||
|
|||||||
24
crates/common_utils/src/id_type/webhook_endpoint.rs
Normal file
24
crates/common_utils/src/id_type/webhook_endpoint.rs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
use crate::errors::{CustomResult, ValidationError};
|
||||||
|
|
||||||
|
crate::id_type!(
|
||||||
|
WebhookEndpointId,
|
||||||
|
"A type for webhook_endpoint_id that can be used for unique identifier for a webhook_endpoint"
|
||||||
|
);
|
||||||
|
crate::impl_id_type_methods!(WebhookEndpointId, "webhook_endpoint_id");
|
||||||
|
crate::impl_generate_id_id_type!(WebhookEndpointId, "whe");
|
||||||
|
crate::impl_default_id_type!(WebhookEndpointId, "whe");
|
||||||
|
|
||||||
|
// This is to display the `WebhookEndpointId` as WebhookEndpointId(abcd)
|
||||||
|
crate::impl_debug_id_type!(WebhookEndpointId);
|
||||||
|
crate::impl_try_from_cow_str_id_type!(WebhookEndpointId, "webhook_endpoint_id");
|
||||||
|
|
||||||
|
crate::impl_serializable_secret_id_type!(WebhookEndpointId);
|
||||||
|
crate::impl_queryable_id_type!(WebhookEndpointId);
|
||||||
|
crate::impl_to_sql_from_sql_id_type!(WebhookEndpointId);
|
||||||
|
|
||||||
|
impl WebhookEndpointId {
|
||||||
|
/// Get webhook_endpoint id from String
|
||||||
|
pub fn try_from_string(webhook_endpoint_id: String) -> CustomResult<Self, ValidationError> {
|
||||||
|
Self::try_from(std::borrow::Cow::from(webhook_endpoint_id))
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -805,6 +805,14 @@ impl Default for CardTestingGuardConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||||
|
pub struct MultipleWebhookDetail {
|
||||||
|
pub webhook_endpoint_id: common_utils::id_type::WebhookEndpointId,
|
||||||
|
pub webhook_url: Secret<String>,
|
||||||
|
pub events: HashSet<common_enums::EventType>,
|
||||||
|
pub status: common_enums::OutgoingWebhookEndpointStatus,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, diesel::AsExpression)]
|
#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, diesel::AsExpression)]
|
||||||
#[diesel(sql_type = diesel::sql_types::Json)]
|
#[diesel(sql_type = diesel::sql_types::Json)]
|
||||||
pub struct WebhookDetails {
|
pub struct WebhookDetails {
|
||||||
@ -818,6 +826,7 @@ pub struct WebhookDetails {
|
|||||||
pub payment_statuses_enabled: Option<Vec<common_enums::IntentStatus>>,
|
pub payment_statuses_enabled: Option<Vec<common_enums::IntentStatus>>,
|
||||||
pub refund_statuses_enabled: Option<Vec<common_enums::RefundStatus>>,
|
pub refund_statuses_enabled: Option<Vec<common_enums::RefundStatus>>,
|
||||||
pub payout_statuses_enabled: Option<Vec<common_enums::PayoutStatus>>,
|
pub payout_statuses_enabled: Option<Vec<common_enums::PayoutStatus>>,
|
||||||
|
pub multiple_webhooks_list: Option<Vec<MultipleWebhookDetail>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
common_utils::impl_to_sql_from_sql_json!(WebhookDetails);
|
common_utils::impl_to_sql_from_sql_json!(WebhookDetails);
|
||||||
|
|||||||
@ -1179,6 +1179,7 @@ mod tests {
|
|||||||
payment_statuses_enabled: None,
|
payment_statuses_enabled: None,
|
||||||
refund_statuses_enabled: None,
|
refund_statuses_enabled: None,
|
||||||
payout_statuses_enabled: None,
|
payout_statuses_enabled: None,
|
||||||
|
multiple_webhooks_list: None,
|
||||||
}),
|
}),
|
||||||
sub_merchants_enabled: None,
|
sub_merchants_enabled: None,
|
||||||
parent_merchant_id: None,
|
parent_merchant_id: None,
|
||||||
@ -1246,6 +1247,7 @@ mod tests {
|
|||||||
payment_statuses_enabled: None,
|
payment_statuses_enabled: None,
|
||||||
refund_statuses_enabled: None,
|
refund_statuses_enabled: None,
|
||||||
payout_statuses_enabled: None,
|
payout_statuses_enabled: None,
|
||||||
|
multiple_webhooks_list: None,
|
||||||
}),
|
}),
|
||||||
metadata: None,
|
metadata: None,
|
||||||
routing_algorithm: None,
|
routing_algorithm: None,
|
||||||
|
|||||||
@ -2015,6 +2015,7 @@ impl ForeignFrom<api_models::admin::WebhookDetails>
|
|||||||
payment_statuses_enabled: item.payment_statuses_enabled,
|
payment_statuses_enabled: item.payment_statuses_enabled,
|
||||||
refund_statuses_enabled: item.refund_statuses_enabled,
|
refund_statuses_enabled: item.refund_statuses_enabled,
|
||||||
payout_statuses_enabled: item.payout_statuses_enabled,
|
payout_statuses_enabled: item.payout_statuses_enabled,
|
||||||
|
multiple_webhooks_list: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user