From f678b555f23c4721e93ff10528c3a9d473e737df Mon Sep 17 00:00:00 2001 From: yeseul106 <20191037@sungshin.ac.kr> Date: Sat, 1 Jun 2024 03:29:41 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=98=88=EC=95=BD=20=EB=B0=9C=EC=86=A1?= =?UTF-8?q?=EC=9D=84=20=EC=9C=84=ED=95=9C=20eventBridgeHandler=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lambda.ts | 55 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/src/lambda.ts b/src/lambda.ts index 91f6c2c..b3a789f 100644 --- a/src/lambda.ts +++ b/src/lambda.ts @@ -1,4 +1,4 @@ -import { APIGatewayProxyEvent, SNSEvent } from 'aws-lambda'; +import { APIGatewayProxyEvent, EventBridgeEvent, SNSEvent } from 'aws-lambda'; import { v4 as uuid } from 'uuid'; import tokenFactory from './modules/tokenFactory'; @@ -187,6 +187,7 @@ const sendPush = async (dto: RequestSendPushMessageDTO) => { throw new Error(`send Push error: ${e}`); } }; + const sendPushAll = async (dto: RequestSendAllPushMessageDTO) => { try { const { transactionId, title, content, category, webLink, deepLink, service } = dto; @@ -242,6 +243,54 @@ const sendPushAll = async (dto: RequestSendAllPushMessageDTO) => { } }; +const eventBridgeHandler = async (event: EventBridgeEvent) => { + const { header, body } = event.detail; + + if (!header || !body) { + return response(400, status.success(statusCode.BAD_REQUEST, responseMessage.INVALID_REQUEST)); + } + + const { action, transactionId, service } = header; + + try { + switch (action) { + case Actions.SEND: { + const dto: RequestSendPushMessageDTO = { + ...body, + transactionId, + service, + }; + + if (!dtoValidator.toRequestSendPushMessageDto(dto)) { + return response(400, status.success(statusCode.BAD_REQUEST, responseMessage.INVALID_REQUEST)); + } + + await sendPush(dto); + return response(200, status.success(statusCode.OK, responseMessage.SEND_SUCCESS)); + } + case Actions.SEND_ALL: { + const dto: RequestSendAllPushMessageDTO = { + ...body, + transactionId, + service, + }; + + if (!dtoValidator.toRequestSendAllPushMessageDTO(dto)) { + return response(400, status.success(statusCode.BAD_REQUEST, responseMessage.INVALID_REQUEST)); + } + + await sendPushAll(dto); + return response(200, status.success(statusCode.OK, responseMessage.SEND_SUCCESS)); + } + default: { + return response(400, status.success(statusCode.BAD_REQUEST, responseMessage.INVALID_REQUEST)); + } + } + } catch (error) { + return response(500, status.fail(statusCode.INTERNAL_ERROR, responseMessage.INTERNAL_SERVER_ERROR)); + } +}; + const apiGateWayHandler = async (event: APIGatewayProxyEvent) => { if (event.body === null || event.headers.action === undefined) { return response(400, status.success(statusCode.BAD_REQUEST, responseMessage.INVALID_REQUEST)); @@ -340,9 +389,11 @@ const snsHandler = async (event: SNSEvent) => { return response(204, status.success(statusCode.NO_CONTENT, responseMessage.NO_CONTENT)); }; -export const service = async (event: APIGatewayProxyEvent | SNSEvent): Promise => { +export const service = async (event: APIGatewayProxyEvent | EventBridgeEvent | SNSEvent): Promise => { if ('Records' in event) { return await snsHandler(event); + } else if ('detail' in event) { + return await eventBridgeHandler(event); } else { return await apiGateWayHandler(event); }