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="tietokanta.js"></script>
|
||||||
<script src="käyttöliittymä.js"></script>
|
<script src="käyttöliittymä.js"></script>
|
||||||
<script>
|
<script>
|
||||||
suorita(_tietokanta.transaktio((t) => {t.lisää(taulut.luokat, '1B')}));
|
let _tietokanta = new Tietokanta;
|
||||||
suorita(_tietokanta.transaktio((t) => {t.lisää(taulut.luokat, '1A')}));
|
lataaTietokanta();
|
||||||
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();}));
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -19,6 +19,7 @@ function suorita([tietokanta, muutokset]) {
|
||||||
for (const muutos of muutokset) {
|
for (const muutos of muutokset) {
|
||||||
suoritaMuutos(tietokanta, muutos);
|
suoritaMuutos(tietokanta, muutos);
|
||||||
}
|
}
|
||||||
|
tallennaTietokanta(tietokanta);
|
||||||
}
|
}
|
||||||
|
|
||||||
function suoritaMuutos(tietokanta, muutos) {
|
function suoritaMuutos(tietokanta, muutos) {
|
||||||
|
|
|
@ -73,6 +73,23 @@ class Tietokanta {
|
||||||
|
|
||||||
historia = [];
|
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() {
|
constructor() {
|
||||||
this.taulut.set(taulut.luokat, new Map);
|
this.taulut.set(taulut.luokat, new Map);
|
||||||
}
|
}
|
||||||
|
@ -154,6 +171,30 @@ class Tietokanta {
|
||||||
});
|
});
|
||||||
return taulukko.map(([id, _]) => id);
|
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