fix(webhooks): do not send duplicate webhooks (#1850)

This commit is contained in:
Narayan Bhat
2023-08-03 13:24:00 +05:30
committed by GitHub
parent 0f0919963f
commit 0d996b8960
4 changed files with 24 additions and 8 deletions

View File

@ -474,8 +474,9 @@ pub async fn create_event_and_trigger_outgoing_webhook<W: types::OutgoingWebhook
primary_object_type: enums::EventObjectType,
content: api::OutgoingWebhookContent,
) -> CustomResult<(), errors::ApiErrorResponse> {
let event_id = format!("{primary_object_id}_{}", event_type);
let new_event = storage::EventNew {
event_id: generate_id(consts::ID_LENGTH, "evt"),
event_id: event_id.clone(),
event_type,
event_class,
is_webhook_notified: false,
@ -484,12 +485,22 @@ pub async fn create_event_and_trigger_outgoing_webhook<W: types::OutgoingWebhook
primary_object_type,
};
let event = state
.store
.insert_event(new_event)
.await
.change_context(errors::ApiErrorResponse::WebhookProcessingFailure)
.attach_printable("event insertion failure")?;
let event_insert_result = state.store.insert_event(new_event).await;
let event = match event_insert_result {
Ok(event) => Ok(event),
Err(error) => {
if error.current_context().is_db_unique_violation() {
logger::info!("Merchant already notified about the event {event_id}");
return Ok(());
} else {
logger::error!(event_insertion_failure=?error);
Err(error
.change_context(errors::ApiErrorResponse::WebhookProcessingFailure)
.attach_printable("Failed to insert event in events table"))
}
}
}?;
if state.conf.webhooks.outgoing_enabled {
let arbiter = actix::Arbiter::try_current()