diff options
Diffstat (limited to 'src/routes/model.rs')
| -rw-r--r-- | src/routes/model.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/routes/model.rs b/src/routes/model.rs new file mode 100644 index 0000000..b1d4cc2 --- /dev/null +++ b/src/routes/model.rs @@ -0,0 +1,39 @@ +use crate::errors::AppError; +use crate::models::{ + auth::Claims, + model::{Model, ModelCreate}, +}; +use axum::{routing::get, Json, Router}; + +/// Create routes for `/v1/models/` namespace +pub fn create_route() -> Router { + Router::new().route("/", get(list_models).post(create_model)) +} + +/// List models. +async fn list_models() -> Result<Json<Vec<Model>>, AppError> { + let models = Model::list().await?; + + Ok(Json(models)) +} + +/// Create a model. Checks Authorization token +async fn create_model( + Json(payload): Json<ModelCreate>, + claims: Claims, +) -> Result<Json<Model>, AppError> { + let model = Model::new( + payload.name, + payload.description, + payload.duration, + payload.height, + payload.weight, + payload.printer, + payload.material, + claims.user_id, + ); + + let model_new = Model::create(model).await?; + + Ok(Json(model_new)) +} |
