From d99a1f89f7208472e20648556640b2a0f1f042b7 Mon Sep 17 00:00:00 2001 From: Michelle Brier Date: Wed, 28 Sep 2022 16:46:54 -0700 Subject: [PATCH] Add trending/underground non-full endpoint (#3944) * Add trending/underground non-full API endpoint * Generate libs types --- discovery-provider/src/api/v1/tracks.py | 46 +++++++++++ .../api/generated/default/apis/TracksApi.ts | 78 +++++++++++++++++++ 2 files changed, 124 insertions(+) diff --git a/discovery-provider/src/api/v1/tracks.py b/discovery-provider/src/api/v1/tracks.py index 9074deb0b9a..301a1c44e1d 100644 --- a/discovery-provider/src/api/v1/tracks.py +++ b/discovery-provider/src/api/v1/tracks.py @@ -22,6 +22,7 @@ get_encoded_track_id, make_full_response, make_response, + pagination_parser, pagination_with_current_user_parser, search_parser, stem_from_track, @@ -560,6 +561,51 @@ def get(self, version): return success_response(trending_tracks) +@ns.route( + "/trending/underground", + defaults={ + "version": DEFAULT_TRENDING_VERSIONS[TrendingType.UNDERGROUND_TRACKS].name + }, + strict_slashes=False, + doc={ + "get": { + "id": """Get Underground Trending Tracks""", + "description": """Gets the top 100 trending underground tracks on Audius""", + } + }, +) +@ns.route( + "/trending/underground/", + doc={ + "get": { + "id": "Get Underground Trending Tracks With Version", + "description": "Gets the top 100 trending underground tracks on Audius using a given trending strategy version", + "params": {"version": "The strategy version of trending to user"}, + } + }, +) +class UndergroundTrending(Resource): + @record_metrics + @ns.expect(pagination_parser) + @ns.marshal_with(tracks_response) + def get(self, version): + underground_trending_versions = trending_strategy_factory.get_versions_for_type( + TrendingType.UNDERGROUND_TRACKS + ).keys() + version_list = list( + filter(lambda v: v.name == version, underground_trending_versions) + ) + if not version_list: + abort_bad_path_param("version", ns) + + args = pagination_parser.parse_args() + strategy = trending_strategy_factory.get_strategy( + TrendingType.UNDERGROUND_TRACKS, version_list[0] + ) + trending_tracks = get_underground_trending(request, args, strategy) + return success_response(trending_tracks) + + @full_ns.route( "/trending/underground", defaults={ diff --git a/libs/src/sdk/api/generated/default/apis/TracksApi.ts b/libs/src/sdk/api/generated/default/apis/TracksApi.ts index 27e6bd379e9..c622a0261b7 100644 --- a/libs/src/sdk/api/generated/default/apis/TracksApi.ts +++ b/libs/src/sdk/api/generated/default/apis/TracksApi.ts @@ -56,6 +56,32 @@ export interface GetTrendingTracksRequest { time?: GetTrendingTracksTimeEnum; } +export interface GetUndergroundTrendingTracksRequest { + /** + * The number of items to skip. Useful for pagination (page number * limit) + */ + offset?: number; + /** + * The number of items to fetch + */ + limit?: number; +} + +export interface GetUndergroundTrendingTracksWithVersionRequest { + /** + * The strategy version of trending to user + */ + version: string; + /** + * The number of items to skip. Useful for pagination (page number * limit) + */ + offset?: number; + /** + * The number of items to fetch + */ + limit?: number; +} + export interface SearchTracksRequest { /** * The search query @@ -147,6 +173,58 @@ export class TracksApi extends runtime.BaseAPI { }) as Promise>; } + /** + * Gets the top 100 trending underground tracks on Audius + */ + async getUndergroundTrendingTracks(requestParameters: GetUndergroundTrendingTracksRequest = {}): Promise> { + const queryParameters: any = {}; + + if (requestParameters.offset !== undefined) { + queryParameters['offset'] = requestParameters.offset; + } + + if (requestParameters.limit !== undefined) { + queryParameters['limit'] = requestParameters.limit; + } + + const headerParameters: runtime.HTTPHeaders = {}; + + return this.request({ + path: `/tracks/trending/underground`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }) as Promise>; + } + + /** + * Gets the top 100 trending underground tracks on Audius using a given trending strategy version + */ + async getUndergroundTrendingTracksWithVersion(requestParameters: GetUndergroundTrendingTracksWithVersionRequest): Promise> { + if (requestParameters.version === null || requestParameters.version === undefined) { + throw new runtime.RequiredError('version','Required parameter requestParameters.version was null or undefined when calling getUndergroundTrendingTracksWithVersion.'); + } + + const queryParameters: any = {}; + + if (requestParameters.offset !== undefined) { + queryParameters['offset'] = requestParameters.offset; + } + + if (requestParameters.limit !== undefined) { + queryParameters['limit'] = requestParameters.limit; + } + + const headerParameters: runtime.HTTPHeaders = {}; + + return this.request({ + path: `/tracks/trending/underground/{version}`.replace(`{${"version"}}`, encodeURIComponent(String(requestParameters.version))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }) as Promise>; + } + /** * Search for a track or tracks */