Skip to content
This repository has been archived by the owner on Oct 2, 2024. It is now read-only.

Commit

Permalink
Merge pull request #226 from wrth1337/Dokumentation
Browse files Browse the repository at this point in the history
Update documentation.md
  • Loading branch information
wrth1337 authored Mar 17, 2024
2 parents 26bbcd0 + 6c0b763 commit 75468ac
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 54 deletions.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ Key-Features:
* Enhancing user experience, "My Cargonaut" allows individuals to provide ratings for rides, fostering a sense of community trust. Additionally, the platform facilitates secure payment transactions for added convenience.
* Each user enjoys the benefits of a personalized profile, enabling them to manage their ride history, preferences, and other relevant details, contributing to a tailored and user-centric experience.

My Cargonaut" not only serves as a practical car-sharing solution but also stands as a living project for the exploration of modern software development concepts.
"My Cargonaut" not only serves as a practical car-sharing solution but also stands as a living project for the exploration of modern software development concepts.
The project places a strong emphasis on collaborative development using SCRUM, providing students with hands-on experience in agile methodologies and effective teamwork.

<p align="right">(<a href="#readme-top">back to top</a>)</p>
Expand All @@ -71,8 +71,8 @@ The project places a strong emphasis on collaborative development using SCRUM, p

## Roadmap

- [ ] 15.01.2024: First showcase of the current state of development
- [ ] 03/2024: Finish the project and hand in for inspection
- [x] 15.01.2024: First showcase of the current state of development
- [x] 03/2024: Finish the project and hand in for inspection

See the [open issues](https://github.com/wrth1337/MyCargonaut/issues) for a full list of proposed features (and known issues).

Expand Down Expand Up @@ -133,7 +133,7 @@ All members of "Group 2" were involved in the project.
[issues-url]: https://github.com/wrth1337/MyCargonaut/issues
[license-shield]: https://img.shields.io/github/license/wrth1337/MyCargonaut.svg?style=for-the-badge
[license-url]: https://github.com/wrth1337/MyCargonaut/blob/develop/LICENSE
[product-screenshot]: documentation/images/Webapp-Example.png
[product-screenshot]: documentation/images/Webapp-NewExample.png
[Next.js]: https://img.shields.io/badge/next.js-000000?style=for-the-badge&logo=nextdotjs&logoColor=white
[Next-url]: https://nextjs.org/
[React.js]: https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB
Expand Down
138 changes: 88 additions & 50 deletions documentation/documentation.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,30 @@
# Technologie Auswahl
# Projektübersicht
## Technologie Auswahl
##### **Frontend**: Angular
##### **Backend**: ExpressJS
##### **Database**: MariaDB
##### **Documentation**: Swagger
##### **Testing**: Jest für Backend ; Karma/Jasmin für Frontend
##### **CI/CD-Pipeline**:
* **Commit-Phase**: ESLint ; Backend Test ; Frontend Test
* **Report-Phase**: CodeQL
* **UAT-Phase**: -WIP-
* **SAT-Phase**: Dependabot
* **Deploy-Phase**: Building a Docker-Container from master branch

# Designs

##### **CI/CD-Pipeline:**
* **Bei Commit**: ESLint für <a href="https://github.com/wrth1337/MyCargonaut/blob/develop/.github/workflows/Lint_Frontend.yml">Front-</a> und <a href="https://github.com/wrth1337/MyCargonaut/blob/develop/.github/workflows/Lint_Backend.yml">Backend</a>
* **Bei Pull-Request:**
<ul>
<li><a href="https://github.com/wrth1337/MyCargonaut/blob/develop/.github/workflows/Frontend%20tests.yml">Frontendtests via Jasmin/Karma</a></li>
<li><a href="https://github.com/wrth1337/MyCargonaut/blob/develop/.github/workflows/Backend%20tests.yml">Backendtests via Jest</a></li>
<li><a href="https://github.com/wrth1337/MyCargonaut/blob/develop/.github/workflows/codeql.yml">CodeQL</a></li>
<li><a href="https://github.com/wrth1337/MyCargonaut/blob/develop/.github/workflows/dod-checker.yaml">Definition of Done</a></li>
</ul>
* **Permanent nebenbei:** Dependabot, integriert via GitHub

Bei der Auswahl der Tools, welche in der Pipeline verwendet werden, wurde sich an den einzelnen CI/CD-Phasen aus der Vorlesung orientiert.
Daher lassen sich die Tools den einzelnen Phasen zuordnen:
* **Commit-Phase:** Linting und Testing
* **Report-Phase:** CodeQL
* **UAT-Phase:** Definition of Done
* **SAT-Phase:** Dependabot, CodeQL
* **Deploy-Phase:** Building a Docker-Container from master branch
## Designs
### Wireframe

https://www.figma.com/file/KKf76zk0DRwQwSF8pQnTUf/MyCargonaut---Wireframe?type=design&node-id=0-1&mode=design
Expand All @@ -22,43 +35,22 @@
https://www.figma.com/file/KKf76zk0DRwQwSF8pQnTUf/MyCargonaut---Wireframe?type=design&node-id=93-2&mode=design
![img.png](images/Mockup.png)

# Code Style und Linting
Die ESLint-Konfiguration für dieses Projekt ist in der Datei `.eslintrc.json` im Backend-Verzeichnis definiert. Hier ist eine Übersicht der Konfiguration:

- `env`: Definiert die Umgebungen, in denen Ihr Code ausgeführt wird. In diesem Fall sind das `browser`, `commonjs` und `es2021`.
- `extends`: Gibt an, welche Basiskonfigurationen verwendet werden. In diesem Fall wird die Google-Stilrichtlinie verwendet.
- `rules`: Definiert die Regeln, die für Ihren Code gelten. In diesem Fall sind das:
- `indent`: Stellt sicher, dass der Code mit 4 Leerzeichen eingerückt ist.
- `require-jsdoc`: Diese Regel ist deaktiviert (0), was bedeutet, dass JSDoc-Kommentare nicht erforderlich sind.
- `max-len`: Begrenzt die maximale Zeilenlänge auf 165 Zeichen.
Diese Konfiguration hilft dabei, einen konsistenten Code-Stil im gesamten Projekt zu gewährleisten.

Generell wird das Clean-Code Paradigma angestrebt -> Kommentare, console.logs usw. sind nicht konform.
## Entity Relationship Diagramm
![img.png](images/ERD_Database.png)

# Security
In diesem Projekt werden verschiedene Maßnahmen ergriffen, um die Sicherheit des Codes zu gewährleisten:

## Dependabot
Dependabot ist ein Tool von GitHub, das automatisch Pull-Anfragen erstellt, um die Dependencies in Ihrem Projekt auf den neuesten Stand zu bringen. Es überprüft täglich die Dependencies dieses Projekts auf bekannte Sicherheitslücken und erstellt bei Bedarf eine Pull-Anfrage mit der Aktualisierung.
<br>
<br>
<br>
<br>
<br>
<br>

## GitHub CodeQL Code Scan
Zusätzlich zu Dependabot wird auch GitHub CodeQL für die statische Code-Analyse verwendet. CodeQL ist ein leistungsstarkes Analysewerkzeug, das potenzielle Sicherheitslücken im Code findet und behebt. Es scannt den Code, um Muster zu finden, die auf Sicherheitslücken hinweisen könnten, und gibt Empfehlungen zur Behebung dieser Probleme.

Durch die Kombination von Dependabot und CodeQL stellen wir sicher, dass unser Code sowohl aktuell als auch sicher ist.

# API Documentation
In diesem Projekt verwenden wir Swagger zur Dokumentation unserer Backend-Routen. Swagger ist ein Open-Source-Software-Framework, das von Entwicklern weltweit genutzt wird, um APIs zu entwerfen, zu bauen und zu dokumentieren.

Mit Swagger können wir eine interaktive Dokumentation unserer API erstellen, die es Entwicklern ermöglicht, die API zu verstehen und mit ihr zu interagieren, ohne in den Code schauen zu müssen. Es bietet eine visuelle Darstellung aller API-Endpunkte, der erwarteten Anforderungen und der Antworten, die sie liefern.

Unsere API-Dokumentation ist unter der URL `backend:3000/docs` erreichbar. Dort sind detaillierte Informationen zu jeder Route, einschließlich der erwarteten Anforderungen, der Antwortstruktur und der möglichen Fehlercodes.

![img.png](images/Swagger_API_DOC.png)

# Environment Setup
# Entwicklungsumgebung einrichten
## Setup für Entwickler
Um die Entwicklungsumgebung für dieses Projekt einzurichten, folgen Sie bitte den unten aufgeführten Schritten:

1. **Repositorium klonen**: Klonen Sie das Repositorium auf Ihren lokalen Computer mit dem Befehl `git clone <repository-url>`. Ersetzen Sie `<repository-url>` durch die URL Ihres Repositoriums.
1. **Repo klonen**: Klonen Sie das Repositorium auf Ihren lokalen Computer mit dem Befehl `git clone <repository-url>`. Ersetzen Sie `<repository-url>` durch die URL Ihres Repositoriums.

2. **Docker-Container erstellen**: Führen Sie den Befehl `docker-compose build` aus, um die Docker-Container für das Projekt zu erstellen.

Expand All @@ -70,20 +62,69 @@ Um die Entwicklungsumgebung für dieses Projekt einzurichten, folgen Sie bitte d

Bitte beachten Sie, dass Sie Node.js, npm und Docker auf Ihrem Computer installiert haben müssen, um diese Schritte ausführen zu können.

# Deployment Process
## Setup für Nutzer

Der Deployment-Prozess in diesem Projekt nutzt Docker und Docker Compose, um eine konsistente und reproduzierbare Umgebung für die Anwendung zu gewährleisten. Hier sind die Schritte, die Sie befolgen müssen, um das Projekt zu deployen:

1. **Erstellen des Docker-Images**: Führen Sie den Befehl `docker-compose build` aus, um das Docker-Image für das Projekt zu erstellen. Dieser Befehl liest die `docker-compose.yml`-Datei und erstellt Docker-Images für alle in der Datei definierten Dienste.

2. **Starten der Anwendung**: Nachdem das Docker-Image erstellt wurde, können Sie die Anwendung starten, indem Sie den Befehl `docker-compose up` ausführen. Dieser Befehl startet alle in der `docker-compose.yml`-Datei definierten Dienste in der richtigen Reihenfolge.
3. Ablauf:
1. Navigieren in das root Directory des Projektes
2. (sudo) docker compose build
3. (sudo) docker compose up
4. Über den Browser kann nun unter der URL http://localhost die Seite aufgerufen werden

Bitte beachten Sie, dass Sie Docker und Docker Compose auf Ihrem Computer installiert haben müssen, um diese Schritte ausführen zu können.

# Project Structure
Das Projekt gliedert sich in Front / Backend / Database und Dokumenatation
<br>
<br>
<br>
<br>
<br>
<br>

# Code-Qualität und Sicherheit
## Code Style und Linting
Die ESLint-Konfiguration für dieses Projekt ist in der Datei `.eslintrc.json` im Backend-Verzeichnis definiert. Hier ist eine Übersicht der Konfiguration:

- `env`: Definiert die Umgebungen, in denen Ihr Code ausgeführt wird. In diesem Fall sind das `browser`, `commonjs` und `es2021`.
- `extends`: Gibt an, welche Basiskonfigurationen verwendet werden. In diesem Fall wird die Google-Stilrichtlinie verwendet.
- `rules`: Definiert die Regeln, die für Ihren Code gelten. In diesem Fall sind das:
- `indent`: Stellt sicher, dass der Code mit 4 Leerzeichen eingerückt ist.
- `require-jsdoc`: Diese Regel ist deaktiviert (0), was bedeutet, dass JSDoc-Kommentare nicht erforderlich sind.
- `max-len`: Begrenzt die maximale Zeilenlänge auf 165 Zeichen.
Diese Konfiguration hilft dabei, einen konsistenten Code-Stil im gesamten Projekt zu gewährleisten.

Generell wird das Clean-Code Paradigma angestrebt -> Kommentare, console.logs usw. sind nicht konform.
## Security
In diesem Projekt werden verschiedene Maßnahmen ergriffen, um die Sicherheit des Codes zu gewährleisten:

### Dependabot
Dependabot ist ein Tool von GitHub, das automatisch Pull-Anfragen erstellt, um die Dependencies in Ihrem Projekt auf den neuesten Stand zu bringen. Es überprüft täglich die Dependencies dieses Projekts auf bekannte Sicherheitslücken und erstellt bei Bedarf eine Pull-Anfrage mit der Aktualisierung.

# Definition of Done
### GitHub CodeQL Code Scan
Zusätzlich zu Dependabot wird auch GitHub CodeQL für die statische Code-Analyse verwendet. CodeQL ist ein leistungsstarkes Analysewerkzeug, das potenzielle Sicherheitslücken im Code findet und behebt. Es scannt den Code, um Muster zu finden, die auf Sicherheitslücken hinweisen könnten, und gibt Empfehlungen zur Behebung dieser Probleme.

Durch die Kombination von Dependabot und CodeQL stellen wir sicher, dass unser Code sowohl aktuell als auch sicher ist.

<br>
<br>
<br>
<br>
<br>
<br>

# Dokumentation und Tests
## API Documentation
In diesem Projekt verwenden wir Swagger zur Dokumentation unserer Backend-Routen. Swagger ist ein Open-Source-Software-Framework, das von Entwicklern weltweit genutzt wird, um APIs zu entwerfen, zu bauen und zu dokumentieren.

Mit Swagger können wir eine interaktive Dokumentation unserer API erstellen, die es Entwicklern ermöglicht, die API zu verstehen und mit ihr zu interagieren, ohne in den Code schauen zu müssen. Es bietet eine visuelle Darstellung aller API-Endpunkte, der erwarteten Anforderungen und der Antworten, die sie liefern.

Unsere API-Dokumentation ist unter der URL `backend:3000/docs` erreichbar. Dort sind detaillierte Informationen zu jeder Route, einschließlich der erwarteten Anforderungen, der Antwortstruktur und der möglichen Fehlercodes.

![img.png](images/Swagger_API_DOC.png)
## Definition of Done
- 'Frontend'
- '➡️Are all functions implemented?'
- '➡️Are there front-end tests that test the appearance of the mockup?'
Expand All @@ -93,8 +134,5 @@ Das Projekt gliedert sich in Front / Backend / Database und Dokumenatation
- '➡️Are all necessary methods tested via Jest (positive and negative tests)?'
- 'Is the user story finished to such an extent that no further work is required after the pull request (excluding hotfixes and adjustments)?'

# Test Strategie
Jede Funktion wird in sofern sinnvoll umsetzbar mit Unittests getestet. Dies gilt für sowohl Front- als auch Backend. Im Frontend wird Jasmin/Karma mit der Angular Integration genutzt, Im Backend wird Jest verwendet. Zu jeder sinnvoll zu testenden Funktion sollten mindestens zwei Unittests geschrieben werden, welche die korrekte Funktionalität der jeweiligen Funktion sicherstellt.

# Entity Relationship Diagramm
![img.png](images/ERDCargonaut.png)
## Test Strategie
Jede Funktion wird in sofern sinnvoll umsetzbar mit Unittests getestet. Dies gilt für sowohl Front- als auch Backend. Im Frontend wird Jasmin/Karma mit der Angular Integration genutzt, Im Backend wird Jest verwendet. Zu jeder sinnvoll zu testenden Funktion sollten mindestens zwei Unittests geschrieben werden, welche die korrekte Funktionalität der jeweiligen Funktion sicherstellt. Um zu gewährleisten, dass der Code immer alle Testansrüche erfüllt, muss dieser bei einem PullRequest über die CI/CD Pipeline alle Tests erfolgreich durchführen.
Binary file removed documentation/images/ERDCargonaut.png
Binary file not shown.
Binary file added documentation/images/ERD_Database.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed documentation/images/Webapp-Example.png
Binary file not shown.
Binary file added documentation/images/Webapp-NewExample.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 75468ac

Please sign in to comment.