72 lines
2.0 KiB
TypeScript
72 lines
2.0 KiB
TypeScript
import { and, eq } from "drizzle-orm";
|
|
import type { CircuitDeviceRowSnapshot } from "../../domain/models/circuit-device-row-structure-project-command.model.js";
|
|
import type { AppDatabase } from "../database-context.js";
|
|
import { circuitDeviceRows } from "../schema/circuit-device-rows.js";
|
|
import { projectDevices } from "../schema/project-devices.js";
|
|
import { rooms } from "../schema/rooms.js";
|
|
|
|
export function assertCircuitDeviceRowReferencesInProject(
|
|
database: AppDatabase,
|
|
projectId: string,
|
|
row: CircuitDeviceRowSnapshot
|
|
) {
|
|
if (row.linkedProjectDeviceId !== null) {
|
|
const device = database
|
|
.select({ id: projectDevices.id })
|
|
.from(projectDevices)
|
|
.where(
|
|
and(
|
|
eq(projectDevices.id, row.linkedProjectDeviceId),
|
|
eq(projectDevices.projectId, projectId)
|
|
)
|
|
)
|
|
.get();
|
|
if (!device) {
|
|
throw new Error("Invalid linked project device id.");
|
|
}
|
|
}
|
|
if (row.roomId !== null) {
|
|
const room = database
|
|
.select({ id: rooms.id })
|
|
.from(rooms)
|
|
.where(
|
|
and(
|
|
eq(rooms.id, row.roomId),
|
|
eq(rooms.projectId, projectId)
|
|
)
|
|
)
|
|
.get();
|
|
if (!room) {
|
|
throw new Error("Invalid room id.");
|
|
}
|
|
}
|
|
}
|
|
|
|
export function toCircuitDeviceRowSnapshot(
|
|
row: typeof circuitDeviceRows.$inferSelect
|
|
): CircuitDeviceRowSnapshot {
|
|
return {
|
|
id: row.id,
|
|
circuitId: row.circuitId,
|
|
linkedProjectDeviceId: row.linkedProjectDeviceId,
|
|
legacyConsumerId: row.legacyConsumerId,
|
|
sortOrder: row.sortOrder,
|
|
name: row.name,
|
|
displayName: row.displayName,
|
|
phaseType: row.phaseType,
|
|
connectionKind: row.connectionKind,
|
|
costGroup: row.costGroup,
|
|
category: row.category,
|
|
level: row.level,
|
|
roomId: row.roomId,
|
|
roomNumberSnapshot: row.roomNumberSnapshot,
|
|
roomNameSnapshot: row.roomNameSnapshot,
|
|
quantity: row.quantity,
|
|
powerPerUnit: row.powerPerUnit,
|
|
simultaneityFactor: row.simultaneityFactor,
|
|
cosPhi: row.cosPhi,
|
|
remark: row.remark,
|
|
overriddenFields: row.overriddenFields,
|
|
};
|
|
}
|