import crypto from "node:crypto"; import { eq } from "drizzle-orm"; import type { AppDatabase } from "../database-context.js"; import { globalDevices } from "../schema/global-devices.js"; import type { CreateGlobalDeviceInput, UpdateGlobalDeviceInput, } from "../../shared/validation/global-device.schemas.js"; export class GlobalDeviceRepository { constructor(private readonly database: AppDatabase) {} async list() { const db = this.database; return db.select().from(globalDevices); } async create(input: CreateGlobalDeviceInput) { const db = this.database; const id = crypto.randomUUID(); await db.insert(globalDevices).values({ id, name: input.name, displayName: input.displayName, category: input.category ?? null, quantity: input.quantity, installedPowerPerUnitKw: input.installedPowerPerUnitKw, demandFactor: input.demandFactor, voltageV: null, phaseCount: input.phaseCount, powerFactor: input.powerFactor ?? null, note: input.note ?? null, }); return { id, ...input }; } async update(globalDeviceId: string, input: UpdateGlobalDeviceInput) { const db = this.database; await db .update(globalDevices) .set({ name: input.name, displayName: input.displayName, category: input.category ?? null, quantity: input.quantity, installedPowerPerUnitKw: input.installedPowerPerUnitKw, demandFactor: input.demandFactor, voltageV: null, phaseCount: input.phaseCount, powerFactor: input.powerFactor ?? null, note: input.note ?? null, }) .where(eq(globalDevices.id, globalDeviceId)); } async findById(globalDeviceId: string) { const db = this.database; const [row] = await db.select().from(globalDevices).where(eq(globalDevices.id, globalDeviceId)).limit(1); return row ?? null; } async delete(globalDeviceId: string) { const db = this.database; await db.delete(globalDevices).where(eq(globalDevices.id, globalDeviceId)); } }