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 FeedMessage 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 FeedMessages router = web.RouteTableDef() @router.post(BASE_API_PREFIX + "/service/messages/feed/list/") @docs( tags=["service", "feed-message"], summary="Get multiple feed messages by id.", ) @headers_schema(AppHeader) @json_schema(FeedMessages.List.Request) @dump_response_schema(FeedMessages.List.Response, apply=True) async def get_feed_messages(request: web.Request) -> web.Response: return await get_multiple_messages_scenario(FeedMessage, data=request["json"], app_slug=request["headers"]["app"]) @router.post(BASE_API_PREFIX + "/service/messages/feed/") @docs( tags=["service", "feed-message"], summary="Create multiple feed messages.", ) @headers_schema(AppHeader) @json_schema(FeedMessages.CreateBulk.Request) @dump_response_schema(FeedMessages.CreateBulk.Response, apply=False) async def create_messages(request: web.Request) -> web.Response: public = request["json"]["public"] and config.ALLOW_FEED_MESSAGES_PUBLISHING return await create_multiple_messages_scenario( FeedMessage, data=request["json"], app_slug=request["headers"]["app"], code="feed_messages_created", public=public, publish_schema=sns_common_messages_schema(), )