From e5d1c7e13326c05bbe3cebebac262d71c5f975cc Mon Sep 17 00:00:00 2001 From: halil Date: Thu, 12 Dec 2024 13:08:57 +0300 Subject: [PATCH] hotfix: resolve serializer error on stock search --- backend/marketfeed/serializers.py | 2 -- backend/marketfeed/views.py | 24 +++++++++--------------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/backend/marketfeed/serializers.py b/backend/marketfeed/serializers.py index 22434251..2de4bfe7 100644 --- a/backend/marketfeed/serializers.py +++ b/backend/marketfeed/serializers.py @@ -68,12 +68,10 @@ def validate_date(self, value): return value class StockPatternSearchSerializer(serializers.Serializer): - pattern = serializers.CharField( required=True, help_text="The pattern to search stock symbol and name for.", ) - limit = serializers.IntegerField(required=False, default=10) class TagSerializer(serializers.ModelSerializer): diff --git a/backend/marketfeed/views.py b/backend/marketfeed/views.py index 825a42ac..9996c226 100644 --- a/backend/marketfeed/views.py +++ b/backend/marketfeed/views.py @@ -85,30 +85,26 @@ def destroy(self, request, pk=None): stock.delete() return Response(status=status.HTTP_204_NO_CONTENT) - @action(detail=False, methods=['post'],serializer_class=StockPatternSearchSerializer) + # Response body stock serializer + # Request body stock pattern search serializer + @action(detail=False, methods=['post'], serializer_class=StockPatternSearchSerializer) def search(self, request): """ Search for stocks by pattern and limit. """ - serializer = StockPatternSearchSerializer(data=request.data) - if not serializer.is_valid(): - return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - - pattern = serializer.validated_data.get('pattern').strip().lower() - limit = serializer.validated_data.get('limit', 10) - + input_serializer = StockPatternSearchSerializer(data=request.data) + input_serializer.is_valid(raise_exception=True) + pattern = input_serializer.validated_data.get('pattern').strip().lower() + limit = input_serializer.validated_data.get('limit', 10) if not pattern: return Response({"error": "Pattern is required."}, status=status.HTTP_400_BAD_REQUEST) - starts_with = Stock.objects.filter( Q(name__istartswith=pattern) | Q(symbol__istartswith=pattern) ).order_by('name') - if starts_with.count() >= limit: stocks = starts_with[:limit] - serializer = self.get_serializer(stocks, many=True) + serializer = StockSerializer(stocks, many=True) return Response(serializer.data) - contains = Stock.objects.filter( Q(name__icontains=pattern) | Q(symbol__icontains=pattern) ).exclude(id__in=starts_with).order_by('name') @@ -116,7 +112,7 @@ def search(self, request): stocks = list(starts_with) + list(contains) stocks = stocks[:limit] - serializer = self.get_serializer(stocks, many=True) + serializer = StockSerializer(stocks, many=True) return Response(serializer.data) @swagger_auto_schema(request_body=StockHistoricDataSerializer) @@ -125,9 +121,7 @@ def get_historical_data(self, request, pk=None): stock = self.get_object() stock_symbol = stock.symbol serializer = StockHistoricDataSerializer(data=request.data) - serializer.is_valid(raise_exception=True) - start_date = serializer.validated_data['start_date'] end_date = serializer.validated_data['end_date']