Align project devices with circuit model

This commit is contained in:
2026-07-22 19:31:08 +02:00
parent 689cfd3c65
commit 9d07ed9856
16 changed files with 301 additions and 106 deletions
@@ -1,6 +1,5 @@
import type { Request, Response } from "express";
import { GlobalDeviceRepository } from "../../db/repositories/global-device.repository.js";
import { ConsumerRepository } from "../../db/repositories/consumer.repository.js";
import { ProjectDeviceRepository } from "../../db/repositories/project-device.repository.js";
import {
createProjectDeviceSchema,
@@ -8,7 +7,6 @@ import {
} from "../../shared/validation/project-device.schemas.js";
const globalDeviceRepository = new GlobalDeviceRepository();
const consumerRepository = new ConsumerRepository();
const projectDeviceRepository = new ProjectDeviceRepository();
export async function listProjectDevicesByProject(req: Request, res: Response) {
@@ -45,16 +43,8 @@ export async function updateProjectDevice(req: Request, res: Response) {
}
await projectDeviceRepository.update(projectId, projectDeviceId, parsed.data);
await consumerRepository.syncLinkedConsumersFromProjectDevice(projectId, projectDeviceId, {
displayName: parsed.data.displayName,
category: parsed.data.category,
quantity: parsed.data.quantity,
installedPowerPerUnitKw: parsed.data.installedPowerPerUnitKw,
demandFactor: parsed.data.demandFactor,
phaseCount: parsed.data.phaseCount,
powerFactor: parsed.data.powerFactor,
note: parsed.data.note,
});
// Linked rows are synchronized only through the explicit review flow.
// Updating a project device must never silently overwrite local circuit-list values.
const row = await projectDeviceRepository.findById(projectId, projectDeviceId);
if (!row) {
return res.status(404).json({ error: "Project device not found" });
@@ -86,14 +76,14 @@ export async function copyGlobalDeviceToProject(req: Request, res: Response) {
const created = await projectDeviceRepository.create(projectId, {
name: source.name,
displayName: source.displayName,
phaseType: source.phaseCount === 3 ? "three_phase" : "single_phase",
category: source.category ?? undefined,
quantity: source.quantity,
installedPowerPerUnitKw: source.installedPowerPerUnitKw,
demandFactor: source.demandFactor,
powerPerUnit: source.installedPowerPerUnitKw,
simultaneityFactor: source.demandFactor,
cosPhi: source.powerFactor ?? undefined,
remark: source.note ?? undefined,
voltageV: source.voltageV ?? undefined,
phaseCount: source.phaseCount === 1 || source.phaseCount === 3 ? source.phaseCount : undefined,
powerFactor: source.powerFactor ?? undefined,
note: source.note ?? undefined,
});
return res.status(201).json(created);