Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
modul:m290_guko:leistungsbeurteilungen:03_lb:b_projektbeschrieb [2025/11/30 20:53] gkochmodul:m290_guko:leistungsbeurteilungen:03_lb:b_projektbeschrieb [2026/01/19 14:08] (aktuell) gkoch
Zeile 1: Zeile 1:
-====== LB03 - Projektauftrag ======+====== LB03 – Projektarbeit: Backend-API mit Node.js/Express + MySQL ======
  
 ===== Einleitung ===== ===== 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 den ersten zwei Dritteln des Moduls **M290** haben Sie sich intensiv mit **relationalen Datenbanken**,   +In der dritten und letzten Leistungsbeurteilung (LB03) verknüpfen Sie dieses Wissen mit einem Backend-Server: Sie implementieren einen Node.js/Express-Serverder über eine REST-API auf Ihre MySQL-Datenbank zugreift. Ein Frontend wird nicht programmiert – stattdessen simulieren Sie es mit Postman.
-**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**: +<WRAP box round center 80%> 
-Sie implementieren einen **Node.js/Express-Server**, der über eine **REST-API** auf Ihre MySQL-Datenbank zugreift.   +**Wichtig:** Das Erklärvideo (Screencast) ist Teil der Leistung.   
-Das Frontend wird **nicht** programmiert – stattdessen simulieren wir es mit **Postman**.+Beide Lernenden müssen darin vorkommen und jeweils einen Teil von Setup/Code verständlich erklären. 
 +</WRAP>
  
  
-===== Auftrag =====+===== Rahmenbedingungen ===== 
 +  * **Sozialform:** Partnerarbeit (2er-Team) 
 +  * **Zeit:** ca. 7 Lektionen Projektzeit im Unterricht (Inputs jeweils zu Beginn der Lektion) 
 +  * **Abgabe:** Letzter Unterrichtstag des Semesters, **21:00 Uhr** 
 +  * **Benotung:** Lineare Notenskala (siehe unten)
  
-Sie wählen im 2er-Team einen der beschriebenen **Use Cases** aus (pro Klasse: jedes Thema nur einmal).  + 
 +===== 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: Zu diesem Use Case entwickeln Sie:
  
-  * ein **sauberes Datenmodell** (ERM/ERD), +  * ein sauberes Datenmodell (ERM/ERD), 
-  * eine passende **MySQL-Datenbank** mit Startdaten und einem AppUser, +  * eine passende MySQL-Datenbank mit Startdaten und einem AppUser, 
-  * einen **Express-Server**, der die wichtigsten Funktionen als **CRUD-REST-API** bereitstellt, +  * einen Express-Server, der die wichtigsten Funktionen als CRUD-API bereitstellt, 
-  * ein **Video-Tutorial** (ca. 15 Minuten), in dem Sie Ihre Lösung erklären und demonstrieren. +  * ein Video-Tutorial (Screencast) von ca. 15 Minuten, in dem Sie Ihre Lösung erklären und demonstrieren.
- +
-Zielpublikum des Tutorials sind Ihre «Mit-Auszubildenden» aus dem 2. Lehrjahr, die die Themen+
  
 +Zielpublikum des Tutorials sind Ihre Mit-Auszubildenden aus dem 2. Lehrjahr, die die Themen
   * Daten & Datenbanken,   * Daten & Datenbanken,
   * Zugriff auf Daten in einer 3-Schichten-Architektur (Client – Server – Datenbank),   * Zugriff auf Daten in einer 3-Schichten-Architektur (Client – Server – Datenbank),
-  * CRUD-Operationen in SQL und über eine REST-API+  * CRUD-Operationen in SQL und über eine REST-API besser verstehen sollen.
  
-besser verstehen sollen. 
  
 +===== Anforderungen (MUSS) =====
 +<WRAP box round center 80%>
 +**Mindestanforderungen (MUSS)**
 +  * Backend läuft (Start über ''npm run dev'' oder ''npm start'' oder ''node index.js'')
 +  * Mindestens **2 Tabellen** in MySQL (mit PK/FK)
 +  * **CRUD** vollständig über API-Endpoints (z.B. ''/api/serien'', ''/api/serien/:id'' mit entsprechenden HTTP-Methoden GET, POST, PUT, DELETE)
 +  * Mindestens **eine JOIN-Route** (Daten aus 2 Tabellen)
 +  * Mindestens **eine Aggregat-Route** (COUNT/AVG/SUM/MIN/MAX)
 +  * Zugriff auf DB **nicht** als ''root'', sondern über einen **AppUser** (Least Privilege)
 +  * Video-Tutorial, wo alle Team-Mitglieder darin vorkommen und einen Teil erklären. 
 +</WRAP>
  
-===== Inhalt des Videotutorials ===== 
  
 +===== Inhalt des Video-Tutorials (Screencast, ca. 15 Minuten) =====
 Das Video soll strukturiert und nachvollziehbar sein und mindestens folgende Teile enthalten: Das Video soll strukturiert und nachvollziehbar sein und mindestens folgende Teile enthalten:
  
Zeile 38: Zeile 54:
     - Was Ihre App grob können soll     - Was Ihre App grob können soll
   - **Analyse & Datenmodell**   - **Analyse & Datenmodell**
-    - Erklärung des **ERM** (Entitäten, Beziehungen, Kardinalitäten) +    - Erklärung des ERM (Entitäten, Beziehungen, Kardinalitäten) 
-    - Erklärung des **ERD** in Crow’s-Foot-Notation (Tabellen, PK/FK, Datentypen)+    - Erklärung des ERD in Crow’s-Foot-Notation (Tabellen, PK/FK, Datentypen)
   - **Datenbank**   - **Datenbank**
     - Anlegen der Datenbank & Tabellen per SQL-Skript/Befehlen (DDL)     - Anlegen der Datenbank & Tabellen per SQL-Skript/Befehlen (DDL)
     - Import der Startdaten per SQL-Skript/Befehlen (DML)     - Import der Startdaten per SQL-Skript/Befehlen (DML)
-    - Anlegen und Berechtigen eines **AppUsers** (DCL)+    - Anlegen und Berechtigen eines AppUsers (DCL) + kurzer Hinweis, warum diese Rechte sinnvoll sind
   - **Backend / Server**   - **Backend / Server**
-    - Aufbau des Node.js/Express-Projekts (wichtigste Dateien kurz erklären) +    - Aufbau des Node.js/Express-Projekts (wichtigste Dateien kurz erklären: ''index.js'', ''package.json''
-    - Erklärung der wichtigsten Routen (z.B. GET /api/…, POST /api/…)+    - Erklärung der wichtigsten Routen (z.B. ''GET /api/…''''POST /api/…'')
   - **Tests mit Postman**   - **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) +    - Vorführen der CRUD-Endpunkte (Create, Read, Update, Delete) 
-    - Anzeigen eines Beispiels mit **JOIN** (Daten aus 2 Tabellen) +    - dabei **zeigen**, dass sich die Daten in der Datenbank wirklich ändern (WebStorm DB-Plugin) 
-    - Anzeigen eines Beispiels mit **Aggregatfunktion** (z.B. COUNT, AVG, MAX) +    - mindestens **eine JOIN-Demo** 
-    - Sinnvolle Verwendung von **HTTP-Statuscodes** (z.B. 200, 201, 400, 404, 500 )+    - mindestens **eine Aggregat-Demo** 
 +    - sinnvolle HTTP-Statuscodes (z.B. 200, 201, 400, 404, 500)
   - **Reflexion**   - **Reflexion**
-    - Jede Person im Team nennt **mindestens 2 Learnings** (positiv / herausfordernd)+    - Jede Person nennt mindestens **2 Learnings** (positiv / herausfordernd)
     - Was würden Sie beim nächsten Mal anders machen?     - Was würden Sie beim nächsten Mal anders machen?
   - **Schluss**   - **Schluss**
Zeile 59: Zeile 76:
     - Ausblick / mögliche Erweiterungen     - Ausblick / mögliche Erweiterungen
  
 +<WRAP box round center 80%>
 +**Wichtig für die Bewertung des Verständnisses**
 +  * Beide Teammitglieder müssen im Video **hörbar** sein (eigene Erklärung, nicht nur „ja genau“).
 +  * Beide müssen je einen **eigenen Teil** erklären (z.B. Person A: DB/SQL/DCL, Person B: API-Routen/Postman/Statuscodes).
 +  * Sie müssen während dem Video zeigen, dass Sie Ihren eigenen Code verstehen (Warum dieser Endpoint? Warum dieser JOIN? Was bedeutet ''req.params.id''?).
 +</WRAP>
 +<WRAP center round info 60%>
 +Ein Beispiel-Video können Sie sich hier anschauen:
  
-===== Wichtige Hinweise ===== +[[https://bzzch-my.sharepoint.com/:v:/g/personal/guido_koch_bzz_ch/IQAMJFvbSMhfQIVI9p8cxRT9ARThohsE9YX113Qo36bG0CM?e=XnvFVi&nav=eyJyZWZlcnJhbEluZm8iOnsicmVmZXJyYWxBcHAiOiJTdHJlYW1XZWJBcHAiLCJyZWZlcnJhbFZpZXciOiJTaGFyZURpYWxvZy1MaW5rIiwicmVmZXJyYWxBcHBQbGF0Zm9ybSI6IldlYiIsInJlZmVycmFsTW9kZSI6InZpZXcifX0%3D|Beispiel-Video]] 
- +\\ 
-<WRAP center round box 80%> +Für das Erstellen des Screencasts empfiehlt sich eine entsprechende Software zu nutzenIch habe die Trial Version von **Camtasia** benutzt (darum die Wassermarke)Camtasia können sie hier downloaden: https://www.techsmith.com/download/camtasia/ 
-**Frontend:**   +\\ 
-<color #ed1c24>Die Programmierung eines eigenen Frontends ist **kein Bestandteil** des Auftrags.</color>   +Alternativ bietet auch Microsoft in Office365 die Software **Clipchamp** an, welche ähnliche Funktionalitäten hatMit Ihrem BZZ-Account müssten Sie dazu gratis Zugriff haben: https://www.microsoft.com/de-ch/microsoft-365/clipchamp?market=ch
-Alle Funktionen werden mit **Postman** getestet und demonstriert.+
 </WRAP> </WRAP>
  
-  * 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, 
-    * 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 =====+===== Abgabe – zu liefernde Lernprodukte===== 
 +Folgende Teile sind Teil der Abgabe:
  
-<WRAP center round box 80%> +  - **Video-Tutorial** (ca. 15 Min) 
-<color #ed1c24>Das gesamte Projekt ist als **ein ZIP-File in Moodle** abzugeben.</color>+    * Format: MP4 (H.264), max. FullHD (1920×1080), min. 1280×720 
 +    * Max. Grösse: 1 GB (Bitrate ca. 3000–5000 kbps) 
 +  - **ERM und ERD** als PDF-Datei oder PNG 
 +  - **SQL-Skript (DDL)**: Anlegen der Tabellenstruktur (Als PDF/Word oder ''.sql''-File) 
 +  - **SQL-Skript (DML)**: Import / Insert der Startdaten (Als PDF/Word oder ''.sql''-File) 
 +  - **SQL-Skript (DCL)**: AppUser erstellen + Rechte vergeben (Als PDF/Word oder ''.sql''-File))   
 +  - **Datenbank-Dump**: vollständiges SQL-File (Struktur + Daten) zum Wiederherstellen (''.sql''-File) 
 +  - **Node.js-Projektordner** 
 +    * ''package.json'' 
 +    * Server-Datei(en) (z.B. ''index.js'', ''connect.js''
 + 
 +<WRAP box round center 80%> 
 +**Reproduzierbarkeit:** Ihr Projekt muss auf einem anderen Rechner mit Ihren Skripten nachvollziehbar eingerichtet werden können.
 </WRAP> </WRAP>
  
-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) +===== Bewertungsraster (100 Punkte=====
-  - **ERM** und **ERD** als PDF-Datei +
-  - **SQL-Skript (DDL)**: Anlegen der Tabellenstruktur +
-  - **SQL-Skript (DML)**: Import / Insert der Startdaten +
-  - **SQL-Skript (DCL)**: Anlegen und Berechtigen eines AppUsers zur DB (inkl. Kommentar zu den vergebenen Rechten) +
-  - **Datenbank-Dump**: Erstellen Sie mit mysqldump ein SQL-File, woraus die Datenbank inkl. Daten und Tabellen-Struktur wiederhergestellt werden kann. +
-  - **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   +^ Bereich ^ Max. Punkte ^ Voll erfüllt ^ Teilweise erfüllt ^ Nicht erfüllt ^ 
-bereitgestellten Skripten **reproduzierbar** eingerichtet werden kann.+| **1. Projekt-Setup & Reproduzierbarkeit** | **8** | Start/Setup klar (alle Dateien sind vorhanden und ausführbar), Server startet zuverlässig, Abgabe sauber strukturiert | Läuft grundsätzlich, aber Setup unklar/fehleranfällig | Start nicht möglich / unvollständig | 
 +| **2. Datenmodell (ERM/ERD)** | **12** | Entitäten/Beziehungen korrekt, PK/FK nachvollziehbar, Kardinalitäten stimmen | Modell vorhanden, aber Lücken/FK/Kardinalitäten unklar | Kein brauchbares Modell | 
 +| **3. MySQL-Implementierung (DDL + Datentypen + Constraints)** | **10** | DDL ausführbar, Datentypen sinnvoll, PK/FK korrekt, Constraints passend | DDL vorhanden, aber Mängel bei Datentypen/Keys/Constraints | Nicht ausführbar / unpassend | 
 +| **4. Startdaten (DML)** | **6** | Mehrere realistische Datensätze, gut testbar | Wenige/teilweise unpassende Daten | Keine Startdaten | 
 +| **5. AppUser & Rechte (DCL, Least Privilege)** | **6** | AppUser funktioniert, Rechte minimal sinnvoll, keine ''root''-Nutzung | AppUser vorhanden, aber Rechte unklar/zu breit | Kein AppUser / root verwendet | 
 +| **6. API Design & Struktur** | **8** | Konsistente Pfade (''/api/...''), sinnvolle Ressourcen, ''/:id'' korrekt | Routen vorhanden, aber inkonsistent/unsauber | Unklar/chaotisch | 
 +| **7. CRUD über Backend → MySQL** | **10** | ''GET/POST/PUT/DELETE'' funktionieren, DB ändert sich sichtbar, SQL sauber | CRUD teilweise fehlerhaft/unvollständig | CRUD nicht nachweisbar | 
 +| **8. JOIN-Route** | **6** | Mindestens eine Route mit JOIN, Ergebnis sinnvoll | JOIN vorhanden, aber Ergebnis unklar/falsch | Kein JOIN | 
 +**9. Aggregat-Route (GROUP BY)** | **6** | Mindestens eine Aggregat-Route korrekt (COUNT/AVG/SUM etc.) | Aggregat vorhanden, aber unklar/falsch | Kein Aggregat | 
 +| **10. Validierung, Fehlerbehandlung, HTTP-Statuscodes** | **8** | 400/404/500 sinnvoll, Pflichtfelder geprüft, verständliche Fehlermeldungen | Teilweise vorhanden, teils falsche Codes | Keine Validierung/Fehlerhandling | 
 +| **11. Video-Tutorial (Screencast) & Verständnisnachweis** | **20** | Struktur klar, beide erklären aktiv, Demo mit Postman + DB sichtbar, reflektiert, alle APIs erklärt und vorgeführt | Video vorhanden, aber unklar/zu kurz/Teamanteil ungleich | Kein Video / Verständnis nicht nachweisbar | 
 + 
 +<WRAP box round center 80%> 
 +**Eigenleistung / Verständnis** 
 +Sie müssen Ihre Lösung erklären können (SQL, Datenmodell, API, Tests).   
 +Wenn zentrale Teile nicht fachlich korrekt begründet werden können, kann der entsprechende Bereich mit **0 Punkten** bewertet werden. 
 + 
 +**Verspätete Abgaben** 
 +Geben Sie die Projektarbeit verspätet ab, wird pro 24h-Verspätung eine ganze Note abgezogen. 
 + 
 +**Die Projektarbeit ist der dritte Teil der Modulnote** und daher __nicht optional__. Bei Nicht-Abgabe (ohne Dispens/ärztliches Zeugnis) wird die Note 1 eingetragen. 
 +</WRAP> 
 + 
 + 
 +===== Notenberechnung (lineare Skala) ===== 
 +<WRAP box round center 80%> 
 +**Note = 1.0 + 5.0 × (Punkte / 100)**   
 +(Beispiel: 80 Punkte → 1.0 + 5.0 × 0.80 = 5.0) 
 +</WRAP>
  
  • modul/m290_guko/leistungsbeurteilungen/03_lb/b_projektbeschrieb.1764532406.txt.gz
  • Zuletzt geändert: 2025/11/30 20:53
  • von gkoch