Skip to content

Commit

Permalink
Support unlisted track filtering in user tracks api (#3964)
Browse files Browse the repository at this point in the history
* Support unlisted track filtering in user tracks api

* Fix styling

* Update libs types

* Add comments
  • Loading branch information
michellebrier committed Sep 30, 2022
1 parent 09fb7a4 commit 883047c
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 0 deletions.
8 changes: 8 additions & 0 deletions discovery-provider/src/api/v1/helpers.py
Expand Up @@ -556,6 +556,14 @@ def __schema__(self):
type=str,
choices=SortDirection._member_names_,
)
user_tracks_route_parser.add_argument(
"filter_tracks",
required=False,
description="Filter by unlisted or public tracks",
type=str,
default="all",
choices=("all", "public", "unlisted"),
)

full_search_parser = pagination_with_current_user_parser.copy()
full_search_parser.add_argument("query", required=True, description="The search query")
Expand Down
6 changes: 6 additions & 0 deletions discovery-provider/src/api/v1/users.py
Expand Up @@ -228,6 +228,7 @@ def get(self, id, authed_user_id=None):
offset = format_offset(args)
limit = format_limit(args)
query = format_query(args)
filter_tracks = args.get("filter_tracks", "all")
sort_method = format_sort_method(args)
sort_direction = format_sort_direction(args)

Expand All @@ -248,6 +249,7 @@ def get(self, id, authed_user_id=None):
id=None,
min_block_number=None,
routes=None,
filter_tracks=filter_tracks,
)
tracks = get_tracks(args)
tracks = list(map(extend_track, tracks))
Expand Down Expand Up @@ -283,6 +285,7 @@ def get(self, id, authed_user_id=None):
offset = format_offset(args)
limit = format_limit(args)
query = format_query(args)
filter_tracks = args.get("filter_tracks", "all")

sort = args.get("sort", None) # Deprecated
sort_method = format_sort_method(args)
Expand All @@ -307,6 +310,7 @@ def get(self, id, authed_user_id=None):
id=None,
min_block_number=None,
routes=None,
filter_tracks=filter_tracks,
)
tracks = get_tracks(args)
tracks = list(map(extend_track, tracks))
Expand All @@ -328,6 +332,7 @@ def _get(self, handle, authed_user_id=None):
sort = args.get("sort", None)
offset = format_offset(args)
limit = format_limit(args)
filter_tracks = args.get("filter_tracks", "all")

args = {
"handle": handle,
Expand All @@ -338,6 +343,7 @@ def _get(self, handle, authed_user_id=None):
"sort": sort,
"limit": limit,
"offset": offset,
"filter_tracks": filter_tracks,
}
tracks = get_tracks(args)
tracks = list(map(extend_track, tracks))
Expand Down
12 changes: 12 additions & 0 deletions discovery-provider/src/queries/get_tracks.py
Expand Up @@ -47,6 +47,7 @@ class GetTrackArgs(TypedDict):
filter_deleted: bool
exclude_premium: bool
routes: List[RouteArgs]
filter_tracks: str

# Optional sort method for the returned results
sort_method: Optional[SortMethod]
Expand All @@ -60,6 +61,7 @@ def _get_tracks(session, args):
TrackWithAggregates.is_current == True, TrackWithAggregates.stem_of == None
)

# Filter out tracks the user is not authorized to view
if "routes" in args and args.get("routes") is not None:
routes = args.get("routes")
# Join the routes table
Expand Down Expand Up @@ -131,6 +133,16 @@ def _get_tracks(session, args):
)
)

# Allow filtering of tracks by unlisted vs public.
# If a user is not authorized to view unlisted tracks but has specified filter_tracks=unlisted,
# this will filter out all results.
if "filter_tracks" in args and args.get("filter_tracks") != "all":
filter_tracks = args.get("filter_tracks")
if filter_tracks == "unlisted":
base_query = base_query.filter(TrackWithAggregates.is_unlisted == True)
else:
base_query = base_query.filter(TrackWithAggregates.is_unlisted == False)

if "sort_method" in args and args.get("sort_method") is not None:
sort_method = args.get("sort_method")
sort_direction = args.get("sort_direction")
Expand Down
34 changes: 34 additions & 0 deletions libs/src/sdk/api/generated/default/apis/UsersApi.ts
Expand Up @@ -318,6 +318,10 @@ export interface GetTracksByUserRequest {
* The sort direction
*/
sortDirection?: GetTracksByUserSortDirectionEnum;
/**
* Filter by unlisted or public tracks
*/
filterTracks?: GetTracksByUserFilterTracksEnum;
}

export interface GetTracksByUserHandleRequest {
Expand Down Expand Up @@ -353,6 +357,10 @@ export interface GetTracksByUserHandleRequest {
* The sort direction
*/
sortDirection?: GetTracksByUserHandleSortDirectionEnum;
/**
* Filter by unlisted or public tracks
*/
filterTracks?: GetTracksByUserHandleFilterTracksEnum;
}

export interface GetUserRequest {
Expand Down Expand Up @@ -868,6 +876,10 @@ export class UsersApi extends runtime.BaseAPI {
queryParameters['sort_direction'] = requestParameters.sortDirection;
}

if (requestParameters.filterTracks !== undefined) {
queryParameters['filter_tracks'] = requestParameters.filterTracks;
}

const headerParameters: runtime.HTTPHeaders = {};

return this.request({
Expand Down Expand Up @@ -916,6 +928,10 @@ export class UsersApi extends runtime.BaseAPI {
queryParameters['sort_direction'] = requestParameters.sortDirection;
}

if (requestParameters.filterTracks !== undefined) {
queryParameters['filter_tracks'] = requestParameters.filterTracks;
}

const headerParameters: runtime.HTTPHeaders = {};

return this.request({
Expand Down Expand Up @@ -1139,6 +1155,15 @@ export enum GetTracksByUserSortDirectionEnum {
Asc = 'asc',
Desc = 'desc'
}
/**
* @export
* @enum {string}
*/
export enum GetTracksByUserFilterTracksEnum {
All = 'all',
Public = 'public',
Unlisted = 'unlisted'
}
/**
* @export
* @enum {string}
Expand Down Expand Up @@ -1170,6 +1195,15 @@ export enum GetTracksByUserHandleSortDirectionEnum {
Asc = 'asc',
Desc = 'desc'
}
/**
* @export
* @enum {string}
*/
export enum GetTracksByUserHandleFilterTracksEnum {
All = 'all',
Public = 'public',
Unlisted = 'unlisted'
}
/**
* @export
* @enum {string}
Expand Down
34 changes: 34 additions & 0 deletions libs/src/sdk/api/generated/full/apis/UsersApi.ts
Expand Up @@ -313,6 +313,10 @@ export interface GetTracksByUserRequest {
* The sort direction
*/
sortDirection?: GetTracksByUserSortDirectionEnum;
/**
* Filter by unlisted or public tracks
*/
filterTracks?: GetTracksByUserFilterTracksEnum;
}

export interface GetTracksByUserHandleRequest {
Expand Down Expand Up @@ -348,6 +352,10 @@ export interface GetTracksByUserHandleRequest {
* The sort direction
*/
sortDirection?: GetTracksByUserHandleSortDirectionEnum;
/**
* Filter by unlisted or public tracks
*/
filterTracks?: GetTracksByUserHandleFilterTracksEnum;
}

export interface GetUserRequest {
Expand Down Expand Up @@ -833,6 +841,10 @@ export class UsersApi extends runtime.BaseAPI {
queryParameters['sort_direction'] = requestParameters.sortDirection;
}

if (requestParameters.filterTracks !== undefined) {
queryParameters['filter_tracks'] = requestParameters.filterTracks;
}

const headerParameters: runtime.HTTPHeaders = {};

return this.request({
Expand Down Expand Up @@ -881,6 +893,10 @@ export class UsersApi extends runtime.BaseAPI {
queryParameters['sort_direction'] = requestParameters.sortDirection;
}

if (requestParameters.filterTracks !== undefined) {
queryParameters['filter_tracks'] = requestParameters.filterTracks;
}

const headerParameters: runtime.HTTPHeaders = {};

return this.request({
Expand Down Expand Up @@ -1063,6 +1079,15 @@ export enum GetTracksByUserSortDirectionEnum {
Asc = 'asc',
Desc = 'desc'
}
/**
* @export
* @enum {string}
*/
export enum GetTracksByUserFilterTracksEnum {
All = 'all',
Public = 'public',
Unlisted = 'unlisted'
}
/**
* @export
* @enum {string}
Expand Down Expand Up @@ -1094,6 +1119,15 @@ export enum GetTracksByUserHandleSortDirectionEnum {
Asc = 'asc',
Desc = 'desc'
}
/**
* @export
* @enum {string}
*/
export enum GetTracksByUserHandleFilterTracksEnum {
All = 'all',
Public = 'public',
Unlisted = 'unlisted'
}
/**
* @export
* @enum {string}
Expand Down

0 comments on commit 883047c

Please sign in to comment.