from aiohttp import web from aiohttp_apispec import docs, querystring_schema from datetime import datetime from server.constants import BASE_API_PREFIX, DSP from server.scenarios.playlists.get_track_in_playlist.common import TrackInPlaylistScenario from server.schemas.playlists.common.track_in_playlist import V2PlaylistsSpotifyTrack from server.utils.response import dump_response_schema router = web.RouteTableDef() @router.get(BASE_API_PREFIX + "/v2/playlists/spotify/track/") @docs( tags=["playlists", "spotify"], summary="Get spotify playlists with tracks identified by passed isrc.", ) @querystring_schema(V2PlaylistsSpotifyTrack.Request) @dump_response_schema(V2PlaylistsSpotifyTrack.Response, apply=False) async def get(request: web.Request) -> web.Response: params = request["querystring"] playlist_id, isrc, country_code, playlist_type = ( params["playlist_id"], params["isrc"], params["market"], params["playlist_type"], ) response = await TrackInPlaylistScenario( playlist_id, country_code, isrc, playlist_type, DSP.SPOTIFY ).get_track_in_playlist() schema_context = {"image_size": params["image_size"], "utc_now": datetime.utcnow().date()} return V2PlaylistsSpotifyTrack.Response(context=schema_context).dump(response)