Fixed #384: unfiltered results in favorites API

merge-requests/330/head
Eliot Berriot 2018-07-22 11:56:25 +02:00
rodzic f9dbda83bf
commit 25755ad39b
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: DD6965E2476E5C27
6 zmienionych plików z 26 dodań i 5 usunięć

Wyświetl plik

@ -0,0 +1,15 @@
from django_filters import rest_framework as filters
from funkwhale_api.common import fields
from . import models
class TrackFavoriteFilter(filters.FilterSet):
q = fields.SearchFilter(
search_fields=["track__title", "track__artist__name", "track__album__title"]
)
class Meta:
model = models.TrackFavorite
fields = ["user", "q"]

Wyświetl plik

@ -7,7 +7,7 @@ from funkwhale_api.activity import record
from funkwhale_api.common import fields, permissions
from funkwhale_api.music.models import Track
from . import models, serializers
from . import filters, models, serializers
class TrackFavoriteViewSet(
@ -17,6 +17,7 @@ class TrackFavoriteViewSet(
viewsets.GenericViewSet,
):
filter_class = filters.TrackFavoriteFilter
serializer_class = serializers.UserTrackFavoriteSerializer
queryset = (
models.TrackFavorite.objects.all()

Wyświetl plik

@ -20,8 +20,9 @@ def test_user_can_add_favorite(factories):
def test_user_can_get_his_favorites(api_request, factories, logged_in_client, client):
r = api_request.get("/")
favorite = factories["favorites.TrackFavorite"](user=logged_in_client.user)
factories["favorites.TrackFavorite"]()
url = reverse("api:v1:favorites:tracks-list")
response = logged_in_client.get(url)
response = logged_in_client.get(url, {"user": logged_in_client.user.pk})
expected = [
{
"user": users_serializers.UserBasicSerializer(

Wyświetl plik

@ -0,0 +1 @@
Fixed unfiltered results in favorites API (#384)

Wyświetl plik

@ -11,7 +11,7 @@
<translate
translate-plural="%{ count } favorites"
:translate-n="$store.state.favorites.count"
:translate-params="{count: $store.state.favorites.count}">
:translate-params="{count: results.count}">
1 favorite
</translate>
</h2>

Wyświetl plik

@ -53,10 +53,13 @@ export default {
toggle ({getters, dispatch}, id) {
dispatch('set', {id, value: !getters['isFavorite'](id)})
},
fetch ({dispatch, state, commit}, url) {
fetch ({dispatch, state, commit, rootState}, url) {
// will fetch favorites by batches from API to have them locally
let params = {
user: rootState.auth.profile.id
}
url = url || 'favorites/tracks/'
return axios.get(url).then((response) => {
return axios.get(url, {params: params}).then((response) => {
logger.default.info('Fetched a batch of ' + response.data.results.length + ' favorites')
response.data.results.forEach(result => {
commit('track', {id: result.track, value: true})