parent
07c88d9164
commit
b7755949c8
@ -0,0 +1,204 @@
|
|||||||
|
// IndexedDB Funktionen
|
||||||
|
const dbName = 'myDB';
|
||||||
|
const dbVersion = 1;
|
||||||
|
let db;
|
||||||
|
|
||||||
|
// IndexedDB initialisieren
|
||||||
|
function initDB() {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const request = indexedDB.open(dbName, dbVersion);
|
||||||
|
|
||||||
|
request.onupgradeneeded = function (event) {
|
||||||
|
db = event.target.result;
|
||||||
|
const store = db.createObjectStore('hours', {
|
||||||
|
keyPath: 'id',
|
||||||
|
autoIncrement: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Spalten definieren
|
||||||
|
store.createIndex('createdate', 'createdate', { unique: false });
|
||||||
|
store.createIndex('date', 'date', { unique: false });
|
||||||
|
store.createIndex('duration', 'duration', { unique: false });
|
||||||
|
store.createIndex('type', 'type', { unique: false });
|
||||||
|
store.createIndex('status', 'status', { unique: false });
|
||||||
|
store.createIndex('sondertext', 'sondertext', { unique: false });
|
||||||
|
};
|
||||||
|
|
||||||
|
request.onsuccess = function (event) {
|
||||||
|
db = event.target.result;
|
||||||
|
resolve(db);
|
||||||
|
};
|
||||||
|
|
||||||
|
request.onerror = function (event) {
|
||||||
|
console.error('IndexedDB Fehler:', event.target.errorCode);
|
||||||
|
reject(event.target.errorCode);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Neuer Eintrag in die IndexedDB
|
||||||
|
function addEntry(data) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const transaction = db.transaction(['hours'], 'readwrite');
|
||||||
|
const store = transaction.objectStore('hours');
|
||||||
|
|
||||||
|
data.createdate = new Date();
|
||||||
|
const request = store.add(data);
|
||||||
|
|
||||||
|
request.onsuccess = function () {
|
||||||
|
resolve(request.result);
|
||||||
|
};
|
||||||
|
|
||||||
|
request.onerror = function (event) {
|
||||||
|
reject('Fehler beim Hinzufügen des Eintrags:', event.target.error);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Eintrag aktualisieren
|
||||||
|
function updateEntry(id, updatedData) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const transaction = db.transaction(['hours'], 'readwrite');
|
||||||
|
const store = transaction.objectStore('hours');
|
||||||
|
|
||||||
|
const getRequest = store.get(id);
|
||||||
|
|
||||||
|
getRequest.onsuccess = function (event) {
|
||||||
|
const data = event.target.result;
|
||||||
|
Object.assign(data, updatedData);
|
||||||
|
data.createdate = new Date(); // Aktualisiere das Änderungsdatum
|
||||||
|
|
||||||
|
const updateRequest = store.put(data);
|
||||||
|
|
||||||
|
updateRequest.onsuccess = function () {
|
||||||
|
resolve(data);
|
||||||
|
};
|
||||||
|
|
||||||
|
updateRequest.onerror = function (event) {
|
||||||
|
reject('Fehler beim Aktualisieren des Eintrags:', event.target.error);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
getRequest.onerror = function (event) {
|
||||||
|
reject('Fehler beim Abrufen des Eintrags:', event.target.error);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Eintrag löschen
|
||||||
|
function deleteEntry(id) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const transaction = db.transaction(['hours'], 'readwrite');
|
||||||
|
const store = transaction.objectStore('hours');
|
||||||
|
|
||||||
|
const request = store.delete(id);
|
||||||
|
|
||||||
|
request.onsuccess = function () {
|
||||||
|
resolve(`Eintrag mit ID ${id} gelöscht.`);
|
||||||
|
};
|
||||||
|
|
||||||
|
request.onerror = function (event) {
|
||||||
|
reject('Fehler beim Löschen des Eintrags:', event.target.error);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Einträge abrufen
|
||||||
|
function getAllEntries() {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const transaction = db.transaction(['hours'], 'readonly');
|
||||||
|
const store = transaction.objectStore('hours');
|
||||||
|
|
||||||
|
const request = store.getAll();
|
||||||
|
|
||||||
|
request.onsuccess = function () {
|
||||||
|
resolve(request.result);
|
||||||
|
};
|
||||||
|
|
||||||
|
request.onerror = function (event) {
|
||||||
|
reject('Fehler beim Abrufen der Einträge:', event.target.error);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Einträge nach Monat und/oder Jahr filtern
|
||||||
|
function filterEntriesByMonthYear(month, year) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const transaction = db.transaction(['hours'], 'readonly');
|
||||||
|
const store = transaction.objectStore('hours');
|
||||||
|
|
||||||
|
const request = store.getAll();
|
||||||
|
|
||||||
|
request.onsuccess = function () {
|
||||||
|
const allEntries = request.result;
|
||||||
|
|
||||||
|
// Filter nach Monat und Jahr
|
||||||
|
const filteredEntries = allEntries.filter(entry => {
|
||||||
|
const entryDate = new Date(entry.date); // Konvertiere das date-Feld in ein Date-Objekt
|
||||||
|
|
||||||
|
const matchesMonth = month ? entryDate.getMonth() + 1 === month : true; // +1 da getMonth() 0-basiert ist
|
||||||
|
const matchesYear = year ? entryDate.getFullYear() === year : true;
|
||||||
|
|
||||||
|
return matchesMonth && matchesYear;
|
||||||
|
});
|
||||||
|
|
||||||
|
resolve(filteredEntries);
|
||||||
|
};
|
||||||
|
|
||||||
|
request.onerror = function (event) {
|
||||||
|
reject('Fehler beim Abrufen der Einträge:', event.target.error);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Neuen Eintrag verschlüsselt speichern
|
||||||
|
async function addEncryptedEntry(data) {
|
||||||
|
const key = await generateKey();
|
||||||
|
const { iv, encryptedData } = await encryptData(key, JSON.stringify(data));
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const transaction = db.transaction(['hours'], 'readwrite');
|
||||||
|
const store = transaction.objectStore('hours');
|
||||||
|
|
||||||
|
const request = store.add({
|
||||||
|
iv: Array.from(iv), // IV muss auch gespeichert werden
|
||||||
|
encryptedData: Array.from(new Uint8Array(encryptedData)), // Encrypted data als Uint8Array speichern
|
||||||
|
});
|
||||||
|
|
||||||
|
request.onsuccess = function () {
|
||||||
|
resolve(request.result);
|
||||||
|
};
|
||||||
|
|
||||||
|
request.onerror = function (event) {
|
||||||
|
reject('Fehler beim Hinzufügen des verschlüsselten Eintrags:', event.target.error);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verschlüsselten Eintrag entschlüsseln
|
||||||
|
async function getDecryptedEntry(id) {
|
||||||
|
const key = await generateKey();
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const transaction = db.transaction(['hours'], 'readonly');
|
||||||
|
const store = transaction.objectStore('hours');
|
||||||
|
|
||||||
|
const request = store.get(id);
|
||||||
|
|
||||||
|
request.onsuccess = async function () {
|
||||||
|
const entry = request.result;
|
||||||
|
if (entry) {
|
||||||
|
const iv = new Uint8Array(entry.iv);
|
||||||
|
const encryptedData = new Uint8Array(entry.encryptedData);
|
||||||
|
const decryptedData = await decryptData(key, iv, encryptedData);
|
||||||
|
resolve(JSON.parse(decryptedData));
|
||||||
|
} else {
|
||||||
|
reject('Eintrag nicht gefunden');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
request.onerror = function (event) {
|
||||||
|
reject('Fehler beim Abrufen des verschlüsselten Eintrags:', event.target.error);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
Loading…
Reference in new issue