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::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<AppState>) -> Result<Json<TrackerDTO>, Status> {
}
}
#[delete("/<id>")]
pub fn delete(id: &str, state: &State<AppState>) -> Result<Status, Status> {
#[delete("/<id>?<delete_hits>")]
pub fn delete(
id: &str,
delete_hits: Option<bool>,
state: &State<AppState>,
) -> Result<Status, Status> {
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),