Skip to content
Snippets Groups Projects
Commit c335e4d2 authored by Eliot Berriot's avatar Eliot Berriot
Browse files

Merge branch '384-favorites' into 'develop'

Resolve "1200 Favorites"

Closes #384

See merge request funkwhale/funkwhale!337
parents f9dbda83 25755ad3
No related branches found
No related tags found
No related merge requests found
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(
......
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})
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment