Skip to content

Commit 18bed1e

Browse files
Server: Add 'expunge' parameter to event-type deletion route
This already exists in the hosted svix.com product
1 parent 1cf8a7f commit 18bed1e

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

server/svix-server/src/v1/endpoints/event_type.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,14 @@ async fn patch_event_type(
402402
Ok(Json(ret.into()))
403403
}
404404

405+
#[derive(Debug, Deserialize, Serialize, Validate, JsonSchema)]
406+
struct DeleteEventTypeQueryParams {
407+
/// By default event types are archived when "deleted". Passing this to `true` deletes them
408+
/// entirely.
409+
#[serde(default)]
410+
expunge: bool,
411+
}
412+
405413
/// Archive an event type.
406414
///
407415
/// Endpoints already configured to filter on an event type will continue to do so after archival.
@@ -412,6 +420,9 @@ async fn patch_event_type(
412420
async fn delete_event_type(
413421
State(AppState { ref db, .. }): State<AppState>,
414422
Path(EventTypeNamePath { event_type_name }): Path<EventTypeNamePath>,
423+
ValidatedQuery(DeleteEventTypeQueryParams { expunge }): ValidatedQuery<
424+
DeleteEventTypeQueryParams,
425+
>,
415426
permissions::Organization { org_id }: permissions::Organization,
416427
) -> Result<NoContent> {
417428
let evtype = eventtype::Entity::secure_find_by_name(org_id, event_type_name)
@@ -420,8 +431,13 @@ async fn delete_event_type(
420431
.ok_or_else(|| HttpError::not_found(None, None))?;
421432

422433
let mut evtype: eventtype::ActiveModel = evtype.into();
423-
evtype.deleted = Set(true);
424-
evtype.update(db).await?;
434+
435+
if expunge {
436+
evtype.delete(db).await?;
437+
} else {
438+
evtype.deleted = Set(true);
439+
evtype.update(db).await?;
440+
}
425441
Ok(NoContent)
426442
}
427443

0 commit comments

Comments
 (0)