diff options
| author | Caine <caine@jihakuz.xyz> | 2026-04-02 16:32:00 +0100 |
|---|---|---|
| committer | Caine <caine@jihakuz.xyz> | 2026-04-02 16:32:00 +0100 |
| commit | 487bf469795d70fb2bfdbee882d00f0c5e726a9a (patch) | |
| tree | 6fbd7810d57282710b9b32a301d221868580d8df /kitchen/serializers.py | |
| parent | 5fd445087281dff65dfc158795834aef2cddaf1b (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.py | 114 |
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__" |
