Skip to content

Commit 6ffaaf7

Browse files
ADR hinzugefügt
1 parent b7f5e20 commit 6ffaaf7

7 files changed

Lines changed: 168 additions & 1 deletion

File tree

Project/Frontend/package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/adr/ADR01.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# AD01: Sichere Passwortspeicherung in der Datenbank via Hash & Salt
2+
3+
## Kontext und Problemstellung
4+
5+
Bei der Registrierung bei LazyCook werden Email und Passwort des Nutzers erfasst und in einer Datenbank gespeichert. Zur Sicherung der gespeicherten Daten und zum Schutz des Kontos darf das Passwort nicht im Klartext in der Datenbank abgelegt werden. Es stellt sich die Frage wie das Passwort verschlüsselt und in der Datenbank gespeichert werden soll. Das Hashverfahren kann bei Unsicherheit vom Entwickler geändert werden.
6+
7+
8+
## Betrachtete Varianten
9+
10+
* SHA-256
11+
* SHA-256 mit Salt
12+
* PBKDF2-HMAC mit SHA256
13+
14+
## Entscheidung
15+
16+
Gewählte Variante: PBKDF2-HMAC mit SHA256, denn diese ist im Vergleich zu SHA-256 und SHA-256 mit Salt wesentlich sicherer. SHA-256 kann mit den heutigen Grafikkarten sehr schnell berechnet werden. PBKDF2-HMAC mit SHA256 berechnet den Hasshwert tausende male wodurch es für Angreifer sehr schwer ist diesen mit BruteForce zu berechnen. Zudem wird ein Salt verwendet und sie ist gegen Rainbow-Tables abgesichert. Des weiteren wird dieses Verfahren von der python eigenen hashlib-Bibliothek unterstützt. Gespeichert wird das gehashete Passwort und der Salt mit base64.
17+
18+
## Status
19+
20+
Angenommen
21+
22+
## Konsequenzen
23+
24+
* Gut, weil die Sicherheit der Daten damit garantiert ist und das Passwort nicht im Klartext sondern entsprechend fester Standards verschlüsselt wurde
25+
* Der Passwortvergleich bei Anmeldung ist dadurch entwas komplexer. Das Salt muss aus der Datenbank abgefragt werden und das eingegebene Passwort muss mit diesem gehashed werden und mit dem gespeicherten Passwort verglichen werden. Es kann in der Bibliothek auch auf ein anderes Hashverfahren zugegriffen werden.
26+

docs/adr/ADR02.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# AD02: Intuitive Nutzbarkeit der Anwendung über begrenzte Schritte bis zum RecipeFinder
2+
3+
## Kontext und Problemstellung
4+
5+
Der Nutzer sollte mit möglichst wenigen Schritten vom Aufruf der Website zum RecipeFinder kommen.
6+
7+
## Betrachtete Varianten
8+
9+
* Direkte Weiterleitung von Registrierung zu RecipeFinder
10+
* Weiterleitung erst nach Anmeldung zu RecipeFinder
11+
12+
## Entscheidung
13+
14+
Gewählte Variante: Direkte Weiterleitung von Registrierung zu RecipeFinder. Erhört die Attraktivität und Benutzerfreundlichkeit, vermeidet unnötige Schritte des Benutzers.
15+
16+
## Status
17+
18+
Angenommen
19+
20+
## Konsequenzen
21+
22+
* Gut,denn der Benutzer freut sich über die gesparte Zeit und bessere Benutzererfahrung.
23+
24+
25+

docs/adr/ADR03.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# AD03: Produktive Nutzbarkeit durch Verhinderung von Informationsüberladung
2+
3+
## Kontext und Problemstellung
4+
5+
Der Nutzer sollte nicht zu viele Informationen auf der Website gleichzeitig sehen um nicht überfordert zu werden.
6+
7+
## Betrachtete Varianten
8+
9+
* Maximal 20 Rezeptvorschläge
10+
* Maximal 3 Rezeptvorschläge auf einer Seite und Scrolling bis maximal 10 Vorschläge
11+
* Maximal 10 Rezeptvorschläge
12+
* 3x3 Matrix
13+
* Listenasicht
14+
* Blockansicht
15+
16+
## Entscheidung
17+
18+
Gewählte Variante: 3x3-Matrix. Eine 3x3 Matrix gibt dem Benutzer eine angenehme Anzhal von Rezepten, die er auf einen Blick erfassen kann. Die einzelnen Rezeptkacheln sind groß genug für Bilder und weitere Rezeptinfos. Eine maximale Begrenzung ist nicht nötig, da dafür noch nicht genügen Elemente in der Datenbank enthalten sind.
19+
20+
## Status
21+
22+
Angenommen
23+
24+
## Konsequenzen
25+
26+
* Gut, dem Nutzer werden nicht zu viele Rezepte zeitgleich angezeigt, die Rezeptinfos sind gut zu erkennen.
27+
* Schlecht, bei zu vielen passenden Rezepten in der Datenbank gibt es keine Begrenzung bezüglich der maximalen Anzahl was zu langen Ladezeiten führen kann.
28+
29+

docs/adr/ADR04.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Architekturentscheidungen
2+
3+
## Kontext und Problemstellung
4+
5+
Welcher Architekturstil soll für das Projekt verwendet werden? Um eine einheitliche Umsetzung im gesamten Projekt zu gewährleisten, die auch im zeitlich realisierbar ist.
6+
7+
8+
## Betrachtete Varianten
9+
10+
* Schichtbasierter Architekturstil
11+
* Servicebasierter Architekturstil
12+
* Eventbasierter Architekturstil
13+
* "Space-based" Architekturstil
14+
* Microservices Architekturstil
15+
* MicrokernelArchitekturstil
16+
17+
## Entscheidung
18+
19+
Gewählte Variante: "Schichtbasierter Architekturstil", da diese einfach umzusetzen ist und die Verantwortlichkeiten klar trennt.
20+
21+
## Status
22+
23+
Angenommen
24+
25+
## Konsequenzen
26+
27+
* Gut, weil es einfach und leicht umzusetzen ist. <!--jeder Entwickler weiß wie LazyCook aufgebaut sein soll im Frontend und Backend sowie die Kommunikation zwischen diesen-->
28+
* Gut, weil es eine klare Trennung der Verantwortlichkeiten vorgibt.
29+
* Schlecht, weil es weniger Fehlertoleranz gibt.
30+
* Schlecht, da die Skalierbarkeit und Testbarkeit geringe sind.

docs/adr/ADR05.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Designprinzipien
2+
3+
## Kontext und Problemstellung
4+
5+
Welcher Designprinzipien soll für das Projekt verwendet werden? Um eine einheitliche Umsetzung im gesamten Projekt zu gewährleisten.
6+
7+
8+
## Betrachtete Varianten
9+
10+
* Single Responsibility Principle (SRP)
11+
* Open-Closed Principle (OCP)
12+
* Liskov Substitution Principle (LSP)
13+
* Interface Segregation Principle (ISP)
14+
* Dependency Inversion Principle (DIP)
15+
16+
## Entscheidung
17+
18+
Gewählte Variante: "Liskov Substitution Principle (LSP)", denn damit stellen wir sicher, dass sich alle unsere Speicher-Implementierung gegenüber der Geschäftslogik gleich verhalten. Diese Variante, erlaubt uns es die Datenquelle später auszutauschen, ohne den Code im Service ändern zu müssen
19+
20+
## Status
21+
22+
Angenommen
23+
24+
## Konsequenzen
25+
26+
* Gut, weil die Wartbarkeit erhöht wird.
27+
* Gut, weil die Testbarkeit verbessert wird.
28+
* Schlecht, weil der initiale Entwicklungsaufwand leicht steigt, da wir erst Interfaces definieren müssen, bevor wir die Logik implementieren können.
29+
* Schlecht, weil wir beim Design der Schnittstellen sehr sorgfältig sein müssen, um sicherzustellen, dass zukünftige Implementierungen (z. B. eine API, die Netzwerkfehler werfen kann) das Prinzip nicht verletzen.

docs/adr/ADR_Vorlage.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# {Kurzer Titel, der das gelöste Problem und die gefundene Lösung beschreibt}
2+
3+
## Kontext und Problemstellung
4+
5+
{Beschreibt den Kontext und die Problemstellung, z.B. in zwei bis drei Sätzen freiem Text oder in der Form einer Geschichte, die das Problem veranschaulicht. Eine gute Form, das Problem auszudrücken, ist auch eine Frage. Ggf. noch Links zu Boards oder Ticketing System.}
6+
7+
8+
## Betrachtete Varianten
9+
10+
* {Titel der Variante 1}
11+
* {Titel der Variante 2}
12+
* {Titel der Variante 3}
13+
*<!-- Anzahl der Varianten kann variieren -->
14+
15+
## Entscheidung
16+
17+
Gewählte Variante: "{Titel der Variante 1}", denn {Begründung, z.B. die einzige Variante, die kein Ausschlusskriterium beinhaltet | … | am besten abschneidet (siehe unten)}.
18+
19+
20+
## Status
21+
<!-- Eine Entscheidung kann „vorgeschlagen“ werden, wenn die Projektbeteiligten ihr noch nicht zugestimmt haben, oder „angenommen“, wenn sie angenommen wurde.
22+
Wenn ein späteres ADR eine Entscheidung ändert oder aufhebt, kann sie als „veraltet“ oder „überholt“ mit einem Verweis auf ihre Ersetzung gekennzeichnet werden. -->
23+
24+
## Konsequenzen
25+
26+
* Gut, weil {positive Konsequenz, z.B. Verbesserung einer oder mehrerer gewünschter Eigenschaften, …}
27+
* Schlecht, weil {negative Konsequenz, z.B. Einschränkung einer oder mehrerer gewünschter Eigenschaften, …}
28+
*<!-- Anzahl der Konsequenzen kann variieren -->

0 commit comments

Comments
 (0)