from aiohttp import web from aiohttp_apispec import docs, querystring_schema from server.client import services from server.constants import BASE_API_PREFIX, DSP from server.schemas.stations import StationsSummary from server.utils.response import dump_response_schema router = web.RouteTableDef() @router.get(BASE_API_PREFIX + "/stations/summary/") @docs( tags=["station", "apple"], summary="Get apple stations streams for tracks identified by passed isrc.", ) @querystring_schema(StationsSummary.Request) @dump_response_schema(StationsSummary.Response) async def get(request: web.Request) -> web.Response: params = request["querystring"] isrc_list, market, min_streams = params["isrc_list"], params["market"], params["min_streams"] result = await services.dsp.get_stations_streams_summary( isrc=isrc_list, vendor=DSP.APPLE.value, market=market, min=min_streams, compact=True, ) result_items = result["items"] stations_ids = [f"ra.{i['id'].replace(f'{DSP.APPLE.value}_', '')}" for i in result_items] stations_data = await services.vendor.get_stations(DSP.APPLE, ids=stations_ids, market=market) stations_data = {i["id"].replace("ra.", ""): i for i in stations_data} for item in result_items: item["data"] = stations_data.get(item["id"].replace(f"{DSP.APPLE.value}_", "")) return result