diff --git a/packages/doorman-api/src/functions/api/door/status.ts b/packages/doorman-api/src/functions/api/door/status.ts index 54d43e2..37ad87c 100644 --- a/packages/doorman-api/src/functions/api/door/status.ts +++ b/packages/doorman-api/src/functions/api/door/status.ts @@ -5,8 +5,9 @@ import { ServerlessFunctionSignature, ServerlessEventObject } from "@twilio-labs/serverless-runtime-types/types"; import { TwilioContext } from "../../../types/TwilioContext"; import { shouldBlockRequest } from "../../../utils/blockUserAgent"; -import { clearLockStatusCommand, createDDBClient, getLockStatusCommand, isLockOpen } from "../../../utils/ddb"; +import { createDynaBridgeClient } from "../../../utils/ddb"; import { DoorStatus } from "../../../types/DoorStatus"; +import { getLockStatusID, isLockOpen } from "../../../schema/LockStatus"; export interface StatusRequest extends ServerlessEventObject { door: string; @@ -32,42 +33,34 @@ export const handler: ServerlessFunctionSignature return callback(null, response); } - const client = createDDBClient(context); + const db = createDynaBridgeClient(context); + const lock = await db.entities.lockStatus.findById(getLockStatusID(door)); - await client.send(getLockStatusCommand(door)) - .then(async (lock) => { - const isOpen = isLockOpen(lock); + const isOpen = isLockOpen(lock); - if (isOpen) { - const fingerprint = JSON.parse(lock?.Item?.fingerprint.S as string); + if (isOpen && lock) { + const fingerprint = JSON.parse(lock.fingerprint); - response - .setStatusCode(200) - .appendHeader('Content-Type', 'application/json') - .setBody({ - status: DoorStatus.OPEN, - fingerprint, - }); + response + .setStatusCode(200) + .appendHeader('Content-Type', 'application/json') + .setBody({ + status: DoorStatus.OPEN, + fingerprint, + }); - await client.send(clearLockStatusCommand(lock)); - return; - } - - response - .setStatusCode(200) - .appendHeader('Content-Type', 'application/json') - .setBody({ - status: DoorStatus.CLOSED, - }); - - }).catch((e) => { - console.log(e); - response - .setStatusCode(500) - .appendHeader('Content-Type', 'application/json') - .setBody({ err: e }); + await db.entities.lockStatus.deleteById(getLockStatusID(door)); + } else { + response + .setStatusCode(200) + .appendHeader('Content-Type', 'application/json') + .setBody({ + status: DoorStatus.CLOSED, }); + } - await client.destroy(); + // destroy the internal client after + // @ts-ignore + db.ddbClient.destroy(); return callback(null, response); };