use actix_identity::Identity; use actix_web::{HttpResponse, Responder, error::Result, get, web}; use crate::{ app::App, storage::sql::recipe::{Recipe, RecipeId, RecipeIdStub}, }; /// Get an recipe by it's id. #[utoipa::path( responses( ( status = OK, description = "Recipe found in database and fetched", body = Recipe, ), ( status = UNAUTHORIZED, description = "You did not login before calling this endpoint", ), ( status = NOT_FOUND, description = "Recipe not found in database" ), ( status = INTERNAL_SERVER_ERROR, description = "Server encountered error", body = String ) ), params( ( "id" = RecipeId, description = "Recipe id" ), ) )] #[get("/recipe/by-id/{id}")] pub(crate) async fn recipe_by_id( app: web::Data, id: web::Path, _user: Identity, ) -> Result { let id = id.into_inner(); match Recipe::from_id(&app, id.into()).await? { Some(recipe) => Ok(HttpResponse::Ok().json(recipe)), None => Ok(HttpResponse::NotFound().finish()), } } /// Get all added recipes #[utoipa::path( responses( ( status = OK, description = "All recipes found in database and fetched", body = Recipe, ), ( status = UNAUTHORIZED, description = "You did not login before calling this endpoint", ), ( status = INTERNAL_SERVER_ERROR, description = "Server encountered error", body = String ) ), )] #[get("/recipe/all")] pub(crate) async fn recipes(app: web::Data, _user: Identity) -> Result { let all = Recipe::get_all(&app).await?; Ok(HttpResponse::Ok().json(all)) }