from aiohttp import web from aiohttp_apispec import docs, querystring_schema from datetime import date from dateutil import relativedelta from server.constants import BASE_API_PREFIX from server.constants.market import isrc_to_country_code from server.scenarios.playlists.v0.amazon.tracks import get_tracks from server.schemas.playlists.amazon.tracklist_graph import PlaylistAmazonTracklistGraph from server.utils import silent_date_parser from server.utils.glom import glom from server.utils.response import dump_response_schema router = web.RouteTableDef() @router.get(BASE_API_PREFIX + "/playlists/amazon/tracklist-graph/") @docs( tags=["playlist", "amazon"], summary="Get frontline and local tracks graphs for amazon.", ) @querystring_schema(PlaylistAmazonTracklistGraph.Request) @dump_response_schema(PlaylistAmazonTracklistGraph.Response) async def get(request: web.Request) -> web.Response: params = request["querystring"] playlist_id, country_code = params["playlist_id"], params["market"] track_list = await get_tracks(playlist_id=playlist_id, country_code=country_code) # this period related to the 'frontline' track definition from AG-6540 date_30_month_ago = date.today() - relativedelta.relativedelta(months=30) local, frontline, total = 0, 0, len(track_list["items"]) for track in track_list["items"]: isrc = track["isrc"] if isrc_to_country_code(isrc) == country_code: local += 1 release_date = silent_date_parser(glom(track, "track.release_date", default=None)) if release_date and release_date >= date_30_month_ago: frontline += 1 return {"frontline_tracks": frontline, "local_tracks": local, "tracks_num": total}