From bf92a2ea6d1d32e1658b777e5706ba6acf7b21bb Mon Sep 17 00:00:00 2001 From: Jake Hillion Date: Sun, 24 Jul 2022 21:58:25 +0100 Subject: [PATCH] containers read endpoint --- src/api/containers.rs | 22 +++++++++++++++++++++- src/api/mod.rs | 2 +- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/api/containers.rs b/src/api/containers.rs index 0f85031..4f7f4f0 100644 --- a/src/api/containers.rs +++ b/src/api/containers.rs @@ -1,4 +1,4 @@ -use super::{ApiEndpoint, ApiResult, ApiSuccess, State}; +use super::{ApiEndpoint, ApiError, ApiResult, ApiSuccess, State}; use crate::db; use std::sync::Arc; @@ -9,6 +9,7 @@ use uuid::Uuid; pub fn setup_routes(mut route: tide::Route>) { route.at("/").get(ApiEndpoint(index)); + route.at("/:id/").get(ApiEndpoint(read)); } #[derive(Queryable, Serialize)] @@ -28,3 +29,22 @@ async fn index(req: tide::Request>) -> ApiResult> { Ok(ApiSuccess::Ok(items)) } + +async fn read(req: tide::Request>) -> ApiResult { + use db::schema::containers::dsl::*; + use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl}; + + let req_id: Uuid = req + .param("id") + .unwrap() + .try_into() + .map_err(|_| ApiError::NotFound)?; + + let mut connection = req.state().db.get().unwrap(); + + let item: Container = containers + .filter(id.eq(req_id)) + .first::(&mut connection)?; + + Ok(ApiSuccess::Ok(item)) +} diff --git a/src/api/mod.rs b/src/api/mod.rs index 2c18ffa..b3aea81 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -1,7 +1,7 @@ mod containers; mod error; -use error::{ApiEndpoint, ApiResult, ApiSuccess}; +use error::{ApiEndpoint, ApiError, ApiResult, ApiSuccess}; use std::sync::Arc;