✨ Adds deleting associated hits in delete tracker
This commit is contained in:
@@ -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),
|
||||||
|
|||||||
Reference in New Issue
Block a user