✨ Adds fetching hits
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -67,6 +67,7 @@ fn rocket() -> _ {
|
||||
routes![
|
||||
tracker::index,
|
||||
tracker::get,
|
||||
tracker::get_hits,
|
||||
tracker::create,
|
||||
tracker::delete
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user