[Backpacker Rent Team]

Design decisions

Table of contents

01: Datenmodellierung mit relationaler DB + Feature-Zuordnung

Meta

Status
Decided
Updated
26-Jun-2025

Problem statement

Wie sollen Angebote (Offers) und deren dynamische Eigenschaften (Features) strukturiert werden, sodass neue Kategorien und deren spezifische Merkmale flexibel erweiterbar bleiben?
Ziel: Vermeidung redundanter Spalten, gute Erweiterbarkeit (z. B. neue Kategorien + neue Features).

Decision

Wir haben uns entschieden, eine relationale Datenbankstruktur mit separaten Tabellen für offers, features und einer Verknüpfungstabelle offer_features zu nutzen.
Dadurch bleiben wir flexibel bei neuen Kategorien und Features, und die Daten bleiben sauber normalisiert.

Decision was taken by: team/backpackerrent

Regarded options

Criterion Eigene Spalten je Kategorie JSON-Feld in offers Separate Features-Tabelle + Verknüpfung
Flexibilität ❌ Neue Spalten nötig ✔️ Dynamisch ✔️ Dynamisch
SQL-Filterbarkeit ✔️ Einfach ❌ Komplex (nur JSON-Funktionen) ✔️ Einfach
Erweiterbarkeit ❌ Schema-Änderung nötig ✔️ Ohne Schema-Änderung ✔️ Ohne Schema-Änderung
Komplexität ✔️ Einfach ❔ Mittel ❌ Höher (mehr Tabellen)

02: Authentifizierung mit Session-basiertem Login statt Tokens

Meta

Status
Decided
Updated
26-Jun-2025

Problem statement

Wie sollen Nutzer authentifiziert bleiben, um eine Session zwischen Anfragen sicher aufrechtzuerhalten (z. B. beim Mieten, im Profil)?
Ziel: Einfache Umsetzung für Web-Umgebung, ohne komplexe Token-Logik.

Decision

Wir nutzen serverseitig gespeicherte Session-Daten mit dem Flask-Session-Mechanismus.
Dadurch wird die Authentifizierung einfach umgesetzt, ohne dass komplexe Token- oder API-Logik erforderlich ist.

Decision was taken by: team/backpackerrent

Regarded options

Criterion Session (gewählt) Token (z. B. JWT)
Einfachheit ✔️ Einfach zu implementieren ❌ Komplexer (Token-Handling, Blacklist)
API-Tauglichkeit ❌ Nicht geeignet für reine API ✔️ Gut für APIs
Security (CSRF) ✔️ CSRF-Schutz nativ machbar ❔ Eigene Maßnahmen nötig
Overhead ✔️ Kein Overhead ❌ Mehr Aufwand im Backend + Frontend

03: Filterung von Angeboten in SQL statt in Python

Meta

Status
Decided
Updated
26-Jun-2025

Problem statement

Sollen Angebotsfilter (Preis, Kategorie, Region, Verfügbarkeit) in SQL oder nachträglich im Python-Backend umgesetzt werden?
Ziel: Effiziente Filterung auch bei großen Datenmengen.

Decision

Die Filterlogik wird direkt in SQL umgesetzt.
So wird nur die benötigte Datenmenge überhaupt vom DB-Server an das Backend übergeben, was die Performance verbessert.

Decision was taken by: team/backpackerrent

Regarded options

Criterion SQL-Filterung (gewählt) Python-Filterung
Performance ✔️ DB-seitig effizient, nutzt Indexe ❌ Hoher Overhead im Backend
Komplexität ❔ Komplexere SQL-Statements ✔️ Einfacher Python-Code
Wartbarkeit ✔️ Queries direkt filternd ❌ Schwer nachzuvollziehen bei größerem Datenvolumen

04: Verwendung von Flask-WTF für Formulare

Meta

Status
Decided
Updated
26-Jun-2025

Problem statement

Wie sollen Formulare validiert und gegen CSRF abgesichert werden? Ziel: Wenig Boilerplate, saubere Validierung, integrierter CSRF-Schutz.

Decision

Wir verwenden Flask-WTF + WTForms, um deklarativ Formulare zu definieren und serverseitig validieren zu lassen, inklusive CSRF-Absicherung.

Decision was taken by: team/backpackerrent

Regarded options

Criterion Flask-WTF (gewählt) Plain HTML + eigene Prüfung
Sicherheit ✔️ CSRF-Schutz integriert ❌ Muss selbst implementiert werden
Wartbarkeit ✔️ DRY, klar strukturiert ❌ Viel redundanter Code
Flexibilität ✔️ Viele Features, einfach erweiterbar ❔ Volle Freiheit, aber mehr Aufwand

05: Keine Verwendung von JavaScript für Hauptfunktionen

Meta

Status
Decided
Updated
26-Jun-2025

Problem statement

Sollen Kernfunktionen (z. B. Angebote erstellen/bearbeiten, mieten) auch ohne JavaScript funktionieren?
Ziel: Barrierefreiheit und Kompatibilität sicherstellen.

Decision

Die Hauptfunktionen sind vollständig serverseitig umgesetzt. JS wird nur für Komfort-Features (z. B. dynamisches Nachladen von Features) genutzt.
Dadurch bleibt die Anwendung barrierefrei und funktioniert auch ohne aktiviertes JS.

Decision was taken by: team/backpackerrent

Regarded options

Criterion Server-seitige Umsetzung (gewählt) Voll-JavaScript-Lösung
Barrierefreiheit ✔️ Hohe ❌ Gering ohne JS
Komplexität ✔️ Einfacher ❌ Komplexere Architektur
User Experience ❔ Weniger dynamisch ✔️ Sehr dynamisch