Files
eventmap/js/store/migrations.js
T
dapelza ee55fb1cf9 Phase 0+1: Scaffold, Datenmodell, Karte und Liste
Reines HTML5/CSS3/JavaScript ohne Build-Tooling, lauffaehig direkt per
Doppelklick auf index.html (file://, kein Server noetig):

- Datenmodell fuer Ausflugsziele mit allen Feldern aus der Anforderung,
  15 feste Kategorien inkl. Farbe/Icon
- Zentraler Pub/Sub-Store mit LocalStorage-Persistenz und
  Migrations-Grundgeruest
- Interaktive Karte (Leaflet + Leaflet.markercluster, lokal vendored)
  mit kategoriefarbenen Markern, Clustering, Popups, Geolocation-Button
- Kartengrundlage ueber CARTO-Basemaps statt tile.openstreetmap.org, da
  dessen Referer-Pflicht file://-Aufrufe blockiert
- Seed-Daten als eingebettetes Script (data/seed.js) statt JSON-Datei,
  da fetch() auf lokale Dateien unter file:// nicht zuverlaessig
  funktioniert
- Ergebnisliste mit 10 Beispiel-Ausflugszielen, sicher gerendert ueber
  textContent/DOM-APIs statt innerHTML (Vorbereitung fuer spaeteren
  KI-JSON-Import mit Fremddaten)
- Responsives Layout (Desktop nebeneinander, Mobile gestapelt)
2026-07-24 11:24:47 +02:00

38 lines
1.1 KiB
JavaScript

// Schlanke Migrations-Infrastruktur für das LocalStorage-Datenschema.
// Aktuell existiert nur Schema-Version 1, daher ist MIGRATIONS leer.
// Neue Migrationen werden als { from, to, migrate(data) } ergänzt und
// von migrate() sequenziell angewendet.
(function () {
const { CURRENT_SCHEMA_VERSION } = EventMap.config;
const MIGRATIONS = [
// Beispiel für zukünftige Migrationen:
// { from: 1, to: 2, migrate: (data) => ({ ...data, neuesFeld: 'default' }) },
];
/**
* Wendet alle nötigen Migrationsschritte an, bis schemaVersion der
* aktuellen CURRENT_SCHEMA_VERSION entspricht.
*/
function migrate(data) {
let current = data ?? {};
let version = current.schemaVersion ?? 1;
while (version < CURRENT_SCHEMA_VERSION) {
const step = MIGRATIONS.find((m) => m.from === version);
if (!step) {
// Keine passende Migration gefunden: auf aktuelle Version springen,
// um die App nicht zu blockieren.
break;
}
current = step.migrate(current);
version = step.to;
}
return { ...current, schemaVersion: CURRENT_SCHEMA_VERSION };
}
EventMap.store.migrate = migrate;
})();