From 4e0861147a3bbd9c1a2a081355f6d2f8a0fc685e Mon Sep 17 00:00:00 2001 From: Florian Edlmayer Date: Thu, 16 Apr 2026 16:42:43 +0200 Subject: [PATCH] Presentation Update --- Praesentation_Florian_Edlmayer.md | 80 +++++++++++++++++++++---------- 1 file changed, 56 insertions(+), 24 deletions(-) diff --git a/Praesentation_Florian_Edlmayer.md b/Praesentation_Florian_Edlmayer.md index 6c2c6d4..4da1bb2 100644 --- a/Praesentation_Florian_Edlmayer.md +++ b/Praesentation_Florian_Edlmayer.md @@ -42,52 +42,84 @@ paginate: true # Backup- & Restore-Systeme (1) - **Problem**: Schutz der Daten vor Hardwareausfällen, Softwarefehlern oder Cyberangriffen. - **Lösung: Vollautomatisiertes Backup-Skript** - - **Cronjob** führt Skript nachtschlafend (`02:30 Uhr`) aus. - - Sichert die `PostgreSQL`-Datenbank im Custom-Format (`pg_dump -Fc`). - - Komprimiert den gesamten App-Dateibaum mittels `tar -cvpzf`. - - Alle Backups erhalten UTC-Zeitstempel für ordentliche Strukturierung. + +```mermaid +graph TD + Start((Start: Cronjob 02:30)) --> Init[Initialisierung] + Init --> Vars[Konfiguration laden] + + subgraph Sicherungsphase + Dir[Erstelle Backup-Ordner] --> DB[Datenbank-Backup] + DB --> Files[Dateisystem sichern] + end + + Files --> Check{Fehler?} + Check -- Ja --> Mail[Log Error & Abbruch] + Check -- Nein --> Rotate[Lade Backups-Liste] + + subgraph Speicherverwaltung + Rotate --> Count{Anzahl > 30?} + Count -- Ja --> Delete[Älteste löschen] + Count -- Nein --> Finish[Abschluss] + Delete --> Finish + end + + Finish --> Ende((Ende)) +``` --- # Backup- & Restore-Systeme (2) - **Retention Management**: - - Automatische Bereinigung alter Backups (Rotation). Nur die neuesten 30 Backups (`RETAIN=30`) bleiben vorhanden, um Speicherplatz zu sparen. + - Automatische Bereinigung alter Backups (Rotation). + - Nur die neuesten 30 Backups bleiben vorhanden, um Speicherplatz zu sparen. - **Restore-Skript**: - Kontrollierter Wiederherstellungsprozess. - - Integrierte Sicherheitsabfrage (`ja/nein`) vor dem Überschreiben. + - Integrierte Sicherheitsabfrage vor dem Überschreiben. - Umbenennen bestehender Ordner als "Rückversicherung". - - Neuanlage der Datenbank (`dropdb` / `createdb`) & Einspielen via `pg_restore`. + - Neuanlage der Datenbank & Einspielen des Backups. --- # Authentifizierung mit LinkedIn (OAuth 2.0) - **Ziel**: Reduzierung von Registrierungshürden und Steigerung der Plattformsicherheit (keine Passwörter im eigenen System speichern). -- **Ablauf**: - - Nutzer klickt auf "Via LinkedIn Anmelden". - - Weiterleitung an LinkedIn -> Freigabe durch den Nutzer. - - Oqtane External Login fängt Authorization Code ab, tauscht diesen gegen ein Access Token. - - Automatisches Mapping auf lokales Benutzerkonto mithilfe der definierten *Claims* (Name, System-ID). + +![Ablauf der OAuth-Authentifizierung (Erstellt mit ChatGPT)](./images/04-Florian/oauth-flow.png) --- # Der Premium-Bereich (1) - **Zweck**: Anreiz für aktives Engagement im Absolventenverein. -- **Ingenieur-Antrags-Workflow**: - - Nutzer können *Ingenieur-Anträge* (PDF) via Oqtane FileManager hochladen (`Entity: EngineerApplication`). - - Nach Prüfung und Freigabe durch Admins (`Approved`) wird automatisch für 12 Monate der Premium-Status vergeben (`UserPremium`). -- **Bibliothek**: - - Premium-Mitglieder können eine Übersicht aller genehmigten Vorzeige-Anträge einsehen. + +**Ingenieur-Antrags-Workflow & Prüfung:** +![Formular zum Einreichen eines Ingenieur-Antrags](./images/04-Florian/ingenieur-antrag-status.png) + +**Bibliothek genehmigter Vorzeige-Anträge:** +![Ansicht der genehmigten Ingenieur-Anträge](./images/04-Florian/ingenieur-antraege-liste.png) --- # Der Premium-Bereich (2) -- **Mitgliedersuche & Kontakt**: - - Gezielte, datensparsame Suchfunktion nach anderen Absolventen. - - Die Suche filtert sensible Daten serverseitig heraus, bevor es zum Client geschickt wird. - - **Kontakt-Mechanismus**: In-App Nachrichtensystem *ohne* Preisgabe der persönlichen E-Mail-Adresse. Oqtane übernimmt als Broker die Zustellung. -- **Architektur**: - - Umsetzung über EF Core (Tabellen: `UserPremium`, `EngineerApplication`, `PremiumEvent` wg. Audit-Trails). - - Rollenbasierte Zugriffskontrollen tief in der Service-Schicht (`IsAuthorized`). +**Architektur des Premium-Bereich-Moduls:** +```mermaid +graph LR + subgraph Client [WebAssembly] + UI[Benutzeroberfläche] --> SvcC[Service Client] + end + + subgraph Server [ASP.NET Core] + SvcC --> Ctrl[API Controller] + Ctrl --> SvcS[Service Schicht] + end + + subgraph Data [Datenbank] + SvcS --> EF[EF Core] + EF --> DB[(PostgreSQL)] + end +``` + +**Datensparsame Mitgliedersuche & Kontaktfunktion:** +![Mitgliedersuche und Kontaktfunktion für Premium-Mitglieder](./images/04-Florian/premium-mitglieder-suche.png) ---