Add ensureConsistency to DB

This commit is contained in:
Andras Schmelczer 2025-02-27 22:27:10 +00:00
parent dc31afd907
commit 453f33817b
No known key found for this signature in database
GPG key ID: FC8F2C3D3D1A718C

View file

@ -17,6 +17,7 @@ export interface StoredDatabase {
export class Database {
private documents = new Map<RelativePath, DocumentMetadata>();
private lastSeenUpdateId: VaultUpdateId | undefined;
public constructor(
@ -32,6 +33,8 @@ export class Database {
this.documents.set(relativePath, metadata);
}
}
this.ensureConsistency();
this.logger.debug(`Loaded ${this.documents.size} documents`);
this.lastSeenUpdateId = initialState.lastSeenUpdateId;
@ -128,9 +131,33 @@ export class Database {
}
private async save(): Promise<void> {
this.ensureConsistency();
await this.saveData({
documents: Object.fromEntries(this.documents.entries()),
lastSeenUpdateId: this.lastSeenUpdateId
});
}
private ensureConsistency(): void {
const allMetadata = Array.from(this.documents.entries());
const idToPath = new Map<string, Array<string>>();
allMetadata.forEach(([name, metadata]) => {
idToPath.set(metadata.documentId, [
...(idToPath.get(metadata.documentId) ?? []),
name
]);
});
const duplicates = Array.from(idToPath.entries())
.filter(([_, paths]) => paths.length > 1)
.map(([id, paths]) => `${id} (${paths.join(", ")})`);
if (duplicates.length > 0) {
throw new Error(
"Document IDs are not unique, found duplicates: " +
duplicates.join("; ")
);
}
}
}