# Vorbereitung
## Machen Sie sich mit dem EWA_Framework vertraut. Dieses findet Sie in ihrem Repository oder im Moodlekurs.

- [MVC-Architektur](#informieren-sie-sich-über-die-mvc-architektur)
- URL-Routing:
	- Über .htaccess Rewrite werden URLs automatisch umgeleitet
		- Router extrahiert die Route aus der URL
			- entscheidet, welcher Controller aufgerufen wird
- BaseController & BaseModel:
	- Abstrakte Basis-Klassen bieten wiederverwendbare Funktionen
		- `renderHtml()` und `renderJson()` für Views
		- MySQLi Datenbankverbindung für Datenbankzugriff
- Request-Lifecycle:
	- Jeder Controller folgt dem gleichen Muster
		1. processData() (Eingaben verarbeiten)
		2. `generateResponse()` (Daten abrufen & rendern)
		3. handleRequest() (alles orchestrieren)
- CRUD-Operationen:
	- Models erben von BaseModel und implementieren Standard-Methoden
		- bspw. `getAll()`, `create()`, `getById()`, `update()`, `delete()` für Datenbankoperationen

## Informieren Sie sich über die MVC Architektur
Die MVC Architektur (Model-View-Controller) ist ein Software-Design-Pattern, das die Strukturierung von Anwendungen in
drei Hauptkomponenten unterteilt: Model, View und Controller.

- Model:
	- repräsentiert die Daten und die Geschäftslogik der Anwendung
	- bspw:
		- Datenbankzugriff
		- Berechnungen
- View:
	- ist für die Darstellung der Daten und die Benutzeroberfläche verantwortlich
	- bspw:
		- HTML-Seiten
		- GUI-Komponenten
- Controller:
	- vermittelt zwischen Model und View
	- verarbeitet Benutzereingaben, aktualisiert das Model und aktualisiert die View entsprechend
	- bspw:
		- Verarbeitung von Formularen
		- Steuerung der Anwendungslogik

## Versuchen Sie mit dem Getting started vom EWA_FRAMEWORK das Zusammenspiel der verschiedenen Klassen zu verstehen. Klären Sie folgende Fragen:

- Wo erfolgt der eigentliche Aufruf zur Erstellung einer HTML-Seite?
	- im Controller, genauer gesagt in `generateResponse()`
- Was tun die Methoden getData(), generateResponse() und processData()? In welcher Reihenfolge werden sie aufgerufen?
	- `getData()`: Daten aus dem Model abrufen
	- `generateResponse()`: Daten abrufen und View rendern
	- `processData()`: Benutzereingaben verarbeiten
	- Reihenfolge: `processData()` → `generateResponse()` → `getData()`
- Was passiert im Controller, Model und View?
	- Controller:
		- verarbeitet Benutzereingaben
	- Model:
		- repräsentiert die Daten und Geschäftslogik
	- View:
		- ist für die Darstellung der Daten und die Benutzeroberfläche verantwortlich
- Was sind Partials?
	- wiederverwendbare View-Komponenten
- Wie funktioniert das Routing?
	- über Router.php
	  ```php
	  public static function generateUrl(string $path = ''): string
	  {
	  $base = rtrim(dirname((string)$_SERVER['SCRIPT_NAME']), '/');
	  $path = ltrim($path, '/');
	  return $path === '' ? $base . '/' : $base . '/' . $path;
	  }
	  ```
		- URL wird analysiert, um den entsprechenden Controller und die Aktion zu bestimmen
			- Beispiel: `http://localhost/user/profile` → Router leitet zu `UserController
- Analysieren Sie das zugelieferte Datenmodell für den Pizzaservice
- Tabellen:
	- **`article`**: `article_id` (PK, auto_increment), name, picture, price
		- 3 Einträge: Salami (8.57€), Margherita (12.5€), Hawaii (11.99€)
	- **`ordering`**: `ordering_id` (PK, auto_increment), address, ordering_time (timestamp)
		- 2 Einträge: Bestellungen vom 13.04.2020
	- **`ordered_article`** (Verknüpfungstabelle):
		- `ordered_article_id` (PK, auto_increment)
		- `ordering_id` (FK → ordering, ON DELETE CASCADE)
		- `article_id` (FK → article, ON DELETE CASCADE)
		- `status` (0=ausstehend, 1=in Zubereitung, 3=fertig)
		- 7 Einträge: Bestellte Pizzen
- **Beziehung:** Many-to-Many zwischen article ↔ ordering | **Besonderheit:** Kaskadierende Löschung
