duimstok.prorail.nl/src/Infrastructure/db.js

92 lines
3.0 KiB
JavaScript

(function (I) {
const DB_NAME = 'DuimstokInspecties';
const DB_VERSION = 4;
let db = null;
I.openDB = function () {
return new Promise((resolve, reject) => {
const req = indexedDB.open(DB_NAME, DB_VERSION);
req.onupgradeneeded = (e) => {
const d = e.target.result;
if (!d.objectStoreNames.contains('inspections'))
d.createObjectStore('inspections', { keyPath: 'orderNr' });
if (!d.objectStoreNames.contains('orderStatuses'))
d.createObjectStore('orderStatuses', { keyPath: 'orderKey' });
if (!d.objectStoreNames.contains('ordersCsv'))
d.createObjectStore('ordersCsv', { keyPath: 'id' });
};
req.onsuccess = (e) => { db = e.target.result; resolve(db); };
req.onerror = (e) => reject(e);
});
};
async function ensureDb() {
if (!db) await I.openDB();
return db;
}
I.saveInspection = async function (formData) {
const d = await ensureDb();
return new Promise((resolve, reject) => {
const tx = d.transaction('inspections', 'readwrite');
tx.objectStore('inspections').put(formData);
tx.oncomplete = () => resolve();
tx.onerror = reject;
});
};
I.loadInspection = async function (orderNr) {
const d = await ensureDb();
return new Promise((resolve, reject) => {
const tx = d.transaction('inspections', 'readonly');
const req = tx.objectStore('inspections').get(orderNr);
req.onsuccess = () => resolve(req.result);
req.onerror = reject;
});
};
I.saveOrderStatus = async function (orderKey, status) {
const d = await ensureDb();
return new Promise((resolve, reject) => {
const tx = d.transaction('orderStatuses', 'readwrite');
tx.objectStore('orderStatuses').put({ orderKey, status, updatedAt: new Date().toISOString() });
tx.oncomplete = resolve;
tx.onerror = reject;
});
};
I.saveOrdersCsv = async function (csvText) {
const d = await ensureDb();
return new Promise((resolve, reject) => {
const tx = d.transaction('ordersCsv', 'readwrite');
tx.objectStore('ordersCsv').put({ id: 'current', csv: csvText, uploadedAt: new Date().toISOString() });
tx.oncomplete = resolve;
tx.onerror = reject;
});
};
I.loadOrdersCsv = async function () {
const d = await ensureDb();
return new Promise((resolve, reject) => {
const tx = d.transaction('ordersCsv', 'readonly');
const req = tx.objectStore('ordersCsv').get('current');
req.onsuccess = () => resolve(req.result || null);
req.onerror = reject;
});
};
I.loadAllOrderStatuses = async function () {
const d = await ensureDb();
return new Promise((resolve, reject) => {
const tx = d.transaction('orderStatuses', 'readonly');
const req = tx.objectStore('orderStatuses').getAll();
req.onsuccess = () => {
const map = {};
(req.result || []).forEach(r => { map[r.orderKey] = r.status; });
resolve(map);
};
req.onerror = reject;
});
};
})(window.App.Infrastructure);