from aiohttp import web from aiohttp_apispec import docs, querystring_schema from apollo_utils.core.constants.dsp import DSP from datetime import datetime from server.constants import BASE_API_PREFIX, cache_keys from server.scenarios.playlists.by_track.current.ago.common import get_current_playlists_dsp_by_track_ago from server.scenarios.playlists.by_track.current.ap.apple import get_current_playlists_apple_by_track_ap from server.schemas.playlists.apple.by_track import V1PlaylistsAppleByTrack, V3PlaylistAppleByTrack from server.utils.pagination import paginate from server.utils.response import dump_response_schema router = web.RouteTableDef() @router.get(BASE_API_PREFIX + "/v1/playlists/apple/by-track/") @docs( tags=["playlist", "apple"], summary="(AP) Get apple current playlists identified by passed ISRC.", ) @querystring_schema(V1PlaylistsAppleByTrack.Request) @dump_response_schema(V1PlaylistsAppleByTrack.Response) @paginate(cache_keys.V1_PLAYLISTS_APPLE_BY_TRACK, extend_original_dict=True) async def get(request: web.Request) -> web.Response: params = request["querystring"] isrc, country_code, meta_country_code = params["isrc_list"], params["country"], params["meta_country_code"] return await get_current_playlists_apple_by_track_ap(isrc, country_code, meta_country_code) @router.get(BASE_API_PREFIX + "/v3/playlists/apple/by-track/") @docs( tags=["playlist", "apple"], summary="(AGO) Get apple current playlists identified by passed ISRC with categories and streams type(v3).", ) @querystring_schema(V3PlaylistAppleByTrack.Request) @dump_response_schema(V3PlaylistAppleByTrack.Response, apply=False) @paginate(cache_keys.V3_PLAYLISTS_APPLE_BY_TRACK, extend_original_dict=True) async def get(request: web.Request) -> web.Response: params = request["querystring"] result = await get_current_playlists_dsp_by_track_ago( dsp=DSP.APPLE, **params, ) schema_context = {"utc_now": datetime.utcnow().date()} return V3PlaylistAppleByTrack.Response(context=schema_context).dump( dict(items=result["items"], categories=result["categories"], streams_type=result["streams_type"]) )