Skip to content

Commit

Permalink
hotfix: resolve serializer error on stock search
Browse files Browse the repository at this point in the history
  • Loading branch information
hikasap committed Dec 12, 2024
1 parent 1608297 commit e5d1c7e
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 17 deletions.
2 changes: 0 additions & 2 deletions backend/marketfeed/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
24 changes: 9 additions & 15 deletions backend/marketfeed/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,38 +85,34 @@ 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')

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)
Expand All @@ -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']

Expand Down

0 comments on commit e5d1c7e

Please # to comment.