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.constants.tracks import CURRENT_PLACEMENT_TYPE from server.scenarios.playlists.get_track_in_playlist.common import TrackInPlaylistScenario from server.schemas.playlists.common.track_in_playlist import V2PlaylistsAppleTrack from server.utils.response import dump_response_schema router = web.RouteTableDef() @router.get(BASE_API_PREFIX + "/v2/playlists/apple/track/") @docs( tags=["playlists", "apple"], summary="Get apple playlists with tracks identified by passed isrc.", ) @querystring_schema(V2PlaylistsAppleTrack.Request) @dump_response_schema(V2PlaylistsAppleTrack.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.APPLE ).get_track_in_playlist() schema_context = { "image_size": params["image_size"], "changed_date": "latest_position_date_time" if playlist_type == CURRENT_PLACEMENT_TYPE else "playlist.dsp_sync_date_time", "utc_now": datetime.utcnow().date(), } return V2PlaylistsAppleTrack.Response(context=schema_context).dump(response)