// rocie - An enterprise grocery management system // // Copyright (C) 2026 Benedikt Peetz // SPDX-License-Identifier: GPL-3.0-or-later // // This file is part of Rocie. // // You should have received a copy of the License along with this program. // If not, see . use serde::{Deserialize, Serialize}; use utoipa::ToSchema; use crate::storage::sql::mk_id; /// The grouping system for products. /// /// Every Product can have a related parent, and every parent can have a parent themselves. /// As such, the products list constructs a DAG. #[derive(Clone, ToSchema, Serialize, Deserialize)] pub(crate) struct ProductParent { /// The id of the product parent. pub(crate) id: ProductParentId, /// The optional id of the parent of this product parent. /// /// This must not form a cycle. #[schema(nullable = false)] pub(crate) parent: Option, /// The name of the product parent. /// /// This should be globally unique, to make searching easier for the user. pub(crate) name: String, /// An optional description of this product parent. #[schema(nullable = false)] pub(super) description: Option, } mk_id!(ProductParentId and ProductParentIdStub);