Martin Dimitrov c1f068f5aa
All checks were successful
Build and push image for doorman / docker (push) Successful in 1m0s
change to ddb instead of redis
2024-07-06 13:40:06 -07:00

57 lines
1.3 KiB
JavaScript

/**
* Try to update door status
*/
exports.handler = async function(context, event, callback) {
const response = new Twilio.Response();
const door = event.door;
if (!door) {
response.setStatusCode(400);
return callback(null, response);
}
const ddbPath = Runtime.getFunctions()['common/ddb'].path;
const ddb = require(ddbPath);
const client = ddb.createDDBClient(context);
await client.send(ddb.getLockStatusCommand(door))
.then(async (lock) => {
const isOpen = ddb.isLockOpen(lock);
if (isOpen) {
const fingerprint = JSON.parse(lock.Item.fingerprint.S);
response
.setStatusCode(200)
.appendHeader('Content-Type', 'application/json')
.setBody({
status: "OPEN",
fingerprint,
});
await client.send(ddb.clearLockStatusCommand(lock));
return;
}
response
.setStatusCode(401)
.appendHeader('Content-Type', 'application/json')
.setBody({
status: "CLOSED",
});
}).catch((e) => {
console.log(e);
response
.setStatusCode(500)
.appendHeader('Content-Type', 'application/json')
.setBody({ err: e });
});
await client.destroy();
return callback(null, response);
};