import 'dotenv/config'; import config from 'config'; import logger from '@common/libs/utils/logger'; import { SQSBatchResponse, SQSEvent } from 'aws-lambda'; import { SQSMessagesHandler } from '@p81-common/common-messaging'; import ComputeProfileEventHandler from '@libs/handlers/ComputeProfileEventHandler'; import { ComputeSWGProfile, ComputeSwgProfileSchema, Events } from '@p81-common/compute-dtos'; import ComputeProfileContext from '@functions/swg-lambda-compute-profile/src/ComputeProfileContext'; let fetcherContext: ComputeProfileContext; let sqsMessagesHandler: SQSMessagesHandler; function initializeHandlers(context: ComputeProfileContext) { sqsMessagesHandler = new SQSMessagesHandler({ logger: fetcherContext.logger }); const computeProfileEventHandler = new ComputeProfileEventHandler(context); sqsMessagesHandler.registerHandler( Events.compute.ComputeSwgProfileEvent.eventName, computeProfileEventHandler.handler.bind(computeProfileEventHandler), ComputeSwgProfileSchema, ); } /** * init connections to DB and AMQP */ async function initializeContext() { if (!fetcherContext) { const pusherLogger = logger.child({ domain: config.get('domain'), }); fetcherContext = new ComputeProfileContext(config, pusherLogger); await fetcherContext.initContext(); initializeHandlers(fetcherContext); } } const swgComputeHandler = async (event: SQSEvent): Promise => { await initializeContext(); fetcherContext.logger.debug({ message: 'eventData', event }); const res = await sqsMessagesHandler.process(event); fetcherContext.logger.debug({ message: 'lambda respond', res }); return res; }; export const handler = swgComputeHandler;