Include components in project snapshots

This commit is contained in:
2026-07-30 19:24:28 +02:00
parent e7607c90c4
commit 012308984d
13 changed files with 915 additions and 46 deletions
@@ -9,8 +9,11 @@ import {
import type { AppDatabase } from "../database-context.js";
import { circuitDeviceRows } from "../schema/circuit-device-rows.js";
import { circuitLists } from "../schema/circuit-lists.js";
import { circuitProtectionDevices } from "../schema/circuit-protection-devices.js";
import { circuitSections } from "../schema/circuit-sections.js";
import { circuits } from "../schema/circuits.js";
import { distributionBoardComponentProtectionDevices } from "../schema/distribution-board-component-protection-devices.js";
import { distributionBoardComponents } from "../schema/distribution-board-components.js";
import { distributionBoards } from "../schema/distribution-boards.js";
import { floors } from "../schema/floors.js";
import { projectDevices } from "../schema/project-devices.js";
@@ -69,6 +72,8 @@ export function readProjectStateSnapshot(
displayName: circuitSections.displayName,
prefix: circuitSections.prefix,
sortOrder: circuitSections.sortOrder,
category: circuitSections.category,
groupNumber: circuitSections.groupNumber,
})
.from(circuitSections)
.innerJoin(
@@ -82,6 +87,56 @@ export function readProjectStateSnapshot(
asc(circuitSections.id)
)
.all();
const componentRows = database
.select({ component: distributionBoardComponents })
.from(distributionBoardComponents)
.innerJoin(
circuitLists,
eq(circuitLists.id, distributionBoardComponents.circuitListId)
)
.where(eq(circuitLists.projectId, projectId))
.orderBy(
asc(distributionBoardComponents.circuitListId),
asc(distributionBoardComponents.placement),
asc(distributionBoardComponents.sortOrder),
asc(distributionBoardComponents.id)
)
.all()
.map((row) => row.component);
const circuitProtectionRows = database
.select({ protection: circuitProtectionDevices })
.from(circuitProtectionDevices)
.innerJoin(
circuits,
eq(circuits.id, circuitProtectionDevices.circuitId)
)
.innerJoin(circuitLists, eq(circuitLists.id, circuits.circuitListId))
.where(eq(circuitLists.projectId, projectId))
.orderBy(asc(circuitProtectionDevices.circuitId))
.all()
.map((row) => row.protection);
const componentProtectionRows = database
.select({
protection: distributionBoardComponentProtectionDevices,
})
.from(distributionBoardComponentProtectionDevices)
.innerJoin(
distributionBoardComponents,
eq(
distributionBoardComponents.id,
distributionBoardComponentProtectionDevices.componentId
)
)
.innerJoin(
circuitLists,
eq(circuitLists.id, distributionBoardComponents.circuitListId)
)
.where(eq(circuitLists.projectId, projectId))
.orderBy(
asc(distributionBoardComponentProtectionDevices.componentId)
)
.all()
.map((row) => row.protection);
const circuitRows = database
.select({
id: circuits.id,
@@ -190,6 +245,10 @@ export function readProjectStateSnapshot(
distributionBoards: boardRows,
circuitLists: listRows,
circuitSections: sectionRows,
distributionBoardComponents: componentRows,
circuitProtectionDevices: circuitProtectionRows,
distributionBoardComponentProtectionDevices:
componentProtectionRows,
circuits: circuitRows.map((circuit) => ({
...circuit,
isReserve: Boolean(circuit.isReserve),