diff --git a/server/src/lib/wifiDevices.js b/server/src/lib/wifiDevices.js index 8eb76f1..10e6a00 100644 --- a/server/src/lib/wifiDevices.js +++ b/server/src/lib/wifiDevices.js @@ -31,6 +31,40 @@ async function setAllDevicesAsOffline() { }) } +async function updateDB(onlineDevices) { + for (const device of onlineDevices) { + if (!device.user) + await prisma.$executeRaw( + 'UPDATE "WifiDevice" SET "userId" = null WHERE mac = $1', + device.mac + ) + + const user = device.user + ? { connect: { sAMAccountName: device.user } } + : undefined + + try { + await prisma.wifiDevice.upsert({ + where: { mac: device.mac }, + create: { + ...device, + hostname: device.hostname || device.mac, + firstSeen: device.firstSeen || new Date(), + user + }, + update: { + ...device, + hostname: device.hostname || device.mac, + user + } + }) + } catch (e) { + if (!['P2016'].includes(e.code)) + console.log('[wifiDevice upsert error]', e) + } + } +} + async function updateDevicesInfo() { if (working) return -1 // Debounce updates @@ -41,37 +75,7 @@ async function updateDevicesInfo() { await setAllDevicesAsOffline() - for (const device of onlineDevices) { - if (!device.user) - await prisma.$executeRaw( - 'UPDATE "WifiDevice" SET "userId" = null WHERE mac = $1', - device.mac - ) - - const user = device.user - ? { connect: { sAMAccountName: device.user } } - : undefined - - try { - await prisma.wifiDevice.upsert({ - where: { mac: device.mac }, - create: { - ...device, - hostname: device.hostname || device.mac, - firstSeen: device.firstSeen || new Date(), - user - }, - update: { - ...device, - hostname: device.hostname || device.mac, - user - } - }) - } catch (e) { - if (!['P2016'].includes(e.code)) - console.log('[wifiDevice upsert error]', e) - } - } + await updateDB(onlineDevices) pubsub.publish(USER_PRESENCE_UPDATED, { userPresenceUpdated: onlineDevices.length