import asyncio from aiohttp import web from aiohttp_apispec import docs, querystring_schema from server.client import services from server.constants import BASE_API_PREFIX from server.domains.playlists.v1.misc import set_playlists_names from server.schemas.tracks.playlists import TracksPlaylistsHH, TracksPlaylistsHHBulk from server.utils.response import dump_response_schema router = web.RouteTableDef() @router.get(BASE_API_PREFIX + "/v1/tracks/playlists/hot-hits/") @docs(tags=["playlists", "hot-hits"], summary="Hot Hits playlists by track.") @querystring_schema(TracksPlaylistsHH.Request) @dump_response_schema(TracksPlaylistsHH.Response) async def get_v1_tracks_playlists_hot_hits(request: web.Request): result = await services.apollo.get_tracks_playlists_hot_hits(**request["querystring"]) await set_playlists_names(result["items"], id_field="playlist_id", name_field="playlist_name") return result @router.get(BASE_API_PREFIX + "/v1/tracks/playlists/hot-hits/bulk/") @docs(tags=["playlists", "hot-hits"], summary="Hot hits playlists by tracks.") @querystring_schema(TracksPlaylistsHHBulk.Request) @dump_response_schema(TracksPlaylistsHHBulk.Response) async def get_v1_tracks_playlists_hot_hits_bulk(request: web.Request): result = await services.apollo.get_tracks_playlists_hot_hits_bulk(**request["querystring"]) dest_playlist_list = result["playlists"] + (result["outdated"] or []) for item in result["items"]: dest_playlist_list += item["previous"] + item["current"] + item["non_featured"] await set_playlists_names( result["playlists"], id_field="playlist_id", name_field="playlist_name", dest_playlist_list=dest_playlist_list ) return result