Add DRF serializers, viewsets, what-can-i-cook endpoint, log-cook with pantry deduction
This commit is contained in:
@@ -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__"
|
||||
Reference in New Issue
Block a user