from aiohttp import web from aiohttp_apispec import docs, headers_schema, json_schema from apollo_utils.service.clients.aiohttp.utils.response import dump_response_schema from apollo_utils.service.schemas.headers import AppHeader from server import config from server.constants.core import BASE_API_PREFIX from server.db.models.messages import Message from server.publishers.schemas.base import sns_common_messages_schema from server.scenarios.messages.create_bulk import create_multiple_messages_scenario from server.scenarios.messages.get_bulk import get_multiple_messages_scenario from server.schemas.messages import Messages router = web.RouteTableDef() @router.post(BASE_API_PREFIX + "/service/messages/list/") @docs( tags=["service", "message"], summary="Get multiple messages by id.", ) @headers_schema(AppHeader) @json_schema(Messages.List.Request) @dump_response_schema(Messages.List.Response, apply=True) async def get_messages(request: web.Request) -> web.Response: return await get_multiple_messages_scenario(Message, data=request["json"], app_slug=request["headers"]["app"]) @router.post(BASE_API_PREFIX + "/service/messages/") @docs( tags=["service", "message"], summary="Create multiple messages.", ) @headers_schema(AppHeader) @json_schema(Messages.CreateBulk.Request) @dump_response_schema(Messages.CreateBulk.Response, apply=False) async def create_messages(request: web.Request) -> web.Response: data = request["json"] public = request["json"]["public"] and config.ALLOW_MESSAGES_PUBLISHING unique_mode, unique_key = data.pop("unique_mode"), data.pop("unique_key", None) return await create_multiple_messages_scenario( Message, data=request["json"], app_slug=request["headers"]["app"], code="messages_created", public=public, publish_schema=sns_common_messages_schema(), check_unique_mode=unique_mode, check_unique_key=unique_key, )