@@ -795,9 +795,39 @@ impl DataStore {
795795 . map ( |id| id. into_untyped_uuid ( ) )
796796 . collect :: < Vec < _ > > ( ) ;
797797
798- // TODO(eliza): when other tables are added to store data that is part
799- // of the sitrep, we'll need to delete any records with matching IDs in
800- // those tables, too!
798+ let case_ereports_deleted = diesel:: delete (
799+ case_ereport_dsl:: fm_ereport_in_case
800+ . filter ( case_ereport_dsl:: sitrep_id. eq_any ( ids. clone ( ) ) ) ,
801+ )
802+ . execute_async ( & * conn)
803+ . await
804+ . map_err ( |e| {
805+ public_error_from_diesel ( e, ErrorHandler :: Server )
806+ . internal_context ( "failed to delete case ereport assignments" )
807+ } ) ?;
808+
809+ // Delete alert requests.
810+ let alert_requests_deleted = diesel:: delete (
811+ alert_req_dsl:: fm_alert_request
812+ . filter ( alert_req_dsl:: sitrep_id. eq_any ( ids. clone ( ) ) ) ,
813+ )
814+ . execute_async ( & * conn)
815+ . await
816+ . map_err ( |e| {
817+ public_error_from_diesel ( e, ErrorHandler :: Server )
818+ . internal_context ( "failed to delete alert requests" )
819+ } ) ?;
820+
821+ // Delete case metadata records.
822+ let cases_deleted = diesel:: delete (
823+ case_dsl:: fm_case. filter ( case_dsl:: sitrep_id. eq_any ( ids. clone ( ) ) ) ,
824+ )
825+ . execute_async ( & * conn)
826+ . await
827+ . map_err ( |e| {
828+ public_error_from_diesel ( e, ErrorHandler :: Server )
829+ . internal_context ( "failed to delete case metadata" )
830+ } ) ?;
801831
802832 // Delete the sitrep metadata entries *last*. This is necessary because
803833 // the rest of the delete operation is unsynchronized, and it is
@@ -806,10 +836,27 @@ impl DataStore {
806836 // the one that is used to determine whether a sitrep "exists" so that
807837 // the sitrep GC task can determine if it needs to be deleted, so don't
808838 // touch it until all the other records are gone.
809- diesel:: delete ( sitrep_dsl:: fm_sitrep. filter ( sitrep_dsl:: id. eq_any ( ids) ) )
810- . execute_async ( & * conn)
811- . await
812- . map_err ( |e| public_error_from_diesel ( e, ErrorHandler :: Server ) )
839+ let sitreps_deleted = diesel:: delete (
840+ sitrep_dsl:: fm_sitrep. filter ( sitrep_dsl:: id. eq_any ( ids. clone ( ) ) ) ,
841+ )
842+ . execute_async ( & * conn)
843+ . await
844+ . map_err ( |e| {
845+ public_error_from_diesel ( e, ErrorHandler :: Server )
846+ . internal_context ( "failed to delete sitrep metadata" )
847+ } ) ?;
848+
849+ slog:: debug!(
850+ & opctx. log,
851+ "deleted {sitreps_deleted} sitreps" ;
852+ "ids" => ?ids,
853+ "sitreps_deleted" => sitreps_deleted,
854+ "cases_deleted" => cases_deleted,
855+ "alert_requests_deleted" => alert_requests_deleted,
856+ "case_ereports_deleted" => case_ereports_deleted,
857+ ) ;
858+
859+ Ok ( sitreps_deleted)
813860 }
814861
815862 pub async fn fm_sitrep_version_list (
0 commit comments