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.constants.playlists.delphi.by_api.track_positions_playlists import TrackPositionsPlaylists 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.spotify import get_current_playlists_spotify_by_track_ap from server.schemas.playlists.spotify.by_track import V1PlaylistsSpotifyByTrack, V3PlaylistSpotifyByTrack from server.utils.pagination import paginate from server.utils.response import dump_response_schema router = web.RouteTableDef() @router.get(BASE_API_PREFIX + "/v1/playlists/spotify/by-track/") @docs( tags=["playlist", "spotify"], summary="(AP) Get spotify current playlists identified by passed ISRC.", ) @querystring_schema(V1PlaylistsSpotifyByTrack.Request) @dump_response_schema(V1PlaylistsSpotifyByTrack.Response, apply=False) @paginate(cache_keys.V1_PLAYLISTS_SPOTIFY_BY_TRACK) async def get(request: web.Request) -> web.Response: params = request["querystring"] streams_country_code = params["market"] isrc = params["isrc_list"] result = await get_current_playlists_spotify_by_track_ap(isrc, streams_country_code) return V1PlaylistsSpotifyByTrack.Response.NestedItem( context={"local_streams_key": streams_country_code or TrackPositionsPlaylists.STREAMS_COUNTRY_CODE.LOCAL.value}, many=True, ).dump(result["items"]) @router.get(BASE_API_PREFIX + "/v3/playlists/spotify/by-track/") @docs( tags=["playlist", "spotify"], summary="(AGO) Get spotify current playlists identified by passed ISRC with categories and streams type(v3).", ) @querystring_schema(V3PlaylistSpotifyByTrack.Request) @dump_response_schema(V3PlaylistSpotifyByTrack.Response, apply=False) @paginate(cache_keys.V3_PLAYLISTS_SPOTIFY_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.SPOTIFY, **params, ) schema_context = {"utc_now": datetime.utcnow().date()} return V3PlaylistSpotifyByTrack.Response(context=schema_context).dump( dict(items=result["items"], categories=result["categories"], streams_type=result["streams_type"]) )