from aiohttp import web from aiohttp_apispec import docs, querystring_schema from apollo_utils.core.constants.dsp import DSP from server.constants import BASE_API_PREFIX from server.domains.playlists.spotify.dates import get_playlists_spotify_dates from server.scenarios.playlists.get_dates_by_playlist_id.common import get_playlist_dates from server.schemas.playlists.spotify.dates import PlaylistSpotifyDates from server.utils.response import dump_response_schema router = web.RouteTableDef() @router.get(BASE_API_PREFIX + "/playlists/spotify/dates/") @docs( tags=["playlist", "spotify", "dates"], summary="Get spotify playlists with tracks identified by passed isrc.", ) @querystring_schema(PlaylistSpotifyDates.Request) @dump_response_schema(PlaylistSpotifyDates.Response, apply=False) async def get(request: web.Request) -> web.Response: params = request["querystring"] playlist_id = params.get("playlist_id") or params.get("playlisturi") playlist_dates = await get_playlist_dates(dsp=DSP.SPOTIFY, playlist_id=playlist_id) latest_only = ( params["has_history"] and playlist_dates and not playlist_dates[0].get("playlist", {}).get("save_history", False) ) response = get_playlists_spotify_dates(playlist_dates, latest_only=latest_only) return web.json_response(response)