157 lines
4.5 KiB
TypeScript
157 lines
4.5 KiB
TypeScript
|
|
|
|
export default class BilliDB {
|
|
private DB_VERSION: number;
|
|
private DB_NAME: string;
|
|
constructor(dbName:string, dbVersion:number) {
|
|
this.DB_NAME = dbName;
|
|
this.DB_VERSION = dbVersion;
|
|
}
|
|
|
|
|
|
|
|
async getDb():Promise<IDBOpenDBRequest> {
|
|
return new Promise((resolve, reject) => {
|
|
|
|
const request = window.indexedDB.open(this.DB_NAME, this.DB_VERSION);
|
|
|
|
request.onerror = e => {
|
|
console.log("Error opening db", e);
|
|
reject("Error");
|
|
}
|
|
|
|
request.onsuccess =e => {
|
|
|
|
console.log("connect erfolgreich");
|
|
// @ts-ignore
|
|
resolve(e.target.result)
|
|
}
|
|
request.onupgradeneeded = e => {
|
|
console.log("onupgradeneeded");
|
|
// @ts-ignore
|
|
const db = e.target.result;
|
|
db.createObjectStore("inventory", {autoIncrement: false, keyPath: 'id'});
|
|
db.createObjectStore("sets", {autoIncrement: false, keyPath: 'id'});
|
|
|
|
db.createObjectStore("conditions", {autoIncrement: false, keyPath: 'key'});
|
|
db.createObjectStore("buildtypes", {autoIncrement: false, keyPath: 'key'});
|
|
db.createObjectStore("mounts", {autoIncrement: false, keyPath: 'key'});
|
|
db.createObjectStore("brands", {autoIncrement: false, keyPath: 'key'});
|
|
db.createObjectStore("manufacturers", {autoIncrement: false, keyPath: 'key'});
|
|
db.createObjectStore("medias", {autoIncrement: false, keyPath: 'key'});
|
|
|
|
}
|
|
})
|
|
}
|
|
|
|
async saveItem(item, storeId:string) {
|
|
const db = await this.getDb();
|
|
|
|
return new Promise((resolve, reject) => {
|
|
console.log("Starting Add Transaction");
|
|
|
|
// @ts-ignore
|
|
const trans = db.transaction([storeId], 'readwrite');
|
|
|
|
trans.oncomplete = (e) => {
|
|
resolve(e);
|
|
};
|
|
|
|
trans.onerror = (e) => {
|
|
console.log("on Error", e)
|
|
reject(e);
|
|
};
|
|
const store = trans.objectStore(storeId);
|
|
|
|
store.add(item);
|
|
|
|
store.onerror = (e) => {
|
|
console.log("Error on Store", e)
|
|
}
|
|
store.oncomplete = (e) => {
|
|
console.log("oncomplete on Store", e)
|
|
}
|
|
store.onsuccess = (e) => {
|
|
console.log("onsuccess on Store", e)
|
|
}
|
|
})
|
|
}
|
|
async saveItems(items, storeId:string) {
|
|
const db = await this.getDb();
|
|
|
|
return new Promise((resolve, reject) => {
|
|
console.log("Starting Add Transaction");
|
|
|
|
// @ts-ignore
|
|
const trans = db.transaction([storeId], 'readwrite');
|
|
|
|
trans.oncomplete = (e) => {
|
|
resolve(e);
|
|
};
|
|
|
|
trans.onerror = (e) => {
|
|
console.log("on Error", e)
|
|
reject(e);
|
|
};
|
|
const store = trans.objectStore(storeId);
|
|
|
|
items.forEach((item) => {
|
|
store.add(item);
|
|
})
|
|
|
|
store.onerror = (e) => {
|
|
console.log("Error on Store", e)
|
|
}
|
|
store.oncomplete = (e) => {
|
|
console.log("oncomplete on Store", e)
|
|
}
|
|
store.onsuccess = (e) => {
|
|
console.log("onsuccess on Store", e)
|
|
}
|
|
})
|
|
}
|
|
async getItems(storeId:string) {
|
|
const db = await this.getDb();
|
|
|
|
return new Promise((resolve, reject) => {
|
|
const items = [];
|
|
// @ts-ignore
|
|
const trans = db.transaction([storeId], 'readonly');
|
|
|
|
trans.oncomplete = (e) => {
|
|
console.log(`${storeId}: oncomplete`, items.length)
|
|
|
|
resolve(items);
|
|
};
|
|
|
|
trans.onerror = (e) => {
|
|
console.log("on Error", e)
|
|
reject(e);
|
|
};
|
|
const store = trans.objectStore(storeId);
|
|
|
|
store.openCursor().onsuccess = (e) => {
|
|
const cursor = e.target.result;
|
|
if(cursor) {
|
|
|
|
items.push(cursor.value);
|
|
cursor.continue();
|
|
}
|
|
}
|
|
|
|
|
|
store.onerror = (e) => {
|
|
console.log("Error on getAll", e)
|
|
}
|
|
store.oncomplete = (e) => {
|
|
console.log("oncomplete on getAll", e)
|
|
}
|
|
})
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|