Source code for luna_backport3.app.handlers.persons_handler
import asyncio
from sanic.response import HTTPResponse
from app.handlers.base_handler import BaseHandler
from app.handlers.schemas import CREATE_PERSON_SCHEMA
from db.db_context import PersonFilters
[docs]class PersonsHandler(BaseHandler):
"""
Persons handler
"""
[docs] async def post(self) -> HTTPResponse:
"""
Person creation. See `spec_create_person`_.
.. _spec_create_person:
_static/api.html#operation/createPerson
Returns:
json with person id
"""
reqJson = self.request.json
self.validateJson(reqJson, CREATE_PERSON_SCHEMA, useJsonSchema=False)
personId = await self.dbContext.createPerson(
accountId=self.accountId, userData=reqJson.get("user_data"), externalId=reqJson.get("external_id")
)
return self.success(201, outputJson={"person_id": personId})
[docs] async def get(self) -> HTTPResponse:
"""
Get persons. See `spec_get_persons`_.
.. _spec_get_persons:
_static/api.html#operation/getPersons
Returns:
dict with person count and list with persons
"""
userData = self.getQueryParam("user_data", require=False)
externalId = self.getQueryParam("external_id", require=False)
page, pageSize = self.getPagination(defaultPage=1, defaultPageSize=10, maxPageSize=100)
# noinspection PyArgumentList
personFilters = PersonFilters(accountId=self.accountId, userData=userData, externalId=externalId)
persons, count = await asyncio.gather(
self.dbContext.getPersons(personFilters=personFilters, page=page, pageSize=pageSize),
self.dbContext.getPersonsCount(personFilters=personFilters),
)
return self.success(200, outputJson={"count": count, "persons": persons})