from aiohttp import web from aiohttp_apispec import docs, headers_schema, querystring_schema from apollo_utils.service.clients.aiohttp.utils.response import dump_response_schema from apollo_utils.service.schemas.headers import AppHeader from server.scenarios.private.accounts import delete_accounts, make_accounts_inactive, search_accounts from server.schemas.private.accounts import Accounts, AccountsInactive router = web.RouteTableDef() @router.get("/private/accounts/") @docs(tags=["private", "accounts"], summary="Search accounts.") @headers_schema(AppHeader) @querystring_schema(Accounts.Get.Request) @dump_response_schema(Accounts.Get.Response) async def get_private_accounts(request: web.Request) -> web.Response: app_slug, params = request["headers"]["app"], request["querystring"] result = await search_accounts(app_slug, **params) return {"items": result} @router.delete("/private/accounts/") @docs(tags=["private", "accounts"], summary="Make accounts inactive.") @headers_schema(AppHeader) @querystring_schema(Accounts.Delete.Request) @dump_response_schema(Accounts.Delete.Response) async def delete_private_accounts(request: web.Request) -> web.Response: app_slug, params = request["headers"]["app"], request["querystring"] result = await search_accounts(app_slug, params["id_list"], params["user_id_list"], True, limit=params["limit"]) result = await make_accounts_inactive(result, params["include_list"]) return {"items": result} @router.delete("/private/accounts/inactive/") @docs(tags=["private", "accounts"], summary="Delete inactive accounts.") @headers_schema(AppHeader) @querystring_schema(AccountsInactive.Delete.Request) @dump_response_schema(AccountsInactive.Delete.Response) async def delete_private_accounts_inactive(request: web.Request) -> web.Response: app_slug, params = request["headers"]["app"], request["querystring"] result = await search_accounts( app_slug, params["id_list"], params["user_id_list"], False, params["days_count"], limit=params["limit"] ) result = await delete_accounts(result, params["include_list"]) return {"items": result}