added offset:limit for search

This commit is contained in:
Alexander Karpov 2022-10-22 11:43:30 +03:00
parent 0ff8e5674b
commit e249aef809
4 changed files with 38 additions and 4 deletions

View File

@ -15,6 +15,8 @@ class QueryFilterSerializer(serializers.Serializer):
class SearchSerializer(serializers.Serializer):
body = serializers.ListSerializer(child=QueryFilterSerializer())
limit = serializers.IntegerField(default=5, min_value=1)
offset = serializers.IntegerField(default=0, min_value=0)
def create(self, validated_data):
raise NotImplementedError
@ -37,22 +39,49 @@ class HintRequestSerializer(serializers.Serializer):
content = serializers.CharField()
def create(self, validated_data):
raise NotImplemented
raise NotImplementedError
def update(self, instance, validated_data):
raise NotImplementedError
class HintResponseSerializer(serializers.Serializer):
type = serializers.CharField()
content = serializers.CharField()
def create(self, validated_data):
raise NotImplementedError
def update(self, instance, validated_data):
raise NotImplementedError
class AutoCompleteRequestSerializer(serializers.Serializer):
content = serializers.CharField(validators=[MinLengthValidator(3)])
def create(self, validated_data):
raise NotImplementedError
def update(self, instance, validated_data):
raise NotImplementedError
class AutoCompleteSerializerNode(serializers.Serializer):
coordinate = serializers.IntegerField(validators=[MinValueValidator(0)])
value = HintResponseSerializer()
def create(self, validated_data):
raise NotImplementedError
def update(self, instance, validated_data):
raise NotImplementedError
class AutoCompleteResponseSerializer(serializers.Serializer):
nodes = serializers.ListField(child=AutoCompleteSerializerNode())
def create(self, validated_data):
raise NotImplementedError
def update(self, instance, validated_data):
raise NotImplementedError

View File

@ -30,7 +30,12 @@ class SearchApi(APIView):
serializer = SearchSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
return Response(
process_search(serializer.data["body"]), status=status.HTTP_200_OK
process_search(
serializer.data["body"],
serializer.data["limit"],
serializer.data["offset"],
),
status=status.HTTP_200_OK,
)

View File

@ -8,5 +8,5 @@ def get_hints(content: str) -> str:
elif content in list(map(lambda category: category.name, Category.objects.all())):
category = "Category"
elif content in list(map(lambda char: char.value, Characteristic.objects.all())):
category = Characteristic.objects.get(value=content).name
category = Characteristic.objects.filter(value=content).first().name
return category

View File

@ -123,4 +123,4 @@ def process_search(data: List[dict], limit=5, offset=0) -> List[dict]:
qs = qs.filter(unit_characteristics__in=val)
else:
qs = qs.filter(characteristics__in=val)
return [x.serialize_self() for x in qs[offset : offset + limit]]
return [x.serialize_self() for x in qs[offset:offset+limit]]