forked from jappel/leistungsbilanz-ts
136 lines
4.1 KiB
TypeScript
136 lines
4.1 KiB
TypeScript
import crypto from "node:crypto";
|
|
import { asc, eq, inArray } from "drizzle-orm";
|
|
import { db } from "../client.js";
|
|
import { circuitDeviceRows } from "../schema/circuit-device-rows.js";
|
|
|
|
export class CircuitDeviceRowRepository {
|
|
async findById(rowId: string) {
|
|
const [row] = await db.select().from(circuitDeviceRows).where(eq(circuitDeviceRows.id, rowId)).limit(1);
|
|
return row ?? null;
|
|
}
|
|
|
|
async countByCircuit(circuitId: string) {
|
|
const rows = await db.select({ id: circuitDeviceRows.id }).from(circuitDeviceRows).where(eq(circuitDeviceRows.circuitId, circuitId));
|
|
return rows.length;
|
|
}
|
|
|
|
async listByCircuitList(circuitIds: string[]) {
|
|
if (!circuitIds.length) {
|
|
return [];
|
|
}
|
|
return db
|
|
.select()
|
|
.from(circuitDeviceRows)
|
|
.where(inArray(circuitDeviceRows.circuitId, circuitIds))
|
|
.orderBy(asc(circuitDeviceRows.sortOrder));
|
|
}
|
|
|
|
async create(input: {
|
|
circuitId: string;
|
|
linkedProjectDeviceId?: string;
|
|
legacyConsumerId?: string;
|
|
sortOrder: number;
|
|
name: string;
|
|
displayName: string;
|
|
phaseType?: string;
|
|
connectionKind?: string;
|
|
costGroup?: string;
|
|
category?: string;
|
|
level?: string;
|
|
roomId?: string;
|
|
roomNumberSnapshot?: string;
|
|
roomNameSnapshot?: string;
|
|
quantity: number;
|
|
powerPerUnit: number;
|
|
simultaneityFactor: number;
|
|
cosPhi?: number;
|
|
remark?: string;
|
|
overriddenFields?: string;
|
|
}) {
|
|
const id = crypto.randomUUID();
|
|
await db.insert(circuitDeviceRows).values({
|
|
id,
|
|
circuitId: input.circuitId,
|
|
linkedProjectDeviceId: input.linkedProjectDeviceId ?? null,
|
|
legacyConsumerId: input.legacyConsumerId ?? null,
|
|
sortOrder: input.sortOrder,
|
|
name: input.name,
|
|
displayName: input.displayName,
|
|
phaseType: input.phaseType ?? null,
|
|
connectionKind: input.connectionKind ?? null,
|
|
costGroup: input.costGroup ?? null,
|
|
category: input.category ?? null,
|
|
level: input.level ?? null,
|
|
roomId: input.roomId ?? null,
|
|
roomNumberSnapshot: input.roomNumberSnapshot ?? null,
|
|
roomNameSnapshot: input.roomNameSnapshot ?? null,
|
|
quantity: input.quantity,
|
|
powerPerUnit: input.powerPerUnit,
|
|
simultaneityFactor: input.simultaneityFactor,
|
|
cosPhi: input.cosPhi ?? null,
|
|
remark: input.remark ?? null,
|
|
overriddenFields: input.overriddenFields ?? null,
|
|
});
|
|
return id;
|
|
}
|
|
|
|
async update(
|
|
rowId: string,
|
|
input: {
|
|
linkedProjectDeviceId?: string;
|
|
name: string;
|
|
displayName: string;
|
|
phaseType?: string;
|
|
connectionKind?: string;
|
|
costGroup?: string;
|
|
category?: string;
|
|
level?: string;
|
|
roomId?: string;
|
|
roomNumberSnapshot?: string;
|
|
roomNameSnapshot?: string;
|
|
quantity: number;
|
|
powerPerUnit: number;
|
|
simultaneityFactor: number;
|
|
cosPhi?: number;
|
|
remark?: string;
|
|
overriddenFields?: string;
|
|
}
|
|
) {
|
|
await db
|
|
.update(circuitDeviceRows)
|
|
.set({
|
|
linkedProjectDeviceId: input.linkedProjectDeviceId ?? null,
|
|
name: input.name,
|
|
displayName: input.displayName,
|
|
phaseType: input.phaseType ?? null,
|
|
connectionKind: input.connectionKind ?? null,
|
|
costGroup: input.costGroup ?? null,
|
|
category: input.category ?? null,
|
|
level: input.level ?? null,
|
|
roomId: input.roomId ?? null,
|
|
roomNumberSnapshot: input.roomNumberSnapshot ?? null,
|
|
roomNameSnapshot: input.roomNameSnapshot ?? null,
|
|
quantity: input.quantity,
|
|
powerPerUnit: input.powerPerUnit,
|
|
simultaneityFactor: input.simultaneityFactor,
|
|
cosPhi: input.cosPhi ?? null,
|
|
remark: input.remark ?? null,
|
|
overriddenFields: input.overriddenFields ?? null,
|
|
})
|
|
.where(eq(circuitDeviceRows.id, rowId));
|
|
}
|
|
|
|
async delete(rowId: string) {
|
|
await db.delete(circuitDeviceRows).where(eq(circuitDeviceRows.id, rowId));
|
|
}
|
|
|
|
async moveToCircuit(rowId: string, targetCircuitId: string, sortOrder: number) {
|
|
await db
|
|
.update(circuitDeviceRows)
|
|
.set({
|
|
circuitId: targetCircuitId,
|
|
sortOrder,
|
|
})
|
|
.where(eq(circuitDeviceRows.id, rowId));
|
|
}
|
|
}
|