====== LB03 - Projektauftrag ======
===== Einleitung =====
In den ersten zwei Dritteln des Moduls **M290** haben Sie sich intensiv mit **relationalen Datenbanken**,
**SQL** (DDL, DML, DCL), **ERM/ERD**, Tabellenbeziehungen, JOINs und Aggregatfunktionen beschäftigt.
In der dritten und letzten Leistungsbeurteilung (LB03) verknüpfen wir dieses Wissen mit einem **Backend-Server**:
Sie implementieren einen **Node.js/Express-Server**, der über eine **REST-API** auf Ihre MySQL-Datenbank zugreift.
Das Frontend wird **nicht** programmiert – stattdessen simulieren wir es mit **Postman**.
===== Auftrag =====
Sie wählen im 2er-Team einen der beschriebenen **Use Cases** aus (pro Klasse: jedes Thema nur einmal).
Zu diesem Use Case entwickeln Sie:
* ein **sauberes Datenmodell** (ERM/ERD),
* eine passende **MySQL-Datenbank** mit Startdaten und einem AppUser,
* einen **Express-Server**, der die wichtigsten Funktionen als **CRUD-REST-API** bereitstellt,
* ein **Video-Tutorial** (ca. 15 Minuten), in dem Sie Ihre Lösung erklären und demonstrieren. Beide bzw. alle Team-Mitglieder müssen einen Teil des Videos einsprechen.
Zielpublikum des Tutorials sind Ihre «Mit-Auszubildenden» aus dem 2. Lehrjahr, die die Themen
* Daten & Datenbanken,
* Zugriff auf Daten in einer 3-Schichten-Architektur (Client – Server – Datenbank),
* CRUD-Operationen in SQL und über eine REST-API
besser verstehen sollen.
===== Inhalt des Videotutorials =====
Das Video soll strukturiert und nachvollziehbar sein und mindestens folgende Teile enthalten:
- **Einleitung**
- Kurzvorstellung des Use Cases (Problem / Idee)
- Was Ihre App grob können soll
- **Analyse & Datenmodell**
- Erklärung des **ERM** (Entitäten, Beziehungen, Kardinalitäten)
- Erklärung des **ERD** in Crow’s-Foot-Notation (Tabellen, PK/FK, Datentypen)
- **Datenbank**
- Anlegen der Datenbank & Tabellen per SQL-Skript/Befehlen (DDL)
- Import der Startdaten per SQL-Skript/Befehlen (DML)
- Anlegen und Berechtigen eines **AppUsers** (DCL)
- **Backend / Server**
- Aufbau des Node.js/Express-Projekts (wichtigste Dateien kurz erklären)
- Erklärung der wichtigsten Routen (z.B. GET /api/…, POST /api/…)
- **Tests mit Postman**
- Vorführen der wichtigsten **REST-Endpunkte** mit Postman (Create, Read, Update, Delete) inkl. zeigen der Änderungen in der Datenbank (in Webstorm mit Datenbank-Plugin)
- Anzeigen eines Beispiels mit **JOIN** (Daten aus 2 Tabellen)
- Anzeigen eines Beispiels mit **Aggregatfunktion** (z.B. COUNT, AVG, MAX)
- Sinnvolle Verwendung von **HTTP-Statuscodes** (z.B. 200, 201, 400, 404, 500 …)
- **Reflexion**
- Jede Person im Team nennt **mindestens 2 Learnings** (positiv / herausfordernd)
- Was würden Sie beim nächsten Mal anders machen?
- **Schluss**
- Kurze Zusammenfassung Ihrer Lösung
- Ausblick / mögliche Erweiterungen
===== Wichtige Hinweise =====
**Frontend:**
Die Programmierung eines eigenen Frontends ist **kein Bestandteil** des Auftrags.
Alle Funktionen werden mit **Postman** getestet und demonstriert.
* Fokus liegt auf:
* **sauberem Datenmodell** (ERM/ERD, richtige Datentypen, PK/FK),
* korrekten **SQL-Skripten** (DDL, DML, DCL),
* funktionierendem **Express-Server** mit CRUD-Endpunkten,
* sinnvollen **Fehlermeldungen** und HTTP-Statuscodes,
* vollständigen **Datenbank-Dump**,
* verständlicher **Erklärung** im Video.
* Es reicht, wenn Ihr Server Daten **erstellen, lesen, ändern und löschen** kann (CRUD) und mindestens **einen JOIN** und **eine Aggregat-Abfrage** bereitstellt.
* Der Backend-Server darf nicht über den Root-User in der Datenbank Änderungen machen, sondern "nur" via AppUser.
===== Abgabe – Zu liefernde Lernprodukte =====
Das gesamte Projekt ist als **ein ZIP-File in Moodle** abzugeben.
Im ZIP-File müssen enthalten sein:
- **Video-Tutorial** (ca. 15 Minuten, gängiges Format: MP4, H.264 Codec, max. FullHD Auflösung (1920x1080px), min. Auflösung: 1280x720px, max. Video-Grösse: 500 MB, Bitrate: ca. 3000-5000kbps)
- **ERM** und **ERD** als PDF-Datei
- **SQL-Skript (DDL)**: Anlegen der Tabellenstruktur (.sql-File)
- **SQL-Skript (DML)**: Import / Insert der Startdaten (.sql-File)
- **SQL-Skript (DCL)**: Anlegen und Berechtigen eines AppUsers zur DB (inkl. Kommentar zu den vergebenen Rechten) (.sql-File)
- **Datenbank-Dump**: Erstellen Sie mit mysqldump/Webstorm-Export ein SQL-File, woraus die Datenbank inkl. Daten und Tabellen-Struktur wiederhergestellt werden kann. (.sql-File)
- **Node.js-Projektordner**:
- package.json
- Server-Datei(en) (z.B. app.js / index.js)
- ggf. .env-Beispiel (ohne echte Passwörter)
- README.txt mit kurzen Start-Hinweisen (z.B. 'npm install', 'npm start')
Stellen Sie sicher, dass Ihr Projekt auf einem anderen Rechner mit den
bereitgestellten Skripten **reproduzierbar** eingerichtet werden kann.