from typing import Any, Dict, List from smelog.factory import BindableLogger from apollo_messages_views.clients.user_data_api import UserDataClient from apollo_messages_views.config import FULL_APP_NAME from apollo_messages_views.handlers import get_event_handler from apollo_messages_views.utils.input import parse_full_events, parse_raw_input def handler(logger: BindableLogger, event: List[Dict[str, Any]]): """Lambda job. Args: logger: Logger instance. event: Lambda event obj. Returns: JSON serializable response """ event_handler = get_event_handler() logger.info(f"1. {FULL_APP_NAME} was triggered by an input event\nEvent: {event}") events = parse_raw_input(logger, event) if not events: return logger.info(f"2. {FULL_APP_NAME} has parsed {len(events)} raw events \nEvents: {events}") user_data_api = UserDataClient() events = parse_full_events(logger, user_data_api.get_bulk_messages(ids=[e["id"] for e in events])) if not events: return logger.info(f"3. {FULL_APP_NAME} has parsed {len(events)} full events \nEvents: {events}") messages = event_handler(events=events, logger=logger) messages_count = len(messages) logger.info(f"4. {FULL_APP_NAME} has formatted {messages_count} messages to create.") if not messages_count: return response = user_data_api.create_bulk_messages(data=messages) logger.info( f"5. {FULL_APP_NAME} user_data_api returned {len(response.get('ok', []))}/{messages_count}" f"successful and {len(response.get('failed', []))}/{messages_count} items." )