from aiohttp import web from aiohttp_apispec import docs, headers_schema, querystring_schema from server.constants import BASE_API_PREFIX from server.scenarios.users.favorites import FavoriteTacksDetailedInclude, get_favorite_tracks_detailed from server.schemas.auth import AccountHeader from server.schemas.favorites.tracks import UsersFavoritesTracksDetailed from server.utils.pagination import get_links from server.utils.response import dump_response_schema router = web.RouteTableDef() @router.get(BASE_API_PREFIX + "/users/favorites/tracks/detailed/") @docs(tags=["favorites", "tracks"], summary="Get account favorite tracks extended.") @headers_schema(AccountHeader) @querystring_schema(UsersFavoritesTracksDetailed.Request) @dump_response_schema(UsersFavoritesTracksDetailed.Response, apply=False) async def get(request: web.Request) -> web.Response: params, headers = request["querystring"], request["headers"] offset, limit = params["offset"], params["limit"] result = await get_favorite_tracks_detailed( country_code=params.get("market"), headers=headers, distributors=params.get("distributors", []), tag_id=params.get("tag_id", []), limit=limit, offset=offset, include=[ FavoriteTacksDetailedInclude.WEEKLY_STREAMS.value, FavoriteTacksDetailedInclude.WEEKLY_CREATIONS.value, ], ) items, count = result["items"], result["count"] return web.json_response({"items": items, "count": count, **get_links(request, count, offset, limit)})