import { CommonHelper } from './common/helper'; import * as Interfaces from './Interfaces/interfaces'; import { LOGGER_TAG } from './common/config'; import { Thermostat } from './Classes/Thermostat'; import { ContactSensor } from './Classes/ContactSensor'; import { WaterleakageSensor } from './Classes/WaterleakageSensor'; import { NoiseSensor } from './Classes/NoiseSensor'; let noise_schema = require("./noise_schemas/connectMongo"); /** * Handler function to Process Lock API commands for all the lock models * @param event * Steps * 1. Validate the input event body * 2. Based on typeOfCode, instantiate the class for the type of code * 3. call processEvent of the code type to process the SQS message */ export async function handler (event: any){ console.log(LOGGER_TAG + "Event received : ", JSON.stringify(event)); //console.log(LOGGER_TAG + "SQS message body : " + event); let response: Interfaces.ResponseObject = { status: true }; // Step 1: Validate the input event body let messagebody; try{ if (event.Records) { messagebody = JSON.parse(event.Records[0].body); } else { messagebody = event; } console.log(LOGGER_TAG + "Parsed SQS message : "); console.log(messagebody); } catch (error) { console.log(LOGGER_TAG + "Error parsing SQS message, returning an error and sending an SNS error notification " + error.message); // Send error message Error SNS topic let subject = "Error parsing SQS message body in unlink smartdevices Lambda" let body = { subject, event, error }; await CommonHelper.sendErrorMessage({subject, body}); // Throw the error to the lambda. Change it to move to dlq later CommonHelper.throwError("JSON Parse error" + error.message); } // Step 2: Based on typeOfCode, instantiate the class for the type of code let unlinkPropertyObj:any = null; switch (messagebody.typeOfCode) { case 'THERMOSTAT': console.log(LOGGER_TAG + "Unlinking Thermostate for type " + messagebody.typeOfCode); unlinkPropertyObj = new Thermostat(); break; case 'CONTACT_SENSOR': console.log(LOGGER_TAG + "Unlinking contactSensor for type " + messagebody.typeOfCode); unlinkPropertyObj = new ContactSensor(); break; case 'WATER_LEAKAGE_SENSOR': console.log(LOGGER_TAG + "Unlinking waterLeakageSensor for type " + messagebody.typeOfCode); unlinkPropertyObj = new WaterleakageSensor(); break; case 'NOISE_SENSOR': console.log(LOGGER_TAG + "Unlinking NoiseSensor for type " + messagebody.typeOfCode); unlinkPropertyObj = new NoiseSensor(); break; default: console.log(LOGGER_TAG + "Unsupported Access Code type " + messagebody.typeOfCode); response.status = false; response.errorMessage = "Unsupported Access Code type: " + messagebody.typeOfCode; } // Step 3: call processEvent of the code type to process the SQS message try{ if(unlinkPropertyObj != null) { console.log(LOGGER_TAG + "Calling"); response = await unlinkPropertyObj.processEvent(messagebody); console.log(LOGGER_TAG + "Response from processEvent " + JSON.stringify(response)); } } catch (error) { console.log(LOGGER_TAG + "Error in processEvent function " + JSON.stringify(error)); throw error; } console.log(LOGGER_TAG + "Response " + JSON.stringify(response)); return response; }