Zum Inhalt springen
DeutschEN English

Mischa Barmettler

Ausgewählte Projekte

BitMarket

AngularSpring BootPostgreSQL

Ein Marktplatz, auf dem Leute neue oder gebrauchte Artikel kaufen und verkaufen, per Auktion oder zum Fixpreis.

Anfangs kommunizierten die Services direkt über HTTP miteinander. Fiel der Benachrichtigungsdienst aus, waren dadurch auch Bestellungen betroffen. Mit RabbitMQ habe ich die Services entkoppelt, sodass Bestellungen weiterhin verarbeitet werden, auch wenn die Benachrichtigungen ausfallen. Es war mein erster Einsatz von Message Queues. Erst als ich gesehen habe, wie sich die Architektur dadurch verhält, habe ich wirklich verstanden, welchen Vorteil die Entkopplung bringt.

Amtli

AngularSpring BootPostgreSQL

Eine Ämtli-App für Familien: Eltern erstellen Aufgaben und Belohnungen, Kinder erledigen ihre Ämtli, reichen einen Nachweis ein, sammeln Punkte und lösen sie in einem virtuellen Shop ein.

Da die JWT-Tokens nur kurz gültig waren, führten abgelaufene Tokens zu 401-Fehlern und unterbrachen die Sitzung. Ich habe einen Interceptor implementiert, der das Token bei Bedarf im Hintergrund erneuert und die ursprüngliche Anfrage erneut sendet. Dabei stiess ich auf ein Problem: Auch der Refresh-Aufruf konnte einen 401-Fehler auslösen und so eine Endlosschleife verursachen. Indem ich die /auth-Endpunkte vom Interceptor ausgenommen habe, konnte ich das Problem lösen.

Töggele

AngularIonicSpring BootPostgreSQL

Eine App für Tischfussball-Turniere: Spielerinnen und Spieler bilden Teams, spielen eine Gruppenphase auf Zeit und danach die K.-o.-Runde, tragen Resultate ein und verfolgen ihre Statistiken.

In der übernommenen Codebasis extrahierten die Controller das JWT manuell aus dem Header, um den eingeloggten Benutzer zu finden, teilweise sogar mehrfach pro Anfrage. Ich habe eine eigene @CurrentUser-Annotation mit einem HandlerMethodArgumentResolver implementiert, der den Benutzer direkt an die Controller-Methoden übergibt. Dadurch konnte ich rund sieben unnötige Datenbankabfragen einsparen und die Authentifizierungslogik zentralisieren, statt sie in mehreren Controllern zu duplizieren.

RoomPlanner

AngularSpring BootPostgreSQL

Ein 2D-Raumplaner: Man zeichnet Wände, zieht Möbel auf die Zeichenfläche und dreht sie, setzt Türen ein und speichert die Grundrisse im eigenen Konto.

Anfangs prüfte ich Kollisionen nur anhand der umschliessenden Rechtecke. Das funktionierte, bis Möbel gedreht werden konnten: Plötzlich wurden Bereiche blockiert, die das Möbelstück gar nicht berührte, oder Kollisionen wurden übersehen. Ich habe die Prüfung deshalb mit dem Separating Axis Theorem (SAT) neu umgesetzt, um auch gedrehte Formen korrekt zu berücksichtigen. Den einfachen Rechteck-Test habe ich als schnelle Vorprüfung beibehalten.