Tietokannan automaattinen tallentaminen ja lataaminen
This commit is contained in:
parent
c94bc35573
commit
09207e98f9
3 changed files with 45 additions and 6 deletions
|
@ -31,11 +31,8 @@
|
|||
<script src="tietokanta.js"></script>
|
||||
<script src="käyttöliittymä.js"></script>
|
||||
<script>
|
||||
suorita(_tietokanta.transaktio((t) => {t.lisää(taulut.luokat, '1B')}));
|
||||
suorita(_tietokanta.transaktio((t) => {t.lisää(taulut.luokat, '1A')}));
|
||||
suorita(_tietokanta.transaktio((t) => {t.lisää(taulut.luokat, '1C')}));
|
||||
suorita(_tietokanta.transaktio((t) => {t.poista(taulut.luokat, 0)}));
|
||||
suorita(_tietokanta.transaktio((t) => {t.lisää(taulut.luokat, '1Å'); t.peru();}));
|
||||
let _tietokanta = new Tietokanta;
|
||||
lataaTietokanta();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -19,6 +19,7 @@ function suorita([tietokanta, muutokset]) {
|
|||
for (const muutos of muutokset) {
|
||||
suoritaMuutos(tietokanta, muutos);
|
||||
}
|
||||
tallennaTietokanta(tietokanta);
|
||||
}
|
||||
|
||||
function suoritaMuutos(tietokanta, muutos) {
|
||||
|
|
|
@ -73,6 +73,23 @@ class Tietokanta {
|
|||
|
||||
historia = [];
|
||||
|
||||
static serialisoidusta(serialisoitu) {
|
||||
const parsittu = JSON.parse(serialisoitu);
|
||||
const tietokanta = new this;
|
||||
tietokanta.seuraavaId = parsittu.seuraavaId;
|
||||
const muutokset = [];
|
||||
for (const taulu in parsittu.taulut) {
|
||||
tietokanta.taulut.set(taulu, new Map);
|
||||
for (let id in parsittu.taulut[taulu]) {
|
||||
id = Number.parseInt(id);
|
||||
const sisältö = parsittu.taulut[taulu][id];
|
||||
tietokanta.taulut.get(taulu).set(id, sisältö);
|
||||
muutokset.push({taulu, id, uusi: sisältö});
|
||||
}
|
||||
}
|
||||
return [tietokanta, muutokset];
|
||||
}
|
||||
|
||||
constructor() {
|
||||
this.taulut.set(taulut.luokat, new Map);
|
||||
}
|
||||
|
@ -154,6 +171,30 @@ class Tietokanta {
|
|||
});
|
||||
return taulukko.map(([id, _]) => id);
|
||||
}
|
||||
|
||||
serialisoi() {
|
||||
return JSON.stringify(this, (avain, arvo) => {
|
||||
if (avain === 'historia') {
|
||||
return undefined;
|
||||
}
|
||||
if (arvo instanceof Map) {
|
||||
return Object.fromEntries(arvo.entries());
|
||||
}
|
||||
return arvo;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const _tietokanta = new Tietokanta;
|
||||
function tallennaTietokanta(tietokanta) {
|
||||
window.localStorage.setItem('tietokanta', tietokanta.serialisoi());
|
||||
}
|
||||
|
||||
function lataaTietokanta() {
|
||||
const serialisoitu = window.localStorage.getItem('tietokanta');
|
||||
if (serialisoitu === null) {
|
||||
return;
|
||||
}
|
||||
let [tietokanta, muutokset] = Tietokanta.serialisoidusta(serialisoitu);
|
||||
_tietokanta = tietokanta;
|
||||
suorita([tietokanta, muutokset]);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue