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