migrate status route

This commit is contained in:
Martin Dimitrov 2025-05-31 15:17:44 -07:00
parent 154ca3aec0
commit ca2cd5286f

View File

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