public assembleAlert()

in source/packages/services/events-alerts/src/alerts/assembler.ts [20:165]


    public assembleAlert(raw:RawAlert) : AssembledAlert {
        logger.debug(`assembleAlert: raw: ${JSON.stringify(raw)}`);

        const templatePropertiesData: { [key: string]: string | number | boolean} = {};
        if (raw.templatePropertiesData?.M) {
            Object.keys(raw.templatePropertiesData.M).forEach(k=> {
                templatePropertiesData[k] = raw.templatePropertiesData.M[k].N ?? raw.templatePropertiesData.M[k].S;
            });
        }

        const targetsM = raw.targets?.M;

        const email:EmailTargetItem[]= [];
        if (targetsM.email?.L?.length>0) {
            email.push(...targetsM.email.L.map(j=> {
                return {
                    address: j.M?.address?.S
                };
            }));
        }
        if (targetsM.email?.M) {
            email.push({
                address: targetsM.email.M.address?.S
            });
        }

        const mqtt:MQTTTargetItem[]= [];
        if (targetsM.mqtt?.L?.length>0) {
            mqtt.push(...targetsM.mqtt.L.map(j=> {
                return {
                    topic: j.M?.topic?.S
                };
            }));
        }
        if (targetsM.mqtt?.M) {
            mqtt.push({
                topic: targetsM.mqtt.M.topic?.S
            });
        }

        const sms:SMSTargetItem[]= [];
        if (targetsM.sms?.L?.length>0) {
            sms.push(...targetsM.sms.L.map(j=> {
                return {
                    phoneNumber: j.M?.phoneNumber?.S
                };
            }));
        }
        if (targetsM.sms?.M) {
            sms.push({
                phoneNumber: targetsM.sms.M.phoneNumber?.S
            });
        }

        const dynamodb:DynamodDBTargetItem[]= [];
        if (targetsM.dynamodb?.L?.length>0) {
            dynamodb.push(...targetsM.dynamodb.L.map(ddb=> {
                const attributeMapping: { [key: string] : string} = {};
                if (ddb.M?.attributeMapping?.M) {
                    Object.keys(ddb.M.attributeMapping.M).forEach(k=> {
                        attributeMapping[k] = ddb.M.attributeMapping.M[k].S;
                    });
                }
                return {
                    tableName: ddb.M?.tableName?.S,
                    attributeMapping
                };
            }));
        }
        if (targetsM.dynamodb?.M) {
            const attributeMapping: { [key: string] : string} = {};
            if (targetsM.dynamodb.M.attributeMapping?.M) {
                Object.keys(targetsM.dynamodb.M.attributeMapping.M).forEach(k=> {
                    attributeMapping[k] = targetsM.dynamodb.M.attributeMapping.M[k].S;
                });
            }
            dynamodb.push({
                    tableName: targetsM.dynamodb.M.tableName?.S,
                    attributeMapping
            });
        }

        const push_gcm:PushTargetItem[]= [];
        if (targetsM.push_gcm?.L?.length>0) {
            push_gcm.push(...targetsM.push_gcm.L.map(j=> {
                return {
                    platformEndpointArn: j.M?.platformEndpointArn?.S
                };
            }));
        }
        if (targetsM.push_gcm?.M) {
            push_gcm.push({
                platformEndpointArn: targetsM.push_gcm.M.platformEndpointArn?.S
            });
        }

        const push_adm:PushTargetItem[]= [];
        if (targetsM.push_adm?.L?.length>0) {
            push_adm.push(...targetsM.push_adm.L.map(j=> {
                return {
                    platformEndpointArn: j.M?.platformEndpointArn?.S
                };
            }));
        }
        if (targetsM.push_adm?.M) {
            push_adm.push({
                platformEndpointArn: targetsM.push_adm.M.platformEndpointArn?.S
            });
        }

        const push_apns:PushTargetItem[]= [];
        if (targetsM.push_apns?.L?.length>0) {
            push_apns.push(...targetsM.push_apns.L.map(j=> {
                return {
                    platformEndpointArn: j.M?.platformEndpointArn?.S
                };
            }));
        }
        if (targetsM.push_apns?.M) {
            push_apns.push({
                platformEndpointArn: targetsM.push_apns.M.platformEndpointArn?.S
            });
        }

        const assembled:AssembledAlert = {
            version: Number(raw.version?.N),
            eventId: raw.eventId?.S,
            eventName: raw.eventName?.S,
            templatePropertiesData,
            time: raw.time?.S,
            userId: raw.userId?.S,
            snsTopicArn: raw.snsTopicArn?.S,
            targets: {
                email,
                dynamodb,
                mqtt,
                push_gcm,
                push_adm,
                push_apns,
                sms
            }
        };

        logger.debug(`assembleAlert: exit: ${JSON.stringify(assembled)}`);
        return assembled;
    }