Fixed #384: unfiltered results in favorites API
This commit is contained in:
parent
f9dbda83bf
commit
25755ad39b
|
@ -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"]
|
|
@ -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()
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Fixed unfiltered results in favorites API (#384)
|
|
@ -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>
|
||||
|
|
|
@ -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})
|
||||
|
|
Loading…
Reference in New Issue