import asyncio from aiohttp import web from aiohttp_apispec import docs, querystring_schema from server.client import services from server.constants import BASE_API_PREFIX from server.schemas.tiktok.markets import TiktokMarkets from server.utils.response import dump_response_schema router = web.RouteTableDef() @router.get(BASE_API_PREFIX + "/tiktok/markets/") @docs(tags=["tiktok"], summary="Tiktok video markets.") @querystring_schema(TiktokMarkets.Request) @dump_response_schema(TiktokMarkets.Response) async def get(request: web.Request): params = request["querystring"] isrc_list, latest_date = ( params["isrc"], params["latest_date"], ) video_markets, apollo_markets = await asyncio.gather( services.dsp.get_tiktok_markets(isrc=isrc_list, latest_date=latest_date), services.apollo.get_markets(extended=True), ) merged_markets = [i for i in apollo_markets if i["code"] in video_markets] items = sorted(merged_markets, key=lambda d: d["name"]) return {"items": items}