Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 6 additions & 9 deletions packages/common/src/api/tan-query/lineups/useForYouFeed.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Id, GetUserRecommendedTracksTimeRangeEnum } from '@audius/sdk'
import { Id } from '@audius/sdk'
import { useInfiniteQuery, useQueryClient } from '@tanstack/react-query'

import { userTrackMetadataFromSDK } from '~/adapters/track'
Expand All @@ -24,11 +24,9 @@ export const getForYouFeedQueryKey = (userId: ID | null | undefined) => {
}

/**
* "For You" feed for the Feed page. Backed by the same recommended-tracks
* endpoint that powers the Explore page's For You section
* (`GET /v1/users/{id}/recommended-tracks`). The dedicated
* `/feed/for-you` endpoint has been retired in favor of consolidating on
* the recommended-tracks source β€” see the API repo for the deletion.
* "For You" feed for the Feed page. Backed by the dedicated
* `GET /v1/users/{id}/feed/for-you` endpoint β€” a lean 3-source pipeline
* (in-network, trending, underground) with linear ranking and diversity pass.
*/
export const useForYouFeed = (
{
Expand Down Expand Up @@ -57,12 +55,11 @@ export const useForYouFeed = (
const isFirstPage = pageParam === 0
const currentPageSize = isFirstPage ? initialPageSize : loadMorePageSize
const sdk = await audiusSdk()
const { data = [] } = await sdk.users.getUserRecommendedTracks({
const { data = [] } = await sdk.users.getUserForYouFeed({
id: Id.parse(currentUserId),
userId: Id.parse(currentUserId),
limit: currentPageSize,
offset: pageParam,
timeRange: GetUserRecommendedTracksTimeRangeEnum.Week
offset: pageParam
})

const tracks = primeTrackData({
Expand Down
64 changes: 64 additions & 0 deletions packages/sdk/src/sdk/api/generated/default/apis/UsersApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,14 @@ export interface GetUserFeedRequest {
encodedDataSignature?: string;
}

export interface GetUserForYouFeedRequest {
id: string;
limit?: number;
offset?: number;
maxPerArtist?: number;
userId?: string;
}

export interface GetUserIDsByAddressesRequest {
address: Array<string>;
}
Expand Down Expand Up @@ -4172,6 +4180,62 @@ export class UsersApi extends runtime.BaseAPI {
return await response.value();
}

/**
* @hidden
* Returns a personalized For You feed for the user identified in the path. Twitter-style multi-source pipeline β€” candidate retrieval (in-network, trending, underground) β†’ linear ranking (recency decay Γ— engagement Γ— social affinity, weighted by source) β†’ diversity (per-artist cap + consecutive-same-artist lookahead).
* Get For You feed for user
*/
async getUserForYouFeedRaw(params: GetUserForYouFeedRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Tracks>> {
if (params.id === null || params.id === undefined) {
throw new runtime.RequiredError('id','Required parameter params.id was null or undefined when calling getUserForYouFeed.');
}

const queryParameters: any = {};

if (params.limit !== undefined) {
queryParameters['limit'] = params.limit;
}

if (params.offset !== undefined) {
queryParameters['offset'] = params.offset;
}

if (params.maxPerArtist !== undefined) {
queryParameters['max_per_artist'] = params.maxPerArtist;
}

if (params.userId !== undefined) {
queryParameters['user_id'] = params.userId;
}

const headerParameters: runtime.HTTPHeaders = {};

if (!headerParameters["Authorization"] && this.configuration && this.configuration.accessToken) {
const token = await this.configuration.accessToken("OAuth2", ["read"]);
if (token) {
headerParameters["Authorization"] = token;
}
}

const response = await this.request({
path: `/users/{id}/feed/for-you`.replace(`{${"id"}}`, encodeURIComponent(String(params.id))),
method: 'GET',
headers: headerParameters,
query: queryParameters,
}, initOverrides);

return new runtime.JSONApiResponse(response, (jsonValue) => TracksFromJSON(jsonValue));
}

/**
* Returns a personalized For You feed for the user identified in the path. Twitter-style multi-source pipeline β€” candidate retrieval (in-network, trending, underground) β†’ linear ranking (recency decay Γ— engagement Γ— social affinity, weighted by source) β†’ diversity (per-artist cap + consecutive-same-artist lookahead).
* Get For You feed for user
*/
async getUserForYouFeed(params: GetUserForYouFeedRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Tracks> {
const response = await this.getUserForYouFeedRaw(params, initOverrides);
return await response.value();
}

/**
* @hidden
* Gets User IDs from any Ethereum wallet address or Solana account address associated with their Audius account.
Expand Down
Loading