from aiohttp import web from aiohttp_apispec import docs, headers_schema, json_schema, querystring_schema from server.client import services from server.constants import BASE_API_PREFIX from server.schemas.auth import AccountHeader, AppSlugHeader from server.schemas.favorites import UserFavorites from server.schemas.favorites.misc import UsersFavoritesCheck from server.utils.response import dump_response_schema router = web.RouteTableDef() @router.post(BASE_API_PREFIX + "/service/users/favorites/list/") @docs(tags=["devices", "user"], summary="Register a user device") @headers_schema(AppSlugHeader) @json_schema(UserFavorites.Request) @dump_response_schema(UserFavorites.Response) async def get(request: web.Request): body = request["json"] headers = request["headers"] entity = body.get("entity", {}) entity_type, entity_ids = entity.get("type"), entity.get("id") device, settings = body.get("device"), body.get("settings") user, account = body.get("user"), body.get("account") include = body.get("include") dsp = entity.pop("dsp") user_data_body = {} if device: user_data_body["device"] = device if settings: user_data_body["settings"] = settings if user: user_data_body["user"] = user elif account: user_data_body["account"] = account if entity_type == "playlist" and not entity_ids: user_data_body["vendor_list"] = dsp return await services.user_data.user_favorites_list( headers=AppSlugHeader().dump(headers), entity=entity, include=include, **user_data_body ) @router.get(BASE_API_PREFIX + "/users/favorites/check/") @docs(tags=["favorites"], summary="Check if an entity(s) is added to favorites.") @headers_schema(AccountHeader) @querystring_schema(UsersFavoritesCheck.Request) @dump_response_schema(UsersFavoritesCheck.Response(many=True), apply=True) async def get(request: web.Request) -> web.Response: params, headers = request["querystring"], request["headers"] return (await services.user_data.get_user_favorites(headers=headers, **params)).get("items", [])