fix(openapi): Use a proper serializer for Search endpoint
This commit is contained in:
parent
f1d50d0c17
commit
2d913862e1
|
@ -556,7 +556,7 @@ class UploadActionSerializer(common_serializers.ActionSerializer):
|
||||||
class TagSerializer(serializers.ModelSerializer):
|
class TagSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = tag_models.Tag
|
model = tag_models.Tag
|
||||||
fields = ("id", "name", "creation_date")
|
fields = ("name", "creation_date")
|
||||||
|
|
||||||
|
|
||||||
class SimpleAlbumSerializer(serializers.ModelSerializer):
|
class SimpleAlbumSerializer(serializers.ModelSerializer):
|
||||||
|
@ -850,3 +850,10 @@ class FSImportSerializer(serializers.Serializer):
|
||||||
return self.context["user"].actor.libraries.get(uuid=value)
|
return self.context["user"].actor.libraries.get(uuid=value)
|
||||||
except models.Library.DoesNotExist:
|
except models.Library.DoesNotExist:
|
||||||
raise serializers.ValidationError("Invalid library")
|
raise serializers.ValidationError("Invalid library")
|
||||||
|
|
||||||
|
|
||||||
|
class SearchResultSerializer(serializers.Serializer):
|
||||||
|
artists = ArtistWithAlbumsSerializer(many=True)
|
||||||
|
tracks = TrackSerializer(many=True)
|
||||||
|
albums = AlbumSerializer(many=True)
|
||||||
|
tags = TagSerializer(many=True)
|
||||||
|
|
|
@ -820,7 +820,9 @@ class Search(views.APIView):
|
||||||
required_scope = "libraries"
|
required_scope = "libraries"
|
||||||
anonymous_policy = "setting"
|
anonymous_policy = "setting"
|
||||||
|
|
||||||
@extend_schema(operation_id="get_search_results")
|
@extend_schema(
|
||||||
|
operation_id="get_search_results", responses=serializers.SearchResultSerializer
|
||||||
|
)
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
query = request.GET.get("query", request.GET.get("q", "")) or ""
|
query = request.GET.get("query", request.GET.get("q", "")) or ""
|
||||||
query = query.strip()
|
query = query.strip()
|
||||||
|
@ -828,25 +830,20 @@ class Search(views.APIView):
|
||||||
return Response({"detail": "empty query"}, status=400)
|
return Response({"detail": "empty query"}, status=400)
|
||||||
try:
|
try:
|
||||||
results = {
|
results = {
|
||||||
# 'tags': serializers.TagSerializer(self.get_tags(query), many=True).data,
|
"artists": self.get_artists(query),
|
||||||
"artists": serializers.ArtistWithAlbumsSerializer(
|
"tracks": self.get_tracks(query),
|
||||||
self.get_artists(query), many=True
|
"albums": self.get_albums(query),
|
||||||
).data,
|
"tags": self.get_tags(query),
|
||||||
"tracks": serializers.TrackSerializer(
|
|
||||||
self.get_tracks(query), many=True
|
|
||||||
).data,
|
|
||||||
"albums": serializers.AlbumSerializer(
|
|
||||||
self.get_albums(query), many=True
|
|
||||||
).data,
|
|
||||||
"tags": TagSerializer(self.get_tags(query), many=True).data,
|
|
||||||
}
|
}
|
||||||
except django.db.utils.ProgrammingError as e:
|
except django.db.utils.ProgrammingError as e:
|
||||||
if "in tsquery:" in str(e):
|
if "in tsquery:" in str(e):
|
||||||
return Response({"detail": "Invalid query"}, status=400)
|
return Response(
|
||||||
|
{"detail": "Invalid query"}, status=400
|
||||||
|
) # TODO This might be better a 500?
|
||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
|
|
||||||
return Response(results, status=200)
|
return Response(serializers.SearchResultSerializer(results).data, status=200)
|
||||||
|
|
||||||
def get_tracks(self, query):
|
def get_tracks(self, query):
|
||||||
query_obj = utils.get_fts_query(
|
query_obj = utils.get_fts_query(
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Use proper serializer for Search endpoint (#1902)
|
Loading…
Reference in New Issue