From 4aff7d95726ac6678344b2c66b0b85a4f2139468 Mon Sep 17 00:00:00 2001 From: jowlee Date: Thu, 30 Jun 2022 16:21:20 +0000 Subject: [PATCH 1/3] Update explore endpoints in libs to use v1 --- .../src/pages/smart-collection/store/sagas.ts | 21 ++++++-- .../src/services/audius-backend/Explore.ts | 48 ++++++++++++++----- 2 files changed, 52 insertions(+), 17 deletions(-) diff --git a/packages/web/src/pages/smart-collection/store/sagas.ts b/packages/web/src/pages/smart-collection/store/sagas.ts index c9583d2372..784fc36a64 100644 --- a/packages/web/src/pages/smart-collection/store/sagas.ts +++ b/packages/web/src/pages/smart-collection/store/sagas.ts @@ -3,7 +3,7 @@ import { takeEvery, put, call, select } from 'typed-redux-saga/macro' import { SmartCollection } from 'common/models/Collection' import { SmartCollectionVariant } from 'common/models/SmartCollectionVariant' import Status from 'common/models/Status' -import { Track, UserTrack } from 'common/models/Track' +import { Track, UserTrack, UserTrackMetadata } from 'common/models/Track' import { getAccountStatus, getUserId } from 'common/store/account/selectors' import { processAndCacheTracks } from 'common/store/cache/tracks/utils' import { fetchUsers as retrieveUsers } from 'common/store/cache/users/sagas' @@ -55,7 +55,15 @@ function* fetchHeavyRotation() { } function* fetchBestNewReleases() { - const tracks = yield* call(Explore.getTopFolloweeTracksFromWindow, 'month') + const currentUserId = yield* select(getUserId) + if (currentUserId == null) { + return + } + const tracks = yield* call( + Explore.getTopFolloweeTracksFromWindow, + currentUserId, + 'month' + ) const trackIds = tracks .filter((track) => !track.user.is_deactivated) @@ -96,11 +104,14 @@ function* fetchUnderTheRadar() { } function* fetchMostLoved() { - const tracks = yield* call(Explore.getTopFolloweeSaves) - + const currentUserId = yield* select(getUserId) + if (currentUserId == null) { + return + } + const tracks = yield* call(Explore.getMostLovedTracks, currentUserId) const trackIds = tracks .filter((track) => !track.user.is_deactivated) - .map((track: Track) => ({ + .map((track: UserTrackMetadata) => ({ time: track.created_at, track: track.track_id })) diff --git a/packages/web/src/services/audius-backend/Explore.ts b/packages/web/src/services/audius-backend/Explore.ts index 5491a91a02..5a14bbdc5c 100644 --- a/packages/web/src/services/audius-backend/Explore.ts +++ b/packages/web/src/services/audius-backend/Explore.ts @@ -1,15 +1,19 @@ import { ID } from '@audius/common' -import { Collection } from 'common/models/Collection' +import { Collection, UserCollectionMetadata } from 'common/models/Collection' import FeedFilter from 'common/models/FeedFilter' import { Track, UserTrack } from 'common/models/Track' +import { removeNullable } from 'common/utils/typeUtils' import AudiusBackend, { IDENTITY_SERVICE, AuthHeaders } from 'services/AudiusBackend' import apiClient from 'services/audius-api-client/AudiusAPIClient' +import * as adapter from 'services/audius-api-client/ResponseAdapter' +import { APIPlaylist, APITrack } from 'services/audius-api-client/types' +import { encodeHashId } from 'utils/route/hashIds' -type CollectionWithScore = Collection & { score: number } +type CollectionWithScore = APIPlaylist & { score: number } // @ts-ignore const libs = () => window.audiusLibs @@ -64,17 +68,19 @@ class Explore { } static async getTopFolloweeTracksFromWindow( + userId: ID, window: string, limit = 25 ): Promise { try { - const tracks = await libs().discoveryProvider.getTopFolloweeWindowed( - 'track', + const encodedUserId = encodeHashId(userId) + const tracks = await libs().discoveryProvider.getBestNewReleases( + encodedUserId, window, limit, true ) - return tracks + return tracks.map(adapter.makeTrack).filter(removeNullable) } catch (e) { console.error(e) return [] @@ -130,6 +136,21 @@ class Explore { } } + static async getMostLovedTracks(userId: ID, limit = 25) { + try { + const encodedUserId = encodeHashId(userId) + const tracks: APITrack[] = await libs().discoveryProvider.getMostLovedTracks( + encodedUserId, + limit, + true + ) + return tracks.map(adapter.makeTrack).filter(removeNullable) + } catch (e) { + console.error(e) + return [] + } + } + static async getLatestTrackID(): Promise { try { const latestTrackID = await libs().discoveryProvider.getLatest('track') @@ -147,14 +168,15 @@ class Explore { limit = 20 ): Promise { try { - const playlists = await libs().discoveryProvider.getTopPlaylists( + const playlists = await libs().discoveryProvider.getTrendingPlaylists( type, limit, undefined, followeesOnly ? 'followees' : undefined, true ) - return playlists + const adapted = playlists.map(adapter.makePlaylist) + return adapted } catch (e) { console.error(e) return [] @@ -164,10 +186,10 @@ class Explore { static async getTopPlaylistsForMood( moods: string[], limit = 16 - ): Promise { + ): Promise { try { const requests = moods.map((mood) => { - return libs().discoveryProvider.getTopPlaylists( + return libs().discoveryProvider.getTrendingPlaylists( 'playlist', limit, mood, @@ -175,13 +197,15 @@ class Explore { true ) }) - const playlistsByMood = await Promise.all(requests) - + const playlistsByMood: CollectionWithScore[] = await Promise.all(requests) let allPlaylists: CollectionWithScore[] = [] playlistsByMood.forEach((playlists) => { allPlaylists = allPlaylists.concat(playlists) }) - return allPlaylists.sort(scoreComparator).slice(0, 20) + const playlists: APIPlaylist[] = allPlaylists + .sort(scoreComparator) + .slice(0, 20) + return playlists.map(adapter.makePlaylist).filter(removeNullable) } catch (e) { console.error(e) return [] From 0e892bd168888cf34d55941abfb40ba63d7354fa Mon Sep 17 00:00:00 2001 From: jowlee Date: Mon, 11 Jul 2022 20:15:57 +0000 Subject: [PATCH 2/3] Update lib call name --- .../src/services/audius-backend/Explore.ts | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/web/src/services/audius-backend/Explore.ts b/packages/web/src/services/audius-backend/Explore.ts index 5a14bbdc5c..f252fffcd5 100644 --- a/packages/web/src/services/audius-backend/Explore.ts +++ b/packages/web/src/services/audius-backend/Explore.ts @@ -168,13 +168,13 @@ class Explore { limit = 20 ): Promise { try { - const playlists = await libs().discoveryProvider.getTrendingPlaylists( + const playlists = await libs().discoveryProvider.getTopFullPlaylists({ type, limit, - undefined, - followeesOnly ? 'followees' : undefined, - true - ) + mood: undefined, + filter: followeesOnly ? 'followees' : undefined, + withUsers: true + }) const adapted = playlists.map(adapter.makePlaylist) return adapted } catch (e) { @@ -189,13 +189,13 @@ class Explore { ): Promise { try { const requests = moods.map((mood) => { - return libs().discoveryProvider.getTrendingPlaylists( - 'playlist', + return libs().discoveryProvider.getTopFullPlaylists({ + type: 'playlist', limit, mood, - undefined, - true - ) + filter: undefined, + withUsers: true + }) }) const playlistsByMood: CollectionWithScore[] = await Promise.all(requests) let allPlaylists: CollectionWithScore[] = [] From 76f363d64c902e8806eaafc1a23690d587c0c960 Mon Sep 17 00:00:00 2001 From: jowlee Date: Thu, 14 Jul 2022 21:36:03 +0000 Subject: [PATCH 3/3] Fix lint --- packages/web/src/services/audius-backend/Explore.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/web/src/services/audius-backend/Explore.ts b/packages/web/src/services/audius-backend/Explore.ts index f252fffcd5..b392ff4c24 100644 --- a/packages/web/src/services/audius-backend/Explore.ts +++ b/packages/web/src/services/audius-backend/Explore.ts @@ -139,11 +139,12 @@ class Explore { static async getMostLovedTracks(userId: ID, limit = 25) { try { const encodedUserId = encodeHashId(userId) - const tracks: APITrack[] = await libs().discoveryProvider.getMostLovedTracks( - encodedUserId, - limit, - true - ) + const tracks: APITrack[] = + await libs().discoveryProvider.getMostLovedTracks( + encodedUserId, + limit, + true + ) return tracks.map(adapter.makeTrack).filter(removeNullable) } catch (e) { console.error(e)