feat(02-03): add IndexedDB accessor methods for companionAssets, styleReference, forestElements
- saveCompanionAssets/getCompanionAssets keyed by characterType - saveStyleReference/getStyleReference singleton pattern (id: 1) - saveForestElement (auto-increment add) / getForestElements (getAll) - Extended type imports for CompanionAssets, CompanionType, ForestElement, StyleReference Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
+68
-1
@@ -1,4 +1,11 @@
|
||||
import type { Progress, Settings } from "../types";
|
||||
import type {
|
||||
CompanionAssets,
|
||||
CompanionType,
|
||||
ForestElement,
|
||||
Progress,
|
||||
Settings,
|
||||
StyleReference,
|
||||
} from "../types";
|
||||
|
||||
const DB_NAME = "zauberwald";
|
||||
const DB_VERSION = 1;
|
||||
@@ -68,3 +75,63 @@ export function saveSettings(db: IDBDatabase, settings: Settings): Promise<void>
|
||||
request.onerror = () => reject(request.error);
|
||||
});
|
||||
}
|
||||
|
||||
export function saveCompanionAssets(db: IDBDatabase, assets: CompanionAssets): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const tx = db.transaction("companionAssets", "readwrite");
|
||||
const store = tx.objectStore("companionAssets");
|
||||
const request = store.put(assets);
|
||||
request.onsuccess = () => resolve();
|
||||
request.onerror = () => reject(request.error);
|
||||
});
|
||||
}
|
||||
|
||||
export function getCompanionAssets(db: IDBDatabase, characterType: CompanionType): Promise<CompanionAssets | null> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const tx = db.transaction("companionAssets", "readonly");
|
||||
const store = tx.objectStore("companionAssets");
|
||||
const request = store.get(characterType);
|
||||
request.onsuccess = () => resolve((request.result as CompanionAssets) ?? null);
|
||||
request.onerror = () => reject(request.error);
|
||||
});
|
||||
}
|
||||
|
||||
export function saveStyleReference(db: IDBDatabase, ref: StyleReference): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const tx = db.transaction("styleReference", "readwrite");
|
||||
const store = tx.objectStore("styleReference");
|
||||
const request = store.put(ref);
|
||||
request.onsuccess = () => resolve();
|
||||
request.onerror = () => reject(request.error);
|
||||
});
|
||||
}
|
||||
|
||||
export function getStyleReference(db: IDBDatabase): Promise<StyleReference | null> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const tx = db.transaction("styleReference", "readonly");
|
||||
const store = tx.objectStore("styleReference");
|
||||
const request = store.get(1);
|
||||
request.onsuccess = () => resolve((request.result as StyleReference) ?? null);
|
||||
request.onerror = () => reject(request.error);
|
||||
});
|
||||
}
|
||||
|
||||
export function saveForestElement(db: IDBDatabase, element: ForestElement): Promise<number> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const tx = db.transaction("forestElements", "readwrite");
|
||||
const store = tx.objectStore("forestElements");
|
||||
const request = store.add(element);
|
||||
request.onsuccess = () => resolve(request.result as number);
|
||||
request.onerror = () => reject(request.error);
|
||||
});
|
||||
}
|
||||
|
||||
export function getForestElements(db: IDBDatabase): Promise<ForestElement[]> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const tx = db.transaction("forestElements", "readonly");
|
||||
const store = tx.objectStore("forestElements");
|
||||
const request = store.getAll();
|
||||
request.onsuccess = () => resolve((request.result as ForestElement[]) ?? []);
|
||||
request.onerror = () => reject(request.error);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user