From 96e22dc51cec1b06ccf2ed10f7348b41d2b21052 Mon Sep 17 00:00:00 2001 From: Daniel Svitan Date: Mon, 6 Oct 2025 17:13:58 +0200 Subject: [PATCH] :sparkles: Adds deleting associated hits in delete tracker --- src/api/tracker.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/api/tracker.rs b/src/api/tracker.rs index 5b92431..6dbfb17 100644 --- a/src/api/tracker.rs +++ b/src/api/tracker.rs @@ -1,6 +1,7 @@ use crate::dtos::tracker::TrackerDTO; use crate::models::AppState; use crate::models::tracker::Tracker; +use crate::schema::hits::dsl as hits; use crate::schema::trackers; use crate::schema::trackers::dsl; use chrono::Utc; @@ -74,20 +75,31 @@ pub fn create(state: &State) -> Result, Status> { } } -#[delete("/")] -pub fn delete(id: &str, state: &State) -> Result { +#[delete("/?")] +pub fn delete( + id: &str, + delete_hits: Option, + state: &State, +) -> Result { let mut db = state.db.lock().unwrap(); let id = match Uuid::parse_str(id).ok() { Some(id) => id, None => return Err(Status::BadRequest), }; + let delete_hits = delete_hits.unwrap_or(false); let count = diesel::delete(dsl::trackers.filter(dsl::id.eq(id))) .execute(&mut *db) .ok(); - // TODO: maybe delete all associated hits? + if delete_hits { + let hit_count = + diesel::delete(hits::hits.filter(hits::tracker_id.eq(id))).execute(&mut *db); + if let Err(err) = hit_count { + error!("Failed to delete associated hits: {}", err) + } + } match count { Some(count) if count > 0 => Ok(Status::Ok),