summaryrefslogtreecommitdiff
path: root/kitchen/serializers.py
diff options
context:
space:
mode:
authorCaine <caine@jihakuz.xyz>2026-04-02 16:32:00 +0100
committerCaine <caine@jihakuz.xyz>2026-04-02 16:32:00 +0100
commit487bf469795d70fb2bfdbee882d00f0c5e726a9a (patch)
tree6fbd7810d57282710b9b32a301d221868580d8df /kitchen/serializers.py
parent5fd445087281dff65dfc158795834aef2cddaf1b (diff)
Add DRF serializers, viewsets, what-can-i-cook endpoint, log-cook with pantry deduction
Diffstat (limited to 'kitchen/serializers.py')
-rw-r--r--kitchen/serializers.py114
1 files changed, 114 insertions, 0 deletions
diff --git a/kitchen/serializers.py b/kitchen/serializers.py
new file mode 100644
index 0000000..43eb9a7
--- /dev/null
+++ b/kitchen/serializers.py
@@ -0,0 +1,114 @@
+from rest_framework import serializers
+from .models import (
+ Tag,
+ Ingredient,
+ PantryItem,
+ MetaRecipe,
+ Slot,
+ SlotOption,
+ MetaRecipeBase,
+ Recipe,
+ RecipeIngredient,
+ CookLog,
+ ShoppingListItem,
+)
+
+
+class TagSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = Tag
+ fields = "__all__"
+
+
+class IngredientSerializer(serializers.ModelSerializer):
+ tags = TagSerializer(many=True, read_only=True)
+ tag_ids = serializers.PrimaryKeyRelatedField(
+ queryset=Tag.objects.all(), many=True, write_only=True, source="tags", required=False
+ )
+
+ class Meta:
+ model = Ingredient
+ fields = "__all__"
+
+
+class PantryItemSerializer(serializers.ModelSerializer):
+ ingredient_name = serializers.CharField(source="ingredient.name", read_only=True)
+
+ class Meta:
+ model = PantryItem
+ fields = "__all__"
+
+
+# --- Meta-Recipe nested serializers ---
+
+
+class SlotOptionSerializer(serializers.ModelSerializer):
+ ingredient_name = serializers.CharField(source="ingredient.name", read_only=True)
+
+ class Meta:
+ model = SlotOption
+ fields = "__all__"
+
+
+class SlotSerializer(serializers.ModelSerializer):
+ options = SlotOptionSerializer(many=True, read_only=True)
+
+ class Meta:
+ model = Slot
+ fields = "__all__"
+
+
+class MetaRecipeBaseSerializer(serializers.ModelSerializer):
+ ingredient_name = serializers.CharField(source="ingredient.name", read_only=True)
+
+ class Meta:
+ model = MetaRecipeBase
+ fields = "__all__"
+
+
+class MetaRecipeSerializer(serializers.ModelSerializer):
+ slots = SlotSerializer(many=True, read_only=True)
+ base_ingredients = MetaRecipeBaseSerializer(many=True, read_only=True)
+
+ class Meta:
+ model = MetaRecipe
+ fields = "__all__"
+
+
+# --- Fixed Recipe nested serializers ---
+
+
+class RecipeIngredientSerializer(serializers.ModelSerializer):
+ ingredient_name = serializers.CharField(source="ingredient.name", read_only=True)
+
+ class Meta:
+ model = RecipeIngredient
+ fields = "__all__"
+
+
+class RecipeSerializer(serializers.ModelSerializer):
+ ingredients = RecipeIngredientSerializer(many=True, read_only=True)
+
+ class Meta:
+ model = Recipe
+ fields = "__all__"
+
+
+# --- Cook Log & Shopping ---
+
+
+class CookLogSerializer(serializers.ModelSerializer):
+ meta_recipe_name = serializers.CharField(source="meta_recipe.name", read_only=True, default=None)
+ recipe_name = serializers.CharField(source="recipe.name", read_only=True, default=None)
+
+ class Meta:
+ model = CookLog
+ fields = "__all__"
+
+
+class ShoppingListItemSerializer(serializers.ModelSerializer):
+ ingredient_name = serializers.CharField(source="ingredient.name", read_only=True, default=None)
+
+ class Meta:
+ model = ShoppingListItem
+ fields = "__all__"