Im Kirby CMS können Benutzer Touren und Stationen anlegen und bearbeiten. Jede Station enthält neben Textinhalten auch einen POI-Datensatz. Dieser POI-Datensatz ist für die Nutzer schreibgeschützt, da er von der externen Destination One-Datenbank importiert wird. Anhand eines POI-ID-Feldes wird eine Verbindung zwischen der Station und dem entsprechenden POI hergestellt. Über einen Button im Kirby Panel können Sie gezielt POI-Daten importieren. Wird der Button betätigt, erfolgt ein Aufruf des Workers, der die Datenaktualisierung durchführt.
Der Abruf von POI-Daten von Destination One erfolgt auf Abruf. Alle Daten vom Frontend werden immer von Kirby geladen.
Der serverlose Worker kümmert sich um sämtliche Logik rund um die POI-Daten. Er kommuniziert direkt mit der externen Destination One-Datenbank und stellt über zwei unterschiedliche Routen sicher, dass die Daten synchronisiert werden:
- Die Route
/destination-one/:id/poi
holt gezielt die POI-Daten zu einer bestimmten POI-ID, die auf der Station hinterlegt wurde. - Die Route
/hooks/destination-one/import
ermöglicht den Batch-Import, bei dem alle POIs mit dem Keyword „buecherspur“ aus der Destination One-Datenbank abgerufen und den zugehörigen Stationen zugeordnet werden.
Zudem übernimmt der Worker über die Routen /hooks/typesense/import
und /search/query
die Aufgaben rund um die Suchfunktionalität. Dabei werden Daten aus Kirby abgerufen, über Typesense indiziert und suchbar gemacht.
Typesense wird verwendet, um eine schnelle und flexible Suchfunktion für die Stationen bereitzustellen. Dabei werden Stationen-Daten durch den Worker aus Kirby extrahiert, in den Typesense-Index geschrieben und über die Such-Query (/search/query
) wieder abrufbar gemacht. Dies ermöglicht es der Frontend-Anwendung, stationenbezogene Inhalte per Textsuche zu finden.
Die Web-App interagiert in zweierlei Hinsicht mit dem System:
- Über KQL-Abfragen bezieht sie Stationen-Daten direkt aus Kirby.
- Gleichzeitig werden Suchanfragen an den Worker gestellt, der die Suche in Typesense durchführt und Ergebnisse (wie Titel, URI, Inhalt) zurückliefert.