from aiohttp import web from aiohttp_apispec import docs, headers_schema, json_schema, querystring_schema from apollo_utils.service.exceptions import BadRequest from http import HTTPStatus from server.constants import BASE_API_PREFIX from server.scenarios.users.visits import get_users_visits, send_user_visits from server.schemas.auth import UserHeader from server.schemas.users.visits import UsersVisits from server.utils.response import dump_response_schema router = web.RouteTableDef() @router.post(BASE_API_PREFIX + "/users/visits/") @docs(tags=["visits", "user"], summary="Register some object (like track or playlist) page visit for a user.") @headers_schema(UserHeader) @json_schema(UsersVisits.PostRequest) async def post_visits(request: web.Request): params = request["json"] user_id = request["headers"]["user_id"] if not send_user_visits(user_id, **params): raise BadRequest("Failed to handle user visit.") return web.Response(status=HTTPStatus.ACCEPTED) @router.get(BASE_API_PREFIX + "/users/visits/") @docs(tags=["visits", "user"], summary="Get most visited objects of some type (like track or playlist) for a user.") @headers_schema(UserHeader) @querystring_schema(UsersVisits.GetRequest) @dump_response_schema(UsersVisits.GetResponse(many=True)) async def get_visits(request: web.Request): params = request["querystring"] return await get_users_visits(**params)