import { eq } from "drizzle-orm"; import { db } from "@/lib/db/client"; import { devices, type DeviceCapabilities } from "@/lib/db/schema"; export async function listDevices() { return db.select().from(devices).orderBy(devices.lastConnectedAt); } export async function getDevice(id: number) { const [row] = await db.select().from(devices).where(eq(devices.id, id)); return row; } /** Upserts by advertised BLE name - the only stable-ish identity Web Bluetooth exposes. */ export async function upsertDeviceByBleName(input: { bleName: string; deviceClass?: string | null; capabilities?: DeviceCapabilities; }): Promise { const now = Date.now(); const [existing] = await db.select().from(devices).where(eq(devices.bleName, input.bleName)); if (existing) { const [updated] = await db .update(devices) .set({ lastConnectedAt: now, deviceClass: input.deviceClass ?? existing.deviceClass, capabilities: input.capabilities ?? existing.capabilities, }) .where(eq(devices.id, existing.id)) .returning(); return updated; } const [created] = await db .insert(devices) .values({ bleName: input.bleName, deviceClass: input.deviceClass, capabilities: input.capabilities, createdAt: now, lastConnectedAt: now, }) .returning(); return created; } export async function renameDevice(id: number, displayName: string) { const [updated] = await db.update(devices).set({ displayName }).where(eq(devices.id, id)).returning(); return updated; }