Adds fetching hits

This commit is contained in:
2025-10-08 18:49:29 +02:00
parent 544fb9bba9
commit caf98654ce
3 changed files with 127 additions and 10 deletions

View File

@@ -1,8 +1,9 @@
use crate::auth::Authenticated;
use crate::dtos::hit::HitDTO;
use crate::dtos::tracker::{NewTrackerDTO, TrackerDTO};
use crate::models::AppState;
use crate::models::tracker::Tracker;
use crate::schema::hits::dsl as hits;
use crate::schema::hits;
use crate::schema::trackers;
use crate::schema::trackers::dsl;
use chrono::Utc;
@@ -61,6 +62,30 @@ pub fn get(
}
}
#[get("/<id>/hits")]
pub fn get_hits(
id: &str,
_auth: Authenticated,
state: &State<AppState>,
) -> Result<Json<Vec<HitDTO>>, 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 result = hits::dsl::hits
.filter(hits::tracker_id.eq(id))
.load(&mut *db)
.ok();
match result {
Some(results) => Ok(Json(results.iter().map(HitDTO::from).collect())),
None => Err(Status::NotFound),
}
}
#[post("/", format = "json", data = "<data>")]
pub fn create(
data: Json<NewTrackerDTO>,
@@ -108,7 +133,7 @@ pub fn delete(
if delete_hits {
let hit_count =
diesel::delete(hits::hits.filter(hits::tracker_id.eq(id))).execute(&mut *db);
diesel::delete(hits::dsl::hits.filter(hits::tracker_id.eq(id))).execute(&mut *db);
if let Err(err) = hit_count {
error!("Failed to delete associated hits: {}", err)
}

View File

@@ -67,6 +67,7 @@ fn rocket() -> _ {
routes![
tracker::index,
tracker::get,
tracker::get_hits,
tracker::create,
tracker::delete
],