diff --git a/api/funkwhale_api/music/serializers.py b/api/funkwhale_api/music/serializers.py index 235aba5b1..e40f27d28 100644 --- a/api/funkwhale_api/music/serializers.py +++ b/api/funkwhale_api/music/serializers.py @@ -556,7 +556,7 @@ class UploadActionSerializer(common_serializers.ActionSerializer): class TagSerializer(serializers.ModelSerializer): class Meta: model = tag_models.Tag - fields = ("id", "name", "creation_date") + fields = ("name", "creation_date") class SimpleAlbumSerializer(serializers.ModelSerializer): @@ -850,3 +850,10 @@ class FSImportSerializer(serializers.Serializer): return self.context["user"].actor.libraries.get(uuid=value) except models.Library.DoesNotExist: 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) diff --git a/api/funkwhale_api/music/views.py b/api/funkwhale_api/music/views.py index 59e6aa59a..e3a18ddbf 100644 --- a/api/funkwhale_api/music/views.py +++ b/api/funkwhale_api/music/views.py @@ -820,7 +820,9 @@ class Search(views.APIView): required_scope = "libraries" 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): query = request.GET.get("query", request.GET.get("q", "")) or "" query = query.strip() @@ -828,25 +830,20 @@ class Search(views.APIView): return Response({"detail": "empty query"}, status=400) try: results = { - # 'tags': serializers.TagSerializer(self.get_tags(query), many=True).data, - "artists": serializers.ArtistWithAlbumsSerializer( - self.get_artists(query), many=True - ).data, - "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, + "artists": self.get_artists(query), + "tracks": self.get_tracks(query), + "albums": self.get_albums(query), + "tags": self.get_tags(query), } except django.db.utils.ProgrammingError as 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: raise - return Response(results, status=200) + return Response(serializers.SearchResultSerializer(results).data, status=200) def get_tracks(self, query): query_obj = utils.get_fts_query( diff --git a/changes/changelog.d/1902.enhancement b/changes/changelog.d/1902.enhancement new file mode 100644 index 000000000..1d73bd24d --- /dev/null +++ b/changes/changelog.d/1902.enhancement @@ -0,0 +1 @@ +Use proper serializer for Search endpoint (#1902)