Adds deleting associated hits in delete tracker

This commit is contained in:
2025-10-06 17:13:58 +02:00
parent 1d9c9a25d6
commit 96e22dc51c

View File

@@ -1,6 +1,7 @@
use crate::dtos::tracker::TrackerDTO; use crate::dtos::tracker::TrackerDTO;
use crate::models::AppState; use crate::models::AppState;
use crate::models::tracker::Tracker; use crate::models::tracker::Tracker;
use crate::schema::hits::dsl as hits;
use crate::schema::trackers; use crate::schema::trackers;
use crate::schema::trackers::dsl; use crate::schema::trackers::dsl;
use chrono::Utc; use chrono::Utc;
@@ -74,20 +75,31 @@ pub fn create(state: &State<AppState>) -> Result<Json<TrackerDTO>, Status> {
} }
} }
#[delete("/<id>")] #[delete("/<id>?<delete_hits>")]
pub fn delete(id: &str, state: &State<AppState>) -> Result<Status, Status> { pub fn delete(
id: &str,
delete_hits: Option<bool>,
state: &State<AppState>,
) -> Result<Status, Status> {
let mut db = state.db.lock().unwrap(); let mut db = state.db.lock().unwrap();
let id = match Uuid::parse_str(id).ok() { let id = match Uuid::parse_str(id).ok() {
Some(id) => id, Some(id) => id,
None => return Err(Status::BadRequest), None => return Err(Status::BadRequest),
}; };
let delete_hits = delete_hits.unwrap_or(false);
let count = diesel::delete(dsl::trackers.filter(dsl::id.eq(id))) let count = diesel::delete(dsl::trackers.filter(dsl::id.eq(id)))
.execute(&mut *db) .execute(&mut *db)
.ok(); .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 { match count {
Some(count) if count > 0 => Ok(Status::Ok), Some(count) if count > 0 => Ok(Status::Ok),