Compare commits

...

3 Commits

Author SHA1 Message Date
9a0cb1ffa0 Merge branch 'main' of https://git.kocoder.xyz/Diplomarbeit-Absolventenverein/pm
Some checks failed
Word Count / count-words (push) Failing after 43s
2026-04-16 16:43:20 +02:00
4e0861147a Presentation Update 2026-04-16 16:42:43 +02:00
35a0ebd15a New: Artikel und Video 2026-04-16 15:40:04 +02:00
3 changed files with 113 additions and 25 deletions

34
Artikel_Schulhomepage.md Normal file
View File

@@ -0,0 +1,34 @@
# AlumniHub Die neue digitale Plattform des Absolventenvereins
Im Rahmen ihrer Diplomarbeit an der HTL SZU Ungargasse haben **Konstantin Hintermayer**, **Florian Edlmayer** und **Adam Gaiswinkler** (5BHITN, Schuljahr 2025/26) eine moderne Webanwendung für den Absolventenverein entwickelt: den **AlumniHub**.
## Worum geht es?
Der Absolventenverein der HTL Ungargasse verwaltet rund 300 Alumni bisher über Excel-Tabellen und abgelaufene Softwarelizenzen. Das Diplomarbeitsteam hat eine zentrale Plattform geschaffen, die Mitgliederverwaltung, Event-Organisation und Kommunikation unter einem Dach vereint.
## Was kann der AlumniHub?
- **Anmeldetool für Treffen** Veranstaltungen erstellen, Einladungen verschicken und Anmeldungen verwalten
- **Hall of Fame** Absolventen können ihre Erfolge präsentieren, inklusive PDF-Export
- **Schwarzes Brett** Ein interaktiver Feed für Neuigkeiten, Events und Jobangebote
- **Premiumbereich** Exklusive Inhalte für Premiummitglieder mit eigenem Freigabe-Workflow
- **LinkedIn-Login** Sichere Anmeldung über OAuth 2.0
- **DSGVO-konform** Datenschutz von Anfang an mitgedacht
## Die Technik dahinter
Die Anwendung basiert auf dem Content-Management-System **Oqtane** mit **ASP.NET Core** und **Blazor**. Gehostet wird das Ganze auf einem Linux-Server mit PostgreSQL-Datenbank betrieben in der Schulinfrastruktur. Gearbeitet wurde agil nach **Scrum** in zweiwöchigen Sprints.
## Das Team
| Name | Schwerpunkt |
| :---------------------- | :----------------------------------------------------------------- |
| Konstantin Hintermayer | Projektleitung, Serverinfrastruktur, Schwarzes Brett, Auswertungen |
| Florian Edlmayer | Premiumbereich, LinkedIn-OAuth, Datenschutz (DSGVO) |
| Adam Gaiswinkler | Anmeldetool, Hall of Fame, CMS-Konfiguration, UI/UX-Design |
**Betreuung:** Ing. Thomas Gürth & Johannes Kreuzer
---
*Das Projektteam bedankt sich bei allen Unterstützern insbesondere beim Absolventenverein als Auftraggeber und bei der Schule für die Bereitstellung der Infrastruktur.*

View File

@@ -37,52 +37,84 @@
## 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`).
# Der Premium-Bereich (2)
**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)
---

22
Video_Text_Skript.md Normal file
View File

@@ -0,0 +1,22 @@
# Video Text Skript
Anfang: Willkommen zu unserem Video über den AlumniHub. Wir sind Konstantin Hintermayer, Florian Edlmayer und Adam Gaiswinkler und wir haben im Rahmen unserer Diplomarbeit an der HTL SZU Ungargasse eine moderne Webanwendung für den Absolventenverein entwickelt.
Zu beginn unseres Projekts sind wir auf viele Probleme gestoßen. Im Sommer beschäftigten wir uns mit einer Übergangslösung um das kommende Treffen der Absolventen im Jahr 2025 zu ermöglichen. Ein weiteres Problem war unser Team Downsizing von 6 auf 3 Mitglieder. Dadurch mussten wir unsere ursprünglichen Pläne stark überdenken und uns auf das Wesentliche konzentrieren.
Außerdem sind wir immer wieder auf Probleme mit unserer Serverinfrastruktur gestoßen.
Ein zentraler Teil unserer Arbeit ist die kontinuierliche Integration unserer Software. Wir haben uns für Git als Versionsverwaltungssystem entschieden und hosten eine Gitea Instanz. Bei veröffentlichen eines tags wird automatisch ein neues Debian Paket gebaut und in unsererem Debian Package Registry bereitgestellt.Durch diese automatisierung ist die veröffentlichung von neuen Softwareversionen stark vereinfacht worden.
Das Hauptziel des Projektes war es eine moderne Webanwendung für den Absolvenntenverein zu kreieren. Die es ermöglicht einfach Events und treffen zu organisieren mithilfe unseres EventRegistration Moduls. Weiter Funktionen sind die Hall of Fame, wo Absolventen ihre Erfolge präsentieren können, das Schwarze Brett für Neuigkeiten und Jobangebote und der Premiumbereich für exklusive Inhalte. Diese sind im Laufe der Entwicklung hinzugekommen.
Nun wollen wir Ihnen unsere Webanwendung genauer vorstellen.
EventRegistration Modul:
Hall of Fame Modul:
Schwarzes Brett Modul:
Premiumbereich Modul: