@@ -402,6 +402,14 @@ async fn patch_event_type(
402
402
Ok ( Json ( ret. into ( ) ) )
403
403
}
404
404
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
+
405
413
/// Archive an event type.
406
414
///
407
415
/// 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(
412
420
async fn delete_event_type (
413
421
State ( AppState { ref db, .. } ) : State < AppState > ,
414
422
Path ( EventTypeNamePath { event_type_name } ) : Path < EventTypeNamePath > ,
423
+ ValidatedQuery ( DeleteEventTypeQueryParams { expunge } ) : ValidatedQuery <
424
+ DeleteEventTypeQueryParams ,
425
+ > ,
415
426
permissions:: Organization { org_id } : permissions:: Organization ,
416
427
) -> Result < NoContent > {
417
428
let evtype = eventtype:: Entity :: secure_find_by_name ( org_id, event_type_name)
@@ -420,8 +431,13 @@ async fn delete_event_type(
420
431
. ok_or_else ( || HttpError :: not_found ( None , None ) ) ?;
421
432
422
433
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
+ }
425
441
Ok ( NoContent )
426
442
}
427
443
0 commit comments