From fc4b017d30ca84a826de206b1c11c0aba8910ea7 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Tue, 9 Sep 2025 16:54:29 +0200 Subject: [PATCH] food batch update endpoint --- cookbook/serializer.py | 6 ++++++ cookbook/views/api.py | 17 ++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/cookbook/serializer.py b/cookbook/serializer.py index c3b2ef8c7..6d78406e9 100644 --- a/cookbook/serializer.py +++ b/cookbook/serializer.py @@ -1193,6 +1193,12 @@ class RecipeBatchUpdateSerializer(serializers.Serializer): clear_description = serializers.BooleanField(required=False, allow_null=True) +class FoodBatchUpdateSerializer(serializers.Serializer): + foods = serializers.ListField(child=serializers.IntegerField()) + + category = serializers.IntegerField(required=False, allow_null=True) + + class CustomFilterSerializer(SpacedModelSerializer, WritableNestedModelSerializer): shared = UserSerializer(many=True, required=False) diff --git a/cookbook/views/api.py b/cookbook/views/api.py index e1cf43565..26865cbce 100644 --- a/cookbook/views/api.py +++ b/cookbook/views/api.py @@ -112,7 +112,7 @@ from cookbook.serializer import (AccessTokenSerializer, AutomationSerializer, Au LocalizationSerializer, ServerSettingsSerializer, RecipeFromSourceResponseSerializer, ShoppingListEntryBulkCreateSerializer, FdcQuerySerializer, AiImportSerializer, ImportOpenDataSerializer, ImportOpenDataMetaDataSerializer, ImportOpenDataResponseSerializer, ExportRequestSerializer, RecipeImportSerializer, ConnectorConfigSerializer, SearchPreferenceSerializer, SearchFieldsSerializer, RecipeBatchUpdateSerializer, - AiProviderSerializer, AiLogSerializer + AiProviderSerializer, AiLogSerializer, FoodBatchUpdateSerializer ) from cookbook.version_info import TANDOOR_VERSION from cookbook.views.import_export import get_integration @@ -940,6 +940,21 @@ class FoodViewSet(LoggingMixin, TreeMixin): content = {'error': True, 'msg': e.args[0]} return Response(content, status=status.HTTP_403_FORBIDDEN) + @decorators.action(detail=False, methods=['PUT'], serializer_class=FoodBatchUpdateSerializer) + def batch_update(self, request): + serializer = self.serializer_class(data=request.data, partial=True) + + if serializer.is_valid(): + foods = Food.objects.filter(id__in=serializer.validated_data['foods'], space=self.request.space) + # safe_food_ids = Food.objects.filter(id__in=serializer.validated_data['foods'], space=self.request.space).values_list('id', flat=True) + + if 'category' in serializer.validated_data: + foods.update(category_id=serializer.validated_data['category']) + + return Response({}, 200) + + return Response(serializer.errors, 400) + @extend_schema_view(list=extend_schema(parameters=[ OpenApiParameter(name='order_field', description='Field to order recipe books on', type=str,