From 1de23d3ed8cb6c561cb49fb225c7410dcdd270d9 Mon Sep 17 00:00:00 2001 From: Matthew Holder Date: Mon, 18 Nov 2024 20:50:26 -0600 Subject: [PATCH] Renamed all back-end switch references to device where possible --- src/main/dao/{switches.ts => devices.ts} | 22 ++++++++--------- src/main/dao/ties.ts | 2 +- src/main/routes/data/devices.ts | 22 +++++++++++++++++ src/main/routes/data/sources.ts | 2 -- src/main/routes/data/switches.ts | 24 ------------------- src/main/routes/data/ties.ts | 4 +--- src/main/routes/router.ts | 4 ++-- src/preload/api.d.ts | 2 +- src/renderer/hooks/location.ts | 4 ++-- src/renderer/modals/SwitchDialog.vue | 8 +++---- src/renderer/pages/SourcePage.vue | 4 ++-- src/renderer/pages/SwitchList.vue | 8 +++---- src/renderer/services/backup/import.ts | 4 ++-- src/renderer/services/switches.ts | 22 ++++++++--------- src/renderer/services/ties.ts | 2 +- .../dao/{switches.test.ts => devices.test.ts} | 10 ++++---- src/tests/seeds/database.seed.ts | 8 +++---- 17 files changed, 73 insertions(+), 79 deletions(-) rename src/main/dao/{switches.ts => devices.ts} (53%) create mode 100644 src/main/routes/data/devices.ts delete mode 100644 src/main/routes/data/switches.ts rename src/tests/main/dao/{switches.test.ts => devices.test.ts} (91%) diff --git a/src/main/dao/switches.ts b/src/main/dao/devices.ts similarity index 53% rename from src/main/dao/switches.ts rename to src/main/dao/devices.ts index 52a84a9..412cee6 100644 --- a/src/main/dao/switches.ts +++ b/src/main/dao/devices.ts @@ -4,21 +4,21 @@ import { Database, DocumentId, inferDocumentOf, inferNewDocumentOf, inferUpdates import useTiesDatabase from './ties' import type { RevisionId } from '../services/database' -export const SwitchModel = z.object({ +export const DeviceModel = z.object({ driverId: DocumentId, title: z.string().min(1), path: z.string().min(1) }) -const useSwitchesDatabase = memo( +const useDevicesDatabase = memo( () => - new (class extends Database.of('switches', SwitchModel) { + new (class extends Database.of('switches', DeviceModel) { readonly #ties = useTiesDatabase() override async remove(id: DocumentId, rev?: RevisionId) { await super.remove(id, rev) - const related = await this.#ties.forSwitch(id) + const related = await this.#ties.forDevice(id) await Promise.all( related.map(async ({ _id, _rev }) => { await this.#ties.remove(_id, _rev) @@ -28,11 +28,11 @@ const useSwitchesDatabase = memo( })() ) -export type Switch = inferDocumentOf -export const Switch = inferDocumentOf(SwitchModel) -export type NewSwitch = inferNewDocumentOf -export const NewSwitch = inferNewDocumentOf(SwitchModel) -export type SwitchUpdate = inferUpdatesOf -export const SwitchUpdate = inferUpdatesOf(SwitchModel) +export type Device = inferDocumentOf +export const Device = inferDocumentOf(DeviceModel) +export type NewDevice = inferNewDocumentOf +export const NewDevice = inferNewDocumentOf(DeviceModel) +export type DeviceUpdate = inferUpdatesOf +export const DeviceUpdate = inferUpdatesOf(DeviceModel) -export default useSwitchesDatabase +export default useDevicesDatabase diff --git a/src/main/dao/ties.ts b/src/main/dao/ties.ts index 6d48f20..bf75b20 100644 --- a/src/main/dao/ties.ts +++ b/src/main/dao/ties.ts @@ -17,7 +17,7 @@ const indices = { sourceId: ['sourceId'], switchId: ['switchId'] } const useTiesDatabase = memo( () => new (class extends Database.of('ties', TieModel, indices) { - async forSwitch(switchId: DocumentId) { + async forDevice(switchId: DocumentId) { return await this.run( async (db) => await db diff --git a/src/main/routes/data/devices.ts b/src/main/routes/data/devices.ts new file mode 100644 index 0000000..2b5e9d2 --- /dev/null +++ b/src/main/routes/data/devices.ts @@ -0,0 +1,22 @@ +import useDevicesDatabase, { NewDevice, DeviceUpdate } from '../../dao/devices' +import { DocumentId } from '../../services/database' +import { procedure, router } from '../../services/rpc/trpc' + +export default function useDevicesRouter() { + const devices = useDevicesDatabase() + return router({ + compact: procedure.mutation(async () => { + await devices.compact() + }), + all: procedure.query(async () => await devices.all()), + get: procedure.input(DocumentId).query(async ({ input }) => await devices.get(input)), + add: procedure.input(NewDevice).mutation(async ({ input }) => await devices.add(input)), + update: procedure.input(DeviceUpdate).mutation(async ({ input }) => await devices.update(input)), + remove: procedure.input(DocumentId).mutation(async ({ input }) => { + await devices.remove(input) + }), + clear: procedure.mutation(async () => { + await devices.clear() + }) + }) +} diff --git a/src/main/routes/data/sources.ts b/src/main/routes/data/sources.ts index 956a079..87db9ae 100644 --- a/src/main/routes/data/sources.ts +++ b/src/main/routes/data/sources.ts @@ -4,8 +4,6 @@ import { DocumentId } from '../../services/database' import { procedure, router } from '../../services/rpc/trpc' import { Attachment } from '@/attachments' -export type { Source, NewSource, SourceUpdate } from '../../dao/sources' - const InsertInputs = z.tuple([NewSource]).rest(z.instanceof(Attachment)) const UpdateInputs = z.tuple([SourceUpdate]).rest(z.instanceof(Attachment)) diff --git a/src/main/routes/data/switches.ts b/src/main/routes/data/switches.ts deleted file mode 100644 index 9bbbb31..0000000 --- a/src/main/routes/data/switches.ts +++ /dev/null @@ -1,24 +0,0 @@ -import useSwitchesDatabase, { NewSwitch, SwitchUpdate } from '../../dao/switches' -import { DocumentId } from '../../services/database' -import { procedure, router } from '../../services/rpc/trpc' - -export { Switch, NewSwitch, SwitchUpdate } from '../../dao/switches' - -export default function useSourcesRouter() { - const switches = useSwitchesDatabase() - return router({ - compact: procedure.mutation(async () => { - await switches.compact() - }), - all: procedure.query(async () => await switches.all()), - get: procedure.input(DocumentId).query(async ({ input }) => await switches.get(input)), - add: procedure.input(NewSwitch).mutation(async ({ input }) => await switches.add(input)), - update: procedure.input(SwitchUpdate).mutation(async ({ input }) => await switches.update(input)), - remove: procedure.input(DocumentId).mutation(async ({ input }) => { - await switches.remove(input) - }), - clear: procedure.mutation(async () => { - await switches.clear() - }) - }) -} diff --git a/src/main/routes/data/ties.ts b/src/main/routes/data/ties.ts index 6532dbc..32087b0 100644 --- a/src/main/routes/data/ties.ts +++ b/src/main/routes/data/ties.ts @@ -2,8 +2,6 @@ import useTiesDatabase, { NewTie, TieUpdate } from '../../dao/ties' import { DocumentId } from '../../services/database' import { procedure, router } from '../../services/rpc/trpc' -export type { Tie, NewTie, TieUpdate } from '../../dao/ties' - export default function useTiesRouter() { const ties = useTiesDatabase() return router({ @@ -20,7 +18,7 @@ export default function useTiesRouter() { clear: procedure.mutation(async () => { await ties.clear() }), - forSwitch: procedure.input(DocumentId).query(async ({ input }) => await ties.forSwitch(input)), + forDevice: procedure.input(DocumentId).query(async ({ input }) => await ties.forDevice(input)), forSource: procedure.input(DocumentId).query(async ({ input }) => await ties.forSource(input)) }) } diff --git a/src/main/routes/router.ts b/src/main/routes/router.ts index 28ac076..decf9db 100644 --- a/src/main/routes/router.ts +++ b/src/main/routes/router.ts @@ -2,9 +2,9 @@ import { memo } from 'radash' import useAppInfo from '../services/app' import { procedure, router } from '../services/rpc/trpc' import useUserInfo from '../services/user' +import useDevicesRouter from './data/devices' import useSourcesRouter from './data/sources' import useUserStoreRouter from './data/storage' -import useSwitchesRouter from './data/switches' import useTiesRouter from './data/ties' import useDriversRouter from './drivers' import useSerialPortRouter from './ports' @@ -25,7 +25,7 @@ export const useAppRouter = memo(() => // Data service routes storage: useUserStoreRouter(), ties: useTiesRouter(), - switches: useSwitchesRouter(), + devices: useDevicesRouter(), sources: useSourcesRouter(), updates: useUpdaterRouter() }) diff --git a/src/preload/api.d.ts b/src/preload/api.d.ts index b54c1ec..c0bb1a3 100644 --- a/src/preload/api.d.ts +++ b/src/preload/api.d.ts @@ -14,7 +14,7 @@ export type { PortEntry } from '../main/services/ports' export type { UpdateInfo, ProgressInfo } from '../main/services/updater' export type { Source, NewSource, SourceUpdate } from '../main/dao/sources' -export type { Switch, NewSwitch, SwitchUpdate } from '../main/dao/switches' +export type { Device, NewDevice, DeviceUpdate } from '../main/dao/devices' export type { Tie, NewTie, TieUpdate } from '../main/dao/ties' export type { ApiLocales } from '../main/locale' diff --git a/src/renderer/hooks/location.ts b/src/renderer/hooks/location.ts index 054ba1a..b49c4d9 100644 --- a/src/renderer/hooks/location.ts +++ b/src/renderer/hooks/location.ts @@ -3,7 +3,7 @@ import { toValue, computed, readonly } from 'vue' import { useI18n } from 'vue-i18n' import type { I18nSchema } from '../locales/locales' import type { PortEntry } from '../services/ports' -import type { NewSwitch } from '../services/switches' +import type { NewDevice } from '../services/switches' import type { LocationType } from '@/location' import type { MessageProps } from '@vuelidate/validators' import type { MaybeRefOrGetter, Ref } from 'vue' @@ -102,7 +102,7 @@ export function useLocation(location: Ref, validSwitches: Ma } export const useSwitchLocation = ( - switcher: MaybeRefOrGetter, + switcher: MaybeRefOrGetter, validSwitches: MaybeRefOrGetter ) => { const location = computed({ diff --git a/src/renderer/modals/SwitchDialog.vue b/src/renderer/modals/SwitchDialog.vue index b4203ba..707a884 100644 --- a/src/renderer/modals/SwitchDialog.vue +++ b/src/renderer/modals/SwitchDialog.vue @@ -10,7 +10,7 @@ import useDrivers from '../services/driver' import usePorts from '../services/ports' import { useDialogs, useSwitchDialog } from './dialogs' import type { I18nSchema } from '../locales/locales' -import type { NewSwitch } from '../services/switches' +import type { NewDevice } from '../services/switches' import type { DeepReadonly } from 'vue' const props = defineProps<{ @@ -19,12 +19,12 @@ const props = defineProps<{ visible?: boolean // Form editing: boolean - switch: DeepReadonly + switch: DeepReadonly }>() const emit = defineEmits<{ (on: 'update:visible', value: boolean): void - (on: 'confirm', value: NewSwitch): void + (on: 'confirm', value: NewDevice): void }>() const { t } = useI18n() @@ -39,7 +39,7 @@ const ports = usePorts() onBeforeMount(ports.all) // eslint-disable-next-line vue/no-setup-props-reactivity-loss -- Prop reactivity not desired. -const target = ref(structuredClone(props.switch)) +const target = ref(structuredClone(props.switch)) const location = computed({ get: () => v$.path.$model, set: (v) => { diff --git a/src/renderer/pages/SourcePage.vue b/src/renderer/pages/SourcePage.vue index 88b44c7..018af89 100644 --- a/src/renderer/pages/SourcePage.vue +++ b/src/renderer/pages/SourcePage.vue @@ -19,7 +19,7 @@ import type { I18nSchema } from '../locales/locales' import type { DriverInformation } from '../services/driver' import type { Source } from '../services/sources' import type { DocumentId } from '../services/store' -import type { Switch } from '../services/switches' +import type { Device } from '../services/switches' import type { NewTie, Tie } from '../services/ties' import type { DeepReadonly } from 'vue' import { isNotNullish } from '@/basics' @@ -89,7 +89,7 @@ onBeforeMount(loadSource) // interface TieEntry { - switch: DeepReadonly + switch: DeepReadonly driver: DriverInformation tie: DeepReadonly } diff --git a/src/renderer/pages/SwitchList.vue b/src/renderer/pages/SwitchList.vue index 910aa54..567fbcd 100644 --- a/src/renderer/pages/SwitchList.vue +++ b/src/renderer/pages/SwitchList.vue @@ -11,7 +11,7 @@ import useDrivers from '../services/driver' import { useSwitches } from '../services/switches' import type { I18nSchema } from '../locales/locales' import type { DriverInformation } from '../services/driver' -import type { NewSwitch, Switch } from '../services/switches' +import type { NewDevice, Device } from '../services/switches' import type { DeepReadonly } from 'vue' import { isNotNullish } from '@/basics' @@ -22,7 +22,7 @@ const dialogs = useDialogs() const { t } = useI18n() interface Item { - switch: DeepReadonly + switch: DeepReadonly driver: DriverInformation } @@ -45,7 +45,7 @@ const refresh = useGuardedAsyncOp(async () => { onMounted(refresh) -async function addSwitch(target: NewSwitch) { +async function addSwitch(target: NewDevice) { try { await switches.add(target) } catch (e) { @@ -54,7 +54,7 @@ async function addSwitch(target: NewSwitch) { } } -async function updateSwitch(target: Switch, changes: NewSwitch) { +async function updateSwitch(target: Device, changes: NewDevice) { try { await switches.update({ ...target, ...changes }) } catch (e) { diff --git a/src/renderer/services/backup/import.ts b/src/renderer/services/backup/import.ts index 9346777..ed1ccd7 100644 --- a/src/renderer/services/backup/import.ts +++ b/src/renderer/services/backup/import.ts @@ -98,12 +98,12 @@ export async function importSettings(file: File) { const switchItem = switches.items.find((s) => s._id === item.switchId) // Non-fatally skip ties that reference missing switches or sources. if (sourceItem == null) { - console.warn(`Switch for tie no longer present; ${item.sourceId}`) + console.warn(`Source for tie no longer present; ${item.sourceId}`) return } if (switchItem == null) { - console.warn(`Switch for tie no longer present; ${item.switchId}`) + console.warn(`Device for tie no longer present; ${item.switchId}`) return } diff --git a/src/renderer/services/switches.ts b/src/renderer/services/switches.ts index 6b968a0..f99adcc 100644 --- a/src/renderer/services/switches.ts +++ b/src/renderer/services/switches.ts @@ -3,15 +3,15 @@ import { forceUndefined } from '../hooks/utilities' import { useClient } from './rpc/trpc' import { useDataStore } from './store' import type { DocumentId } from './store' -import type { NewSwitch, Switch, SwitchUpdate } from '../../preload/api' +import type { NewDevice, Device, DeviceUpdate } from '../../preload/api' -export type { NewSwitch, Switch, SwitchUpdate } from '../../preload/api' +export type { NewDevice, Device, DeviceUpdate } from '../../preload/api' export const useSwitches = defineStore('switches', function defineSwitches() { - const { switches } = useClient() - const store = useDataStore() + const { devices } = useClient() + const store = useDataStore() - function blank(): NewSwitch { + function blank(): NewDevice { return { driverId: forceUndefined(), title: forceUndefined(), @@ -20,19 +20,19 @@ export const useSwitches = defineStore('switches', function defineSwitches() { } const compact = store.defineOperation(async () => { - await switches.compact.mutate() + await devices.compact.mutate() }) - const all = store.defineFetchMany(async () => await switches.all.query()) + const all = store.defineFetchMany(async () => await devices.all.query()) - const get = store.defineFetch(async (id: DocumentId) => await switches.get.query(id)) + const get = store.defineFetch(async (id: DocumentId) => await devices.get.query(id)) - const add = store.defineInsertion(async (document: NewSwitch) => await switches.add.mutate(document)) + const add = store.defineInsertion(async (document: NewDevice) => await devices.add.mutate(document)) - const update = store.defineMutation(async (document: SwitchUpdate) => await switches.update.mutate(document)) + const update = store.defineMutation(async (document: DeviceUpdate) => await devices.update.mutate(document)) const remove = store.defineRemoval(async (id: DocumentId) => { - await switches.remove.mutate(id) + await devices.remove.mutate(id) return id }) diff --git a/src/renderer/services/ties.ts b/src/renderer/services/ties.ts index d9b8a8f..15deaab 100644 --- a/src/renderer/services/ties.ts +++ b/src/renderer/services/ties.ts @@ -40,7 +40,7 @@ export const useTies = defineStore('ties', function defineTies() { return id }) - const forSwitch = store.defineFetchMany(async (id: DocumentId) => await ties.forSwitch.query(id)) + const forSwitch = store.defineFetchMany(async (id: DocumentId) => await ties.forDevice.query(id)) const forSource = store.defineFetchMany(async (id: DocumentId) => await ties.forSource.query(id)) diff --git a/src/tests/main/dao/switches.test.ts b/src/tests/main/dao/devices.test.ts similarity index 91% rename from src/tests/main/dao/switches.test.ts rename to src/tests/main/dao/devices.test.ts index de69034..03273bc 100644 --- a/src/tests/main/dao/switches.test.ts +++ b/src/tests/main/dao/devices.test.ts @@ -1,8 +1,8 @@ import { beforeAll, beforeEach, describe, expect, test, vi } from 'vitest' -import useSwitchesDatabase from '../../../main/dao/switches' +import useDevicesDatabase from '../../../main/dao/devices' import useTiesDatabase from '../../../main/dao/ties' import { seedDatabase } from '../../seeds/database.seed' -import type { NewSwitch } from '../../../main/dao/switches' +import type { NewDevice } from '../../../main/dao/devices' import { Attachment } from '@/attachments' const mock = await vi.hoisted(async () => await import('../../support/mock')) @@ -13,12 +13,12 @@ beforeAll(() => { }) let database: Awaited> -let switchesDao: ReturnType +let switchesDao: ReturnType let tiesDao: ReturnType beforeEach(async () => { database = await seedDatabase() - switchesDao = useSwitchesDatabase() + switchesDao = useDevicesDatabase() tiesDao = useTiesDatabase() }) @@ -46,7 +46,7 @@ const kRevPattern = /^[0-9]-[0-9a-f]{32}$/u test('adding', async () => { const file = new File([Buffer.from('hello')], 'hello.txt', { type: 'text/plain' }) const attachment = await Attachment.fromFile(file) - const raw = { title: 'Extron', driverId: database.extronSis.guid, path: 'ip:192.168.10.2' } satisfies NewSwitch + const raw = { title: 'Extron', driverId: database.extronSis.guid, path: 'ip:192.168.10.2' } satisfies NewDevice const doc = await switchesDao.add(raw, attachment) expect(doc._id).toMatch(kUuidPattern) diff --git a/src/tests/seeds/database.seed.ts b/src/tests/seeds/database.seed.ts index bd4ee4e..90fa402 100644 --- a/src/tests/seeds/database.seed.ts +++ b/src/tests/seeds/database.seed.ts @@ -1,16 +1,16 @@ import { alphabetical, map } from 'radash' +import useDevicesDatabase from '../../main/dao/devices' import useSourcesDatabase from '../../main/dao/sources' -import useSwitchesDatabase from '../../main/dao/switches' import useTiesDatabase from '../../main/dao/ties' import useDrivers from '../../main/services/drivers' +import type { Device } from '../../main/dao/devices' import type { Source } from '../../main/dao/sources' -import type { Switch } from '../../main/dao/switches' import type { Tie } from '../../main/dao/ties' import { Attachment } from '@/attachments' import { raiseError } from '@/error-handling' export async function seedDatabase() { - const switchDao = useSwitchesDatabase() + const switchDao = useDevicesDatabase() const sourceDao = useSourcesDatabase() const tieDao = useTiesDatabase() @@ -33,7 +33,7 @@ export async function seedDatabase() { { title: 'Sony BVM24D', driverId: sonyRemote.guid, path: 'port:/dev/ttys1' } ], async (doc) => await switchDao.add(doc) - )) as [Switch, Switch, Switch] + )) as [Device, Device, Device] const file = new File([Buffer.from('test')], 'test.txt', { type: 'text/plain' }) const image = await Attachment.fromFile(file)