From ef22f2e4a5224bf9597413b8c19b78fbb3bc7574 Mon Sep 17 00:00:00 2001 From: Andrew Smith Date: Fri, 9 Dec 2022 09:24:28 -0500 Subject: [PATCH] guest registar debug --- apps/guest-registrar/src/index.ts | 4 ++++ apps/guest-registrar/src/redux/actionCreators.ts | 8 +++++++- apps/guest-registrar/src/redux/reducer.ts | 14 ++++++++++++-- apps/guest-registrar/src/redux/sagas/addGuest.ts | 5 +++-- .../redux/sagas/updateHomeAssistantWithGuests.ts | 4 +++- apps/guest-registrar/src/redux/types.ts | 15 +++++++++++++-- 6 files changed, 42 insertions(+), 8 deletions(-) diff --git a/apps/guest-registrar/src/index.ts b/apps/guest-registrar/src/index.ts index 8715a450d..6b188c9f0 100644 --- a/apps/guest-registrar/src/index.ts +++ b/apps/guest-registrar/src/index.ts @@ -22,6 +22,7 @@ async function run() { const mqtt = await createMqtt() const restartTopic = "homeassistant/restarted" const addGuestTopic = "homeassistant/group/guests/add" + const debugStateTopic = "guest-registrar/debug/state" mqtt.on("message", async (topic, payload) => { try { logger.info(`MQTT message recieved: ${topic}`) @@ -32,6 +33,9 @@ async function run() { case addGuestTopic: store.dispatch(addGuest(payload.toString())) break + case debugStateTopic: + logger.debug(JSON.stringify(store.getState(), null, 2)) + break default: } } catch (error) { diff --git a/apps/guest-registrar/src/redux/actionCreators.ts b/apps/guest-registrar/src/redux/actionCreators.ts index 29696c6f2..c8cb637e8 100644 --- a/apps/guest-registrar/src/redux/actionCreators.ts +++ b/apps/guest-registrar/src/redux/actionCreators.ts @@ -1,6 +1,7 @@ import type { AddGuestAction, UpdateHomeAssistantWithGuestsAction, + UpdateMacsAction, } from "./types" const addGuest = (mac: string): AddGuestAction => ({ @@ -13,4 +14,9 @@ const updateHomeAssistantWithGuests = type: "UPDATE_HOME_ASSISTANT_WITH_GUESTS", }) -export { addGuest, updateHomeAssistantWithGuests } +const updateMacs = (macs: string[]): UpdateMacsAction => ({ + type: "UPDATE_MACS", + payload: macs, +}) + +export { addGuest, updateHomeAssistantWithGuests, updateMacs } diff --git a/apps/guest-registrar/src/redux/reducer.ts b/apps/guest-registrar/src/redux/reducer.ts index 7faba1cc6..d98c768ad 100644 --- a/apps/guest-registrar/src/redux/reducer.ts +++ b/apps/guest-registrar/src/redux/reducer.ts @@ -1,8 +1,18 @@ import type { AnyAction, State } from "./types" +import { merge, uniq } from "lodash" -const defaultState: State = {} +const defaultState: State = { macs: [] } -const reducer = (state = defaultState, action: AnyAction) => state +const reducer = (state = defaultState, action: AnyAction) => { + switch (action.type) { + case "UPDATE_MACS": + const newState: State = merge({}, state) + newState.macs = uniq(newState.macs.concat(action.payload)) + return newState + default: + return state + } +} export default reducer export { defaultState } diff --git a/apps/guest-registrar/src/redux/sagas/addGuest.ts b/apps/guest-registrar/src/redux/sagas/addGuest.ts index 8758485d6..6a5320294 100644 --- a/apps/guest-registrar/src/redux/sagas/addGuest.ts +++ b/apps/guest-registrar/src/redux/sagas/addGuest.ts @@ -1,9 +1,8 @@ import { createLogger } from "@ha/logger" -import { call } from "redux-saga/effects" +import { call, put } from "redux-saga/effects" import { MongoClient, Db, - WithId, Filter, Document, UpdateResult, @@ -11,6 +10,7 @@ import { } from "mongodb" import getMongoDbClient from "../../dbClient" import { AddGuestAction } from "../types" +import { updateMacs } from "../actionCreators" const logger = createLogger() @@ -27,6 +27,7 @@ function* addGuest(action: AddGuestAction) { options: UpdateOptions, ) => Promise >(collection.updateOne, {}, { mac: action.payload.mac }, { upsert: true }) + yield put(updateMacs([action.payload.mac])) } catch (error) { logger.error(error) } diff --git a/apps/guest-registrar/src/redux/sagas/updateHomeAssistantWithGuests.ts b/apps/guest-registrar/src/redux/sagas/updateHomeAssistantWithGuests.ts index 837cd7b09..d32f57a95 100644 --- a/apps/guest-registrar/src/redux/sagas/updateHomeAssistantWithGuests.ts +++ b/apps/guest-registrar/src/redux/sagas/updateHomeAssistantWithGuests.ts @@ -1,10 +1,11 @@ import type { AsyncMqttClient, IPublishPacket } from "@ha/mqtt-client" import { createLogger } from "@ha/logger" -import { call } from "redux-saga/effects" +import { call, put } from "redux-saga/effects" import { MongoClient, Db, WithId, Document } from "mongodb" import { createMqtt } from "@ha/mqtt-client" import getMongoDbClient from "../../dbClient" import { AddGuestAction } from "../types" +import { updateMacs } from "../actionCreators" const logger = createLogger() @@ -33,6 +34,7 @@ function* updateHomeAssistantWithGuests(action: AddGuestAction) { qos: 1, }) } + yield put(updateMacs(macs)) } catch (error) { logger.error(error) } diff --git a/apps/guest-registrar/src/redux/types.ts b/apps/guest-registrar/src/redux/types.ts index 5afc2a711..c0d88e888 100644 --- a/apps/guest-registrar/src/redux/types.ts +++ b/apps/guest-registrar/src/redux/types.ts @@ -1,4 +1,6 @@ -type State = {} +type State = { + macs: string[] +} type AddGuestAction = { type: "ADD_GUEST" @@ -11,11 +13,20 @@ type UpdateHomeAssistantWithGuestsAction = { type: "UPDATE_HOME_ASSISTANT_WITH_GUESTS" } -type AnyAction = AddGuestAction | UpdateHomeAssistantWithGuestsAction +type UpdateMacsAction = { + type: "UPDATE_MACS" + payload: string[] +} + +type AnyAction = + | AddGuestAction + | UpdateHomeAssistantWithGuestsAction + | UpdateMacsAction export type { AnyAction, AddGuestAction, State, UpdateHomeAssistantWithGuestsAction, + UpdateMacsAction, }