Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
de:modul:m290_guko:leistungsbeurteilungen:03_lb:b_projektbeschrieb [2026/08/13 16:06] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1de:modul:m290_guko:leistungsbeurteilungen:03_lb:b_projektbeschrieb [2026/08/13 16:06] (aktuell) – ↷ Seite von modul:m290_guko:leistungsbeurteilungen:03_lb:b_projektbeschrieb nach de:modul:m290_guko:leistungsbeurteilungen:03_lb:b_projektbeschrieb verschoben msuter
Zeile 1: Zeile 1:
 +====== LB03 – Projektarbeit: Backend-API mit Node.js/Express + MySQL ======
 +
 +===== 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 Sie dieses Wissen mit einem Backend-Server: Sie implementieren einen Node.js/Express-Server, der über eine REST-API auf Ihre MySQL-Datenbank zugreift. Ein Frontend wird nicht programmiert – stattdessen simulieren Sie es mit Postman.
 +
 +<WRAP box round center 80%>
 +**Wichtig:** Das Erklärvideo (Screencast) ist Teil der Leistung.  
 +Beide Lernenden müssen darin vorkommen und jeweils einen Teil von Setup/Code verständlich erklären.
 +</WRAP>
 +
 +
 +===== 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)
 +
 +
 +===== 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-API bereitstellt,
 +  * 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
 +  * 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.
 +
 +
 +===== 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 Video-Tutorials (Screencast, ca. 15 Minuten) =====
 +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) + kurzer Hinweis, warum diese Rechte sinnvoll sind
 +  - **Backend / Server**
 +    - 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/…'')
 +  - **Tests mit Postman**
 +    - Vorführen der CRUD-Endpunkte (Create, Read, Update, Delete)
 +    - dabei **zeigen**, dass sich die Daten in der Datenbank wirklich ändern (WebStorm DB-Plugin)
 +    - mindestens **eine JOIN-Demo**
 +    - mindestens **eine Aggregat-Demo**
 +    - sinnvolle HTTP-Statuscodes (z.B. 200, 201, 400, 404, 500)
 +  - **Reflexion**
 +    - Jede Person 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
 +
 +<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:
 +
 +[[https://bzzch-my.sharepoint.com/:v:/g/personal/guido_koch_bzz_ch/IQAMJFvbSMhfQIVI9p8cxRT9ARThohsE9YX113Qo36bG0CM?e=XnvFVi&nav=eyJyZWZlcnJhbEluZm8iOnsicmVmZXJyYWxBcHAiOiJTdHJlYW1XZWJBcHAiLCJyZWZlcnJhbFZpZXciOiJTaGFyZURpYWxvZy1MaW5rIiwicmVmZXJyYWxBcHBQbGF0Zm9ybSI6IldlYiIsInJlZmVycmFsTW9kZSI6InZpZXcifX0%3D|Beispiel-Video]]
 +\\
 +Für das Erstellen des Screencasts empfiehlt sich eine entsprechende Software zu nutzen: Ich habe die Trial Version von **Camtasia** benutzt (darum die Wassermarke). Camtasia können sie hier downloaden: https://www.techsmith.com/download/camtasia/
 +\\
 +Alternativ bietet auch Microsoft in Office365 die Software **Clipchamp** an, welche ähnliche Funktionalitäten hat. Mit Ihrem BZZ-Account müssten Sie dazu gratis Zugriff haben: https://www.microsoft.com/de-ch/microsoft-365/clipchamp?market=ch
 +</WRAP>
 +
 +
 +
 +===== Abgabe – zu liefernde Lernprodukte=====
 +Folgende Teile sind Teil der Abgabe:
 +
 +  - **Video-Tutorial** (ca. 15 Min)
 +    * 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>
 +
 +
 +===== Bewertungsraster (100 Punkte) =====
 +
 +^ Bereich ^ Max. Punkte ^ Voll erfüllt ^ Teilweise erfüllt ^ Nicht erfüllt ^
 +| **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>
  
  • de/modul/m290_guko/leistungsbeurteilungen/03_lb/b_projektbeschrieb.txt
  • Zuletzt geändert: 2026/08/13 16:06
  • von msuter