migrate door alias
This commit is contained in:
parent
73e98c0508
commit
9f1a05acf8
@ -6,8 +6,8 @@ import { ServerlessEventObject, ServerlessFunctionSignature } from "@twilio-labs
|
|||||||
import { TwilioContext } from "../../../types/TwilioContext";
|
import { TwilioContext } from "../../../types/TwilioContext";
|
||||||
import { createDDBClient, createDynaBridgeClient, ddbItemToJSON, getDoorAliasCommand, getDoorConfigCommand, getLockStatusCommand, isLockOpen } from "../../../utils/ddb";
|
import { createDDBClient, createDynaBridgeClient, ddbItemToJSON, getDoorAliasCommand, getDoorConfigCommand, getLockStatusCommand, isLockOpen } from "../../../utils/ddb";
|
||||||
import { DoorStatus } from "../../../types/DoorStatus";
|
import { DoorStatus } from "../../../types/DoorStatus";
|
||||||
import { DoorConfig } from "../../../types/DoorConfig";
|
import { getDoorConfigID } from "../../../schema/DoorConfig";
|
||||||
import { DOOR_CONFIG_SK, getDoorConfigID } from "../../../schema/DoorConfig";
|
import { getDoorAliasID } from "../../../schema/DoorAlias";
|
||||||
|
|
||||||
export interface InfoRequest extends ServerlessEventObject {
|
export interface InfoRequest extends ServerlessEventObject {
|
||||||
door?: string;
|
door?: string;
|
||||||
@ -42,16 +42,16 @@ export const handler: ServerlessFunctionSignature<TwilioContext, InfoRequest> =
|
|||||||
const db = createDynaBridgeClient(context);
|
const db = createDynaBridgeClient(context);
|
||||||
|
|
||||||
if (buzzer) {
|
if (buzzer) {
|
||||||
door = await client.send(getDoorAliasCommand(buzzer))
|
door = await db.entities.doorAlias.findById(getDoorAliasID(buzzer))
|
||||||
.then(async (alias) => {
|
.then(async (alias) => {
|
||||||
if (!alias.Item) {
|
if (!alias) {
|
||||||
response
|
response
|
||||||
.setStatusCode(404)
|
.setStatusCode(404)
|
||||||
.appendHeader('Content-Type', 'application/json')
|
.appendHeader('Content-Type', 'application/json')
|
||||||
.setBody({ err: "This buzzer is not registered" });
|
.setBody({ err: "This buzzer is not registered" });
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
return alias.Item.name.S;
|
return alias.name;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ export const handler: ServerlessFunctionSignature<TwilioContext, InfoRequest> =
|
|||||||
door,
|
door,
|
||||||
fallbackNumbers: config.fallbackNumbers,
|
fallbackNumbers: config.fallbackNumbers,
|
||||||
pressKey: config.pressKey,
|
pressKey: config.pressKey,
|
||||||
discordUsers: config.discordUsers || [],
|
discordUsers: config.discordUsers,
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
await client.send(getLockStatusCommand(door))
|
await client.send(getLockStatusCommand(door))
|
||||||
@ -93,7 +93,7 @@ export const handler: ServerlessFunctionSignature<TwilioContext, InfoRequest> =
|
|||||||
buzzerCode: config.buzzerCode,
|
buzzerCode: config.buzzerCode,
|
||||||
fallbackNumbers: config.fallbackNumbers,
|
fallbackNumbers: config.fallbackNumbers,
|
||||||
pressKey: config.pressKey,
|
pressKey: config.pressKey,
|
||||||
discordUsers: config.discordUsers || [],
|
discordUsers: config.discordUsers,
|
||||||
greeting: config.greeting || "",
|
greeting: config.greeting || "",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
22
packages/doorman-api/src/schema/DoorAlias.ts
Normal file
22
packages/doorman-api/src/schema/DoorAlias.ts
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import { z } from "zod";
|
||||||
|
import { DynaBridge, DynaBridgeEntity } from 'dynabridge';
|
||||||
|
|
||||||
|
export const DOOR_ALIAS_SK = "alias";
|
||||||
|
|
||||||
|
export const DoorAliasSchema = z.object({
|
||||||
|
// keys
|
||||||
|
PK: z.string(), // phone number (buzzer number)
|
||||||
|
SK: z.literal(DOOR_ALIAS_SK).default(DOOR_ALIAS_SK),
|
||||||
|
name: z.string(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const getDoorAliasID = (buzzer: string): string[] => {
|
||||||
|
return [buzzer, DOOR_ALIAS_SK];
|
||||||
|
}
|
||||||
|
|
||||||
|
export type DoorAlias = z.infer<typeof DoorAliasSchema>;
|
||||||
|
|
||||||
|
export const DoorAliasEntity: DynaBridgeEntity<DoorAlias> = {
|
||||||
|
tableName: "doorman",
|
||||||
|
id: ["PK", "SK"],
|
||||||
|
};
|
||||||
@ -15,7 +15,7 @@ export const DoorConfigSchema = z.object({
|
|||||||
fallbackNumbers: z.array(z.string()),
|
fallbackNumbers: z.array(z.string()),
|
||||||
pin: z.string(),
|
pin: z.string(),
|
||||||
pressKey: z.string(),
|
pressKey: z.string(),
|
||||||
greeting: z.string(),
|
greeting: z.string().optional(),
|
||||||
timeout: z.number(),
|
timeout: z.number(),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import { TwilioContext } from "../types/TwilioContext";
|
|||||||
import { DoorConfig } from "../types/DoorConfig";
|
import { DoorConfig } from "../types/DoorConfig";
|
||||||
import { DynaBridge } from "dynabridge";
|
import { DynaBridge } from "dynabridge";
|
||||||
import { DoorConfigEntity, EditDoorConfigEntity } from "../schema/DoorConfig";
|
import { DoorConfigEntity, EditDoorConfigEntity } from "../schema/DoorConfig";
|
||||||
|
import { DoorAliasEntity } from "../schema/DoorAlias";
|
||||||
|
|
||||||
export const createDDBClient = (context: TwilioContext) => {
|
export const createDDBClient = (context: TwilioContext) => {
|
||||||
return new DynamoDBClient({
|
return new DynamoDBClient({
|
||||||
@ -20,6 +21,7 @@ export const createDynaBridgeClient = (context: TwilioContext) => {
|
|||||||
return new DynaBridge({
|
return new DynaBridge({
|
||||||
doorConfig: DoorConfigEntity,
|
doorConfig: DoorConfigEntity,
|
||||||
editDoorConfig: EditDoorConfigEntity,
|
editDoorConfig: EditDoorConfigEntity,
|
||||||
|
doorAlias: DoorAliasEntity,
|
||||||
}, {
|
}, {
|
||||||
serialize: (entity) => entity,
|
serialize: (entity) => entity,
|
||||||
deserialize: (entity) => {
|
deserialize: (entity) => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user