Integrate rough estimate balance
This commit is contained in:
commit
573487666c
45 changed files with 9378 additions and 58 deletions
|
|
@ -3,9 +3,11 @@ import { eq } from "drizzle-orm";
|
|||
import {
|
||||
createProjectTransferEnvelope,
|
||||
parseProjectTransferEnvelope,
|
||||
remapEstimateBalances,
|
||||
remapProjectState,
|
||||
serializeProjectTransferPayload,
|
||||
} from "../../domain/models/project-transfer.model.js";
|
||||
import { createProjectStateRestoreCommand } from "../../domain/models/project-state-restore-command.model.js";
|
||||
import { createProjectTransferRestoreCommand } from "../../domain/models/project-state-restore-command.model.js";
|
||||
import type { ProjectTransferStore } from "../../domain/ports/project-transfer.store.js";
|
||||
import type { AppDatabase } from "../database-context.js";
|
||||
import { circuitDeviceRows } from "../schema/circuit-device-rows.js";
|
||||
|
|
@ -26,6 +28,10 @@ import { externalImportBatches } from "../schema/external-import-batches.js";
|
|||
import { externalModelObjects } from "../schema/external-model-objects.js";
|
||||
import { externalModelSources } from "../schema/external-model-sources.js";
|
||||
import { externalRoomMappings } from "../schema/external-room-mappings.js";
|
||||
import {
|
||||
insertEstimateBalance,
|
||||
readEstimateBalances,
|
||||
} from "./estimate-balance.persistence.js";
|
||||
import {
|
||||
hashProjectStatePayload,
|
||||
readProjectStateSnapshot,
|
||||
|
|
@ -40,10 +46,15 @@ export class ProjectTransferRepository implements ProjectTransferStore {
|
|||
if (!snapshot) {
|
||||
return null;
|
||||
}
|
||||
const estimateBalances = readEstimateBalances(this.database, projectId);
|
||||
const payloadSha256 = hashProjectStatePayload(
|
||||
serializeProjectTransferPayload(snapshot.state, estimateBalances)
|
||||
);
|
||||
return createProjectTransferEnvelope(
|
||||
new Date().toISOString(),
|
||||
snapshot.payloadSha256,
|
||||
snapshot.state
|
||||
payloadSha256,
|
||||
snapshot.state,
|
||||
estimateBalances
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -61,10 +72,21 @@ export class ProjectTransferRepository implements ProjectTransferStore {
|
|||
projectId,
|
||||
() => crypto.randomUUID()
|
||||
);
|
||||
const currentEstimateBalances = readEstimateBalances(this.database, projectId);
|
||||
const targetEstimateBalances =
|
||||
transfer.projectState.project.id === projectId
|
||||
? transfer.estimateBalances
|
||||
: remapEstimateBalances(
|
||||
transfer.estimateBalances,
|
||||
projectId,
|
||||
() => crypto.randomUUID()
|
||||
);
|
||||
return {
|
||||
command: createProjectStateRestoreCommand(
|
||||
command: createProjectTransferRestoreCommand(
|
||||
current.payloadSha256,
|
||||
targetState
|
||||
targetState,
|
||||
currentEstimateBalances,
|
||||
targetEstimateBalances
|
||||
),
|
||||
};
|
||||
}
|
||||
|
|
@ -78,20 +100,39 @@ export class ProjectTransferRepository implements ProjectTransferStore {
|
|||
() => crypto.randomUUID(),
|
||||
`${transfer.projectState.project.name} (Kopie)`
|
||||
);
|
||||
this.database.transaction((tx) => insertProjectState(tx, state));
|
||||
const estimateBalances = remapEstimateBalances(
|
||||
transfer.estimateBalances,
|
||||
projectId,
|
||||
() => crypto.randomUUID()
|
||||
);
|
||||
this.database.transaction((tx) => {
|
||||
insertProjectState(tx, state);
|
||||
for (const balance of estimateBalances) {
|
||||
insertEstimateBalance(tx, balance);
|
||||
}
|
||||
});
|
||||
return { projectId, name: state.project.name };
|
||||
}
|
||||
|
||||
private parseVerified(value: unknown) {
|
||||
const rawPayloadSha256 =
|
||||
isPlainObject(value) &&
|
||||
isPlainObject(value.projectState)
|
||||
? hashProjectStatePayload(JSON.stringify(value.projectState))
|
||||
: null;
|
||||
const isLegacy = isPlainObject(value) && value.formatVersion === 1;
|
||||
const rawPayloadSha256 = isPlainObject(value) && isPlainObject(value.projectState)
|
||||
? hashProjectStatePayload(
|
||||
isLegacy
|
||||
? JSON.stringify(value.projectState)
|
||||
: JSON.stringify({
|
||||
projectState: value.projectState,
|
||||
estimateBalances: value.estimateBalances,
|
||||
})
|
||||
)
|
||||
: null;
|
||||
const transfer = parseProjectTransferEnvelope(value);
|
||||
const payloadJson = serializeProjectStateSnapshot(
|
||||
transfer.projectState
|
||||
);
|
||||
const payloadJson = isLegacy
|
||||
? serializeProjectStateSnapshot(transfer.projectState)
|
||||
: serializeProjectTransferPayload(
|
||||
transfer.projectState,
|
||||
transfer.estimateBalances
|
||||
);
|
||||
if (
|
||||
hashProjectStatePayload(payloadJson) !== transfer.payloadSha256 &&
|
||||
rawPayloadSha256 !== transfer.payloadSha256
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue