From e5f90f4474cb96a78080395980283e4b2ce40214 Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Sun, 15 Feb 2026 22:24:32 +0100 Subject: feat(treewide): Add recipes and user handling --- .../rocie-server/src/storage/sql/recipe_parent.rs | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 crates/rocie-server/src/storage/sql/recipe_parent.rs (limited to 'crates/rocie-server/src/storage/sql/recipe_parent.rs') diff --git a/crates/rocie-server/src/storage/sql/recipe_parent.rs b/crates/rocie-server/src/storage/sql/recipe_parent.rs new file mode 100644 index 0000000..6225a4b --- /dev/null +++ b/crates/rocie-server/src/storage/sql/recipe_parent.rs @@ -0,0 +1,31 @@ +use serde::{Deserialize, Serialize}; +use utoipa::ToSchema; + +use crate::storage::sql::mk_id; + +/// The grouping system for recipes. +/// +/// Every recipe can have a related parent, and every parent can have a parent themselves. +/// As such, the recipe list constructs a DAG. +#[derive(Clone, ToSchema, Serialize, Deserialize)] +pub(crate) struct RecipeParent { + /// The id of the recipe parent. + pub(crate) id: RecipeParentId, + + /// The optional id of the parent of this recipe parent. + /// + /// This must not form a cycle. + #[schema(nullable = false)] + pub(crate) parent: Option, + + /// The name of the recipe parent. + /// + /// This should be globally unique, to make searching easier for the user. + pub(crate) name: String, + + /// An optional description of this recipe parent. + #[schema(nullable = false)] + pub(super) description: Option, +} + +mk_id!(RecipeParentId and RecipeParentIdStub); -- cgit 1.4.1