Das digitale Zeitalter hat eine Welle der Innovation mit sich gebracht – und eine solche Schöpfung, geboren während der Extreme Programming Week, war unsere App 'Pingo'. Diese geobasierte Plattform hat zum Ziel, deine Umgebung auf spielerische, informative Weise zum Leben zu erwecken. Mithilfe eines standortbasierten Systems (LBS) öffnet Pingo eine interaktive Karte, auf der Nutzer:innen verschiedene 'Geostops' erkunden – von versteckten Naturjuwelen über kulturelle Highlights bis hin zu historischen Sehenswürdigkeiten.
Pingos Hauptfokus liegt darauf, Neugier und Entdeckerdrang in jedem von uns zu wecken. Ob du ein Einheimischer bist, der die verborgenen Ecken seiner Heimatstadt entdecken möchte, oder ein Reisender auf der Suche nach dem nächsten Abenteuer – Pingo ist als interaktiver Begleiter konzipiert. Mit der Fähigkeit, detaillierte Informationen, Fotos und Bewertungen für jeden Geostop anzubieten, geht es bei Pingo nicht nur ums Finden von Orten – es geht darum, die Geschichten dahinter zu teilen und zu erleben.
Unsere Reise mit Pingo war nicht ohne Hindernisse. Während der Entwicklung stellten wir fest, dass die Kombination von Ionic mit Vue möglicherweise nicht die optimale Wahl war – insbesondere da die meisten unserer Teammitglieder Angular-Erfahrung hatten. Die Kombination brachte spezifische Herausforderungen mit sich, von reaktivem Datenbinding in Vue bis hin zur Integration von Bibliotheken, die besser mit Angular harmonieren. Es war eine Lernkurve, die uns wertvolle Einblicke in die Nuancen und Unterschiede zwischen den beiden Frameworks gab.
In den folgenden Abschnitten tauchen wir tiefer in unsere Erfahrung beim Aufbau von Pingo ein, die Herausforderungen, auf die wir gestoßen sind, und warum die Wahl der richtigen Technologiebasis für ein so ambitioniertes und innovatives Projekt wie Pingo so wichtig ist.
Eine Einführung in NestJS und unsere Backend-Architektur
In der heutigen technologiegetriebenen Welt sind robuste und skalierbare Backends für eine App wie Pingo unerlässlich. Wir entschieden uns für NestJS, ein progressives Node.js-Framework, das eine effiziente, zuverlässige und skalierbare serverseitige Entwicklung ermöglicht. Es baut auf Express auf und verbindet Elemente von OOP (objektorientierte Programmierung), FP (funktionale Programmierung) und FRP (funktional-reaktive Programmierung).
Während Malek, unser leitender Backend-Entwickler, den Großteil der NestJS-Arbeit übernahm, brachte Mohamed seine Spring-Boot-Expertise ein – ein Java-basiertes Framework, das er liebt. Ich, gut belesen über viele Technologien, aber Experte in keiner, half dabei, die Teile zusammenzufügen und sicherzustellen, dass das Backend nahtlos mit unserer Frontend-Architektur interagiert.
Nun ein Blick auf unsere API-Endpunkte:
Pingo
- GET /pingo: ruft alle vorhandenen Pingo-Objekte ab.
- PUT /pingo: aktualisiert ein Pingo.
- POST /pingo: erstellt ein neues Pingo.
- GET /pingo/{lat}/{lng}/{radius}: findet Pingos innerhalb eines angegebenen Radius.
- GET /pingo/byId/{id}: ruft ein Pingo anhand seiner ID ab.
- GET /pingo/byUser/{id}: listet alle Pingos eines Nutzers anhand der Nutzer-ID auf.
- DELETE /pingo/{id}: löscht ein Pingo.
- GET /pingo/getByHashId/{hashId}: ruft ein Pingo anhand der Hash-ID ab.
Auth
Diese Endpunkte verwalten Authentifizierung und Autorisierung:
- POST /auth/login: meldet einen Nutzer an.
- POST /auth/register: registriert einen neuen Nutzer.
- Weitere Endpunkte zum Validieren, Signieren und Aktualisieren von Authentifizierungsdaten.
Stations & Hash
Dieser Bereich verwaltet die verschiedenen Stationen in Pingo sowie die Hash-Funktionalität zum Erstellen und Verwalten von Verknüpfungen zwischen Stationen, Nutzer:innen und Rollen.
Users
- POST /users/save: speichert einen neuen Nutzer.
- GET /users/search: findet einen Nutzer anhand eines Suchbegriffs.
- Weitere Endpunkte zum Abrufen, Aktualisieren und Löschen von Nutzerdaten.
Roles
Endpunkte zu Nutzerrollen, die das Speichern, Abrufen und Verwalten von Rollen ermöglichen.
QRCode
- GET /qrcode/{data}: generiert einen QR-Code aus den angegebenen Daten.
Diese Endpunkte geben Pingo ein solides Fundament für alles, was es Nutzer:innen bietet – vom Erstellen und Verwalten von Konten über das Abrufen von Pingo-Standorten bis hin zur Generierung von QR-Codes. Unser NestJS-Backend sorgt dafür, dass alles reibungslos läuft und Nutzer:innen ein nahtloses Erlebnis genießen.