2 Commits

Author SHA1 Message Date
0b774f00b7 Dassler...
All checks were successful
Word Count / count-words (pull_request) Successful in 31s
2026-03-19 07:23:43 +00:00
d6b360a0f8 New: Danksagung
All checks were successful
Word Count / count-words (pull_request) Successful in 32s
Gemini Writing Review / gemini-review (pull_request) Successful in 1m9s
2026-03-13 22:25:12 +00:00
5 changed files with 198 additions and 661 deletions

13
Allgemein.md Normal file
View File

@@ -0,0 +1,13 @@
## Danksagung
Obwohl die Umsetzung dieses Projektes durch das Projektteam selbst erfolgte, gab es eine Reihe an Personen, die uns tatkräftig unterstützt haben.
An erster Stelle möchten wir uns bei Herrn Prof. Thomas Gürth und Herrn Prof. Johannes Kreuzer bedanken. Ohne Ihre umfangreiche Unterstützung, Kreativität und fachliche Kompetenz wäre das Projekt in dieser Form nicht realisierbar gewesen. Sie beide haben uns durch dieses Projekt begleitet, uns mit wertvollen Ideen und Hilfestellungen versorgt und uns gleichzeitig den notwendigen Freiraum für eigenständiges Lernen und Arbeiten gelassen.
Neben einer exzellenten Betreuung bedarf eine Diplomarbeit auch eines engagierten Auftraggebers. Bei Lukas Aigner bedanken wir uns für das Vertrauen in unser Team und die Ermöglichung dieses Projektes. Trotz zeitlicher Verzögerungen im Rahmen der Arbeit, erfuhren wir von seiner Seite großes Verständnis und fanden stets eine konstruktive Basis für Diskussionen vor.
Ein besonders komplexer Aspekt dieser Arbeit war die Infrastruktur, für die im Prozess drei verschiedene Lösungen evaluiert wurden. Wir danken Stefan Reinel und dem Team von LiveDesign für die bereitwillige Unterstützung. Ohne die aktuelle Infrastruktur hätten wir bis heute keine zufriedenstellende Lösung für unsere Homepage gefunden.
Als wir im Oktober kurzfristig eine neue Produktionsumgebung benötigten, wurde uns unbürokratisch durch die Schule geholfen. Herr Prof. Harald Dassler und Herr Prof. Andreas Resch haben uns zur Weiterentwicklung eine virtuelle Maschine zur Verfügung gestellt und den externen Zugriff ermöglicht. Es ist nicht selbstverständlich, dass in einer Institution dieser Größe ein solcher Wunsch so schnell und unkompliziert umgesetzt wird.
Für den „frischen Wind“ und das sorgfältige Korrekturlesen der Arbeit bedanken wir uns herzlich bei Frau Prof. Gertrude Brindlmayer. Ihr geschulter Blick auf Details, die dem Team im Arbeitsprozess entgangen waren, stellte eine große Bereicherung für die finale Qualität dieser Arbeit dar.

View File

@@ -1,84 +1,84 @@
# Diplomarbeitsbuch Individueller Teil # Diplomarbeitsbuch
--- ---
## 1. Einleitung ## 1. Einleitung
### Ausgangssituation
### Motivation ### Motivation
Zu Beginn des Projekts war meine persönliche Motivation überschaubar. Wie viele Schulprojekte startete auch AlumniHub zunächst als eine Pflichtaufgabe ich war zwar von Anfang an dabei, jedoch ohne besonders großes Interesse am Thema. Das Projekt war zu Beginn eine von vielen schulischen Anforderungen, und ich sah es zunächst nicht als etwas, mit dem ich mich wirklich identifizieren würde. Die Aufgabenstellung klang zwar interessant, aber der persönliche Bezug fehlte noch. ### Kurzbeschreibung des Projekts
Das änderte sich im Laufe des Projekts grundlegend und zwar durch einen Umstand, den ich anfangs nicht als Chance gesehen hätte: die Teamverkleinerung. Als das Team von ursprünglich sechs auf drei Personen verkleinert wurde, änderte sich meine Rolle schlagartig. Plötzlich trug ich deutlich mehr Verantwortung nicht nur für meinen eigenen Bereich, sondern auch für das Gesamtprojekt. Aufgaben, die ursprünglich andere übernehmen sollten, lagen nun in meinen Händen. Diese Situation zwang mich, proaktiver zu handeln, eigenständiger zu entscheiden und tiefer in die Materie einzutauchen als ursprünglich geplant.
Genau in diesem Moment begann mein Interesse zu wachsen. Je mehr Verantwortung ich übernahm, desto mehr identifizierte ich mich mit dem Projekt und seinen Zielen. Ich merkte, dass die Entscheidungen, die ich traf, direkte Auswirkungen auf das Endergebnis hatten und das motivierte mich, die Arbeit wirklich gut zu machen und nicht nur fertigzustellen.
Die technische Herausforderung, eine moderne Webanwendung mit Blazor und ASP.NET umzusetzen, sowie die Möglichkeit, ein echtes System für eine reale Organisation zu entwickeln, wurden zur echten Motivation. Die Aufgabenstellung bot mir die Chance, theoretisches Wissen aus dem Unterricht in einem praxisnahen Umfeld anzuwenden und gleichzeitig einen konkreten Mehrwert für den Absolventenverein zu schaffen. Rückblickend war die Teamverkleinerung obwohl sie damals als Problem wahrgenommen wurde einer der wichtigsten Faktoren für meine persönliche Entwicklung im Rahmen dieses Projekts.
### Individuelle Themenstellung
Entwicklung des Anmeldetools und Hall-of-Fame-Moduls für Oqtane, Integration in das bestehende CMS-System, Responsive UI-Entwicklung mit Blazor und ASP.NET Core
### Teamrolle
Developer, Tester der eigenen Module
### Untersuchungsanliegen
Modulentwicklung mit Blazor und ASP.NET Core, Integration eigenständiger Module in die Oqtane-Architektur, Entwicklung reaktiver Benutzeroberflächen mit Blazor-Komponenten, Responsive UI-Design mit Bootstrap und eigenem CSS, PDF-Generierung mit QuestPDF, Fehlerbehebung und Optimierung der mobilen Darstellung
### Persönlicher Aufgabenbereich ### Persönlicher Aufgabenbereich
Der persönliche Aufgabenbereich umfasste die Entwicklung der beiden zentralen CMS-Module der Plattform: das Anmeldetool für Veranstaltungen sowie das Hall-of-Fame-Modul. Beide Module wurden als eigenständige, wiederverwendbare Oqtane-Module konzipiert und vollständig in C# und Blazor implementiert. Neben der technischen Umsetzung lag ein besonderer Fokus auf der Benutzerfreundlichkeit, der responsiven Darstellung und der nahtlosen Integration in das bestehende CMS-System.
### Abgrenzung der Arbeit ### Abgrenzung der Arbeit
Das Datenbankdesign sowie die Infrastruktur und das Server-Setup waren nicht Teil meines persönlichen Aufgabenbereichs und wurden von anderen Teammitgliedern verantwortet. Mein persönlicher Anteil beschränkt sich auf die Entwicklung der Anwendungsschicht, konkret auf die Implementierung der beiden CMS-Module das Anmeldetool und das Hall-of-Fame-Modul sowie deren Integration in das bestehende System. Die Datenbankinfrastruktur war zum Projektstart bereits vorhanden und wurde nicht im Rahmen dieser Arbeit konzipiert. Die Diplomarbeit beschränkt sich auf die Entwicklung der Anwendungsschicht, bestehend aus CMS-Konfiguration, Modul- und Theme-Entwicklung.
### Individuelle Themenstellung
--- ---
## 2. Technologischer Überblick ## 3. Projektumfeld & Rahmenbedingungen
In diesem Kapitel werden die Technologien und Werkzeuge vorgestellt, die für die Entwicklung des Anmeldetools, des Hall-of-Fame-Moduls und des Oqtane-Themes eingesetzt wurden. Die Beschreibungen sind dabei so gestaltet, dass sie auch für Leserinnen und Leser ohne technischen Hintergrund verständlich sind. ### Einsatz eines bestehenden CMS (Oqtane)
### 2.1 C# und ASP.NET Core ### Teamarbeit
C# ist eine moderne Programmiersprache von Microsoft, die besonders für die Entwicklung von Webanwendungen und Softwaresystemen geeignet ist. Sie ist klar strukturiert, gut lesbar und weit verbreitet in der professionellen Softwareentwicklung. ASP.NET Core ist ein Framework also eine Art Werkzeugkasten das auf C# aufbaut und die Entwicklung von Webseiten und Webanwendungen vereinfacht. Es stellt vorgefertigte Bausteine bereit, sodass man nicht alles von Grund auf neu programmieren muss. Für AlumniHub bildete ASP.NET Core die technische Grundlage aller entwickelten Module. Das Projektteam wurde im Verlauf des Projekts von sechs auf drei Personen reduziert.
### 2.2 Blazor ### Schulisches Umfeld (HTL)
Blazor ist ein Framework, das es ermöglicht, interaktive Weboberflächen direkt in C# zu entwickeln. Normalerweise werden solche Oberflächen also alles, was der Benutzer auf dem Bildschirm sieht und mit dem er interagiert mit einer anderen Programmiersprache namens JavaScript umgesetzt. Blazor erlaubt es, dasselbe in C# zu schreiben, was die Entwicklung vereinheitlicht und übersichtlicher macht. Konkret bedeutet das: Wenn ein Benutzer beispielsweise auf den „Zusagen"-Button klickt, reagiert die Seite sofort und aktualisiert sich automatisch ohne dass die gesamte Seite neu geladen werden muss. ### Zeitliche Rahmenbedingungen
### 2.3 Oqtane
Oqtane ist ein Content-Management-System (CMS) also eine Software, mit der Webseiten und deren Inhalte verwaltet werden können, ähnlich wie WordPress oder Typo3. Das Besondere an Oqtane ist, dass es vollständig auf Blazor und C# aufbaut und eine modulare Architektur besitzt: Man kann eigene Erweiterungen sogenannte Module entwickeln und in das System einbinden, ohne den Kern der Software verändern zu müssen. Für AlumniHub wurde Oqtane als Grundlage gewählt, weil es Benutzerverwaltung, Seitenstruktur und viele weitere Standardfunktionen bereits mitbringt und somit viel Entwicklungsaufwand spart.
### 2.4 Bootstrap und CSS
CSS (Cascading Style Sheets) ist die Sprache, mit der das Aussehen einer Webseite festgelegt wird also Farben, Schriftarten, Abstände und das Layout. Bootstrap ist eine fertige Sammlung von CSS-Regeln und Hilfsmitteln, die von Twitter entwickelt wurde und kostenlos verfügbar ist. Der große Vorteil von Bootstrap ist, dass es sogenanntes Responsive Design einfach umsetzbar macht: Die Webseite passt sich automatisch an verschiedene Bildschirmgrößen an egal ob Desktop, Tablet oder Smartphone. Für AlumniHub wurde Bootstrap als Basis verwendet, ergänzt durch eigenes CSS für das individuelle Erscheinungsbild der Plattform.
### 2.5 QuestPDF
QuestPDF ist eine kostenlose Open-Source-Bibliothek also eine fertige Programmsammlung die es ermöglicht, PDF-Dokumente direkt aus C#-Code heraus zu erstellen. Anstatt ein PDF manuell zu gestalten, beschreibt man im Code wie das Dokument aussehen soll, und QuestPDF generiert daraus automatisch eine fertige PDF-Datei. Im Hall-of-Fame-Modul wurde QuestPDF eingesetzt, um jedem Absolventen zu ermöglichen, sein eigenes Profil als visuell ansprechendes PDF herunterzuladen.
### 2.6 Gitea
Wenn mehrere Personen gemeinsam an einem Softwareprojekt arbeiten, braucht man ein System, das alle Änderungen am Code nachverfolgt und verhindert, dass sich Änderungen verschiedener Personen gegenseitig überschreiben. Dieses Konzept nennt sich Versionskontrolle. Gitea ist eine selbst gehostete Plattform für genau diesen Zweck ähnlich wie GitHub, aber auf einem eigenen Server betrieben. Jede Änderung am Code wird als sogenannter „Commit" gespeichert, sodass man jederzeit nachvollziehen kann, wer wann was geändert hat, und bei Bedarf auf eine ältere Version zurückwechseln kann.
### 2.7 Entwicklungsumgebung
Eine Entwicklungsumgebung auch IDE (Integrated Development Environment) genannt ist ein Programm, das Entwicklerinnen und Entwickler beim Schreiben von Code unterstützt. Sie bietet unter anderem Funktionen wie automatische Vervollständigung, Fehlererkennung und integrierte Debugging-Werkzeuge, die das Auffinden und Beheben von Fehlern im Code erleichtern.
Zu Beginn des Projekts wurde Visual Studio 2022 auf Windows verwendet. Visual Studio 2022 ist die führende Entwicklungsumgebung von Microsoft für .NET-Projekte und bietet eine umfangreiche Unterstützung für ASP.NET Core und Blazor. Im Laufe des Projekts erfolgte jedoch ein Wechsel von Windows auf macOS. Da Visual Studio 2022 auf Mac nicht mehr verfügbar ist Microsoft hat die Mac-Version eingestellt wurde als Ersatz JetBrains Rider eingesetzt. JetBrains Rider ist eine next-generation IDE von Google, die plattformübergreifend funktioniert und eine moderne Entwicklungsumgebung für .NET-Projekte auf macOS bietet. Der Umstieg auf JetBrains Rider ermöglichte es, die Entwicklung auf dem neuen System ohne größere Unterbrechungen fortzusetzen.
### 2.8 Plattformwechsel: Windows zu macOS
Ein besonderer Aspekt der Entwicklung war der Wechsel von Windows auf macOS während des Projektverlaufs. Unter Plattform versteht man in der Softwareentwicklung das Betriebssystem, auf dem eine Anwendung läuft also etwa Windows, macOS oder Linux. Dieser Wechsel brachte spezifische Herausforderungen mit sich, da Oqtane primär für Windows entwickelt wurde. Obwohl Oqtane grundsätzlich auch auf macOS und Linux lauffähig ist, ist die Unterstützung für diese Plattformen veraltet und nicht vollständig angepasst. In der Praxis bedeutete das: Der Code ließ sich teilweise nicht fehlerfrei kompilieren also in ein lauffähiges Programm umwandeln und Oqtane startete zunächst nur mit Fehlermeldungen. Durch den Einsatz von JetBrains Rider als IDE konnten diese Probleme weitgehend gelöst werden, da JetBrains Rider eine bessere plattformübergreifende Integration bietet als die ursprünglich verwendete Entwicklungsumgebung.
--- ---
## 3. Entwicklung des Oqtane Themes ## 4. Technologischer Überblick
### 3.1 Ziel des Themes ### 4.1 Web-Entwicklung mit ASP.NET & C#
#### Backend-Logik
#### API-basierte Kommunikation
#### Zusammenspiel mit Oqtane
### 4.2 Oqtane Überblick
#### Grundidee & Architektur
#### Modul- & Theme-Konzept
#### Vorteile für das Projekt
### 4.3 CMS-Grundkonfiguration
#### Initiale Einrichtung
#### Modul-Integration
#### Rollen & Berechtigungen
#### Grundlegende Systemeinstellungen
---
## 5. System- und Lösungsarchitektur
### Gesamtarchitektur des Systems
### Einordnung von CMS, Modulen und Theme
### Datenfluss
### Architekturentscheidungen
---
## 6. Entwicklung des Oqtane Themes
### 6.1 Ziel des Themes
Im Rahmen des Projekts AlumniHub wurde ein eigenes Theme für das Content-Management-System Oqtane entwickelt. Ziel dieser Entwicklung war es, das Standarddesign von Oqtane vollständig durch eine projektspezifische Benutzeroberfläche zu ersetzen, die den Anforderungen des Absolventenvereins der HTL Ungargasse entspricht. Das Standardtheme von Oqtane ist funktional, jedoch generisch gehalten und bietet keinen Bezug zur Schule oder zum Projekt. Aus diesem Grund wurde frühzeitig die Entscheidung getroffen, ein vollständig eigenes Theme zu entwickeln, das sowohl optisch als auch technisch auf die Bedürfnisse der Plattform zugeschnitten ist. Im Rahmen des Projekts AlumniHub wurde ein eigenes Theme für das Content-Management-System Oqtane entwickelt. Ziel dieser Entwicklung war es, das Standarddesign von Oqtane vollständig durch eine projektspezifische Benutzeroberfläche zu ersetzen, die den Anforderungen des Absolventenvereins der HTL Ungargasse entspricht. Das Standardtheme von Oqtane ist funktional, jedoch generisch gehalten und bietet keinen Bezug zur Schule oder zum Projekt. Aus diesem Grund wurde frühzeitig die Entscheidung getroffen, ein vollständig eigenes Theme zu entwickeln, das sowohl optisch als auch technisch auf die Bedürfnisse der Plattform zugeschnitten ist.
@@ -86,7 +86,7 @@ Das visuelle Design orientiert sich dabei am bestehenden Erscheinungsbild der of
Neben der visuellen Gestaltung standen auch technische Anforderungen im Mittelpunkt. Das Theme sollte auf unterschiedlichen Endgeräten sowohl auf Desktop-Computern als auch auf Smartphones und Tablets zuverlässig und benutzerfreundlich funktionieren. Responsive Design war daher von Anfang an eine zentrale Anforderung. Darüber hinaus sollte das Theme vollständig in die Oqtane-Architektur integriert sein, sodass alle Standardfunktionen des CMS wie Benutzerverwaltung, Seitenverwaltung und Modulintegration weiterhin ohne Einschränkungen genutzt werden können. Neben der visuellen Gestaltung standen auch technische Anforderungen im Mittelpunkt. Das Theme sollte auf unterschiedlichen Endgeräten sowohl auf Desktop-Computern als auch auf Smartphones und Tablets zuverlässig und benutzerfreundlich funktionieren. Responsive Design war daher von Anfang an eine zentrale Anforderung. Darüber hinaus sollte das Theme vollständig in die Oqtane-Architektur integriert sein, sodass alle Standardfunktionen des CMS wie Benutzerverwaltung, Seitenverwaltung und Modulintegration weiterhin ohne Einschränkungen genutzt werden können.
### 3.2 Technische Umsetzung ### 6.2 Technische Umsetzung
Als technische Grundlage diente die Theme-Architektur von Oqtane. Das Layout wurde in einer zentralen Razor-Datei (`Theme.razor`) definiert, welche von der Basisklasse `ThemeBase` erbt. Durch diese Vererbung stehen im Theme automatisch zentrale Funktionen des Frameworks zur Verfügung, darunter der Seitenzustand (`PageState`), Navigationsdaten, Systemeinstellungen sowie Informationen über den aktuell angemeldeten Benutzer. Dies ermöglicht eine tiefe Integration des Themes in das CMS, ohne dass zusätzliche Schnittstellen oder externe Datenzugriffe notwendig sind. Als technische Grundlage diente die Theme-Architektur von Oqtane. Das Layout wurde in einer zentralen Razor-Datei (`Theme.razor`) definiert, welche von der Basisklasse `ThemeBase` erbt. Durch diese Vererbung stehen im Theme automatisch zentrale Funktionen des Frameworks zur Verfügung, darunter der Seitenzustand (`PageState`), Navigationsdaten, Systemeinstellungen sowie Informationen über den aktuell angemeldeten Benutzer. Dies ermöglicht eine tiefe Integration des Themes in das CMS, ohne dass zusätzliche Schnittstellen oder externe Datenzugriffe notwendig sind.
@@ -135,49 +135,49 @@ Neben Navigation und Layout wurden weitere Funktionen in das Theme integriert. D
Darüber hinaus wurde das ControlPanel von Oqtane integriert, das Administratorinnen und Administratoren direkten Zugriff auf Verwaltungsfunktionen bietet. Login- und Registrierungsoptionen werden über den `SettingService` aus den Site-Einstellungen geladen, sodass diese Funktionen ohne Anpassungen am Code aktiviert oder deaktiviert werden können. Darüber hinaus wurde das ControlPanel von Oqtane integriert, das Administratorinnen und Administratoren direkten Zugriff auf Verwaltungsfunktionen bietet. Login- und Registrierungsoptionen werden über den `SettingService` aus den Site-Einstellungen geladen, sodass diese Funktionen ohne Anpassungen am Code aktiviert oder deaktiviert werden können.
### 3.3 Herausforderungen ### 6.3 Herausforderungen
Die eigene Implementierung der Navigation über `PageState.Pages` und eine LINQ-basierte Filterlogik erwies sich als die richtige Entscheidung. Sie löste nicht nur das Problem der fehlenden Anpassbarkeit der Standardkomponente, sondern brachte gleichzeitig einen wesentlichen Mehrwert: Die Navigation ist vollständig wartungsfrei. Werden im CMS neue Seiten angelegt, erscheinen diese automatisch im Menü ohne dass eine einzige Zeile Code angepasst werden muss. Zudem ermöglichte dieser Ansatz die vollständige Kontrolle über das Erscheinungsbild des Burger-Menüs, was mit der Standardkomponente nicht möglich gewesen wäre. Die größte Herausforderung bei der Theme-Entwicklung war die Umsetzung einer individuellen Navigation. Die von Oqtane bereitgestellte Standardkomponente generierte das Burger-Menü automatisch und bot keine Möglichkeit, dieses individuell anzupassen. Da ein eigenes, maßgeschneidertes Burger-Menü benötigt wurde, das sich nahtlos in das Theme-Design einfügt, wurde die Standardkomponente vollständig ersetzt und eine eigene Navigation implementiert. Durch den direkten Zugriff auf `PageState.Pages` und eine LINQ-basierte Filterlogik konnte eine vollständig kontrollierbare und flexibel gestaltbare Navigation realisiert werden. Dieser Ansatz erforderte zwar mehr Entwicklungsaufwand, ermöglichte dafür aber die gewünschte individuelle Gestaltung des Burger-Menüs.
--- ---
## 4. Umsetzung der Module ## 7. Umsetzung der Module
### 4.1 Anmeldetool ### 7.1 Anmeldetool
#### 4.1.1 Ziel des Moduls #### 7.1.1 Ziel des Moduls
Das Anmeldetool wurde entwickelt, um Mitgliedern des Absolventenvereins eine einfache und strukturierte Möglichkeit zu bieten, sich zu Veranstaltungen und Treffen an- oder abzumelden. Ziel des Moduls ist es, den organisatorischen Aufwand bei der Planung und Verwaltung von Treffen deutlich zu reduzieren und gleichzeitig eine benutzerfreundliche Oberfläche für alle Beteiligten bereitzustellen. Das Anmeldetool wurde entwickelt, um Mitgliedern des Absolventenvereins eine einfache und strukturierte Möglichkeit zu bieten, sich zu Veranstaltungen und Treffen an- oder abzumelden. Ziel des Moduls ist es, den organisatorischen Aufwand bei der Planung und Verwaltung von Treffen deutlich zu reduzieren und gleichzeitig eine benutzerfreundliche Oberfläche für alle Beteiligten bereitzustellen.
Das Modul wurde als zusätzliche Funktionserweiterung in das bestehende Content-Management-System integriert. Es ermöglicht sowohl die Verwaltung der Veranstaltungen auf Seiten der Organisatoren als auch eine intuitive Interaktion für die Teilnehmerinnen und Teilnehmer. Durch den Einsatz moderner Webtechnologien konnte dabei eine reaktionsschnelle und geräteübergreifend nutzbare Lösung geschaffen werden. Das Modul wurde als zusätzliche Funktionserweiterung in das bestehende Content-Management-System integriert. Es ermöglicht sowohl die Verwaltung der Veranstaltungen auf Seiten der Organisatoren als auch eine intuitive Interaktion für die Teilnehmerinnen und Teilnehmer. Durch den Einsatz moderner Webtechnologien konnte dabei eine reaktionsschnelle und geräteübergreifend nutzbare Lösung geschaffen werden.
#### 4.1.2 Frontend (Eingabemaske) #### 7.1.2 Frontend (Eingabemaske)
Die Benutzeroberfläche des Anmeldetools wurde mithilfe von Blazor realisiert, einem Framework der ASP.NET-Technologieplattform, das die Entwicklung interaktiver Weboberflächen in C# ermöglicht. Die Eingabemaske wurde als eigenständige Blazor-Komponente implementiert, die flexibel in verschiedene Seiten der Anwendung eingebettet werden kann. Die Benutzeroberfläche des Anmeldetools wurde mithilfe von Blazor realisiert, einem Framework der ASP.NET-Technologieplattform, das die Entwicklung interaktiver Weboberflächen in C# ermöglicht. Die Eingabemaske wurde als eigenständige Blazor-Komponente implementiert, die flexibel in verschiedene Seiten der Anwendung eingebettet werden kann.
Beim Aufruf der Seite wird dem Benutzer zunächst eine kurze Beschreibung der jeweiligen Veranstaltung angezeigt. Im Anschluss stehen zwei klar gekennzeichnete Schaltflächen zur Verfügung: Zusagen zur Bestätigung der Teilnahme sowie Absagen zur Ablehnung. Die Schaltflächen wurden farblich differenziert gestaltet eine grüne Hervorhebung signalisiert die Zusage, eine rote Darstellung steht für die Absage. Diese Gestaltung orientiert sich an etablierten Designkonventionen moderner Webanwendungen und verbessert die intuitive Bedienbarkeit erheblich. Darüber hinaus wurde besonderer Wert auf eine responsive Darstellung gelegt, damit das Tool sowohl auf Desktop-Geräten als auch auf Smartphones und Tablets problemlos genutzt werden kann. Beim Aufruf der Seite wird dem Benutzer zunächst eine kurze Beschreibung der jeweiligen Veranstaltung angezeigt. Im Anschluss stehen zwei klar gekennzeichnete Schaltflächen zur Verfügung: Zusagen zur Bestätigung der Teilnahme sowie Absagen zur Ablehnung. Die Schaltflächen wurden farblich differenziert gestaltet eine grüne Hervorhebung signalisiert die Zusage, eine rote Darstellung steht für die Absage. Diese Gestaltung orientiert sich an etablierten Designkonventionen moderner Webanwendungen und verbessert die intuitive Bedienbarkeit erheblich. Darüber hinaus wurde besonderer Wert auf eine responsive Darstellung gelegt, damit das Tool sowohl auf Desktop-Geräten als auch auf Smartphones und Tablets problemlos genutzt werden kann.
#### 4.1.3 API-Schnittstelle #### 7.1.3 API-Schnittstelle
Die Anbindung des Anmeldetools an das bestehende CMS erfolgt über klar definierte Schnittstellen innerhalb der ASP.NET-Architektur. Die Komponente kommuniziert mit dem Backend, um Veranstaltungsdaten abzurufen sowie Anmelde- und Absagestatus der Teilnehmenden zu übermitteln und zu persistieren. Die Anbindung des Anmeldetools an das bestehende CMS erfolgt über klar definierte Schnittstellen innerhalb der ASP.NET-Architektur. Die Komponente kommuniziert mit dem Backend, um Veranstaltungsdaten abzurufen sowie Anmelde- und Absagestatus der Teilnehmenden zu übermitteln und zu persistieren.
Die Datenübertragung erfolgt nach dem Prinzip der sauberen Komponentenarchitektur: Die Blazor-Komponente ist als eigenständige Einheit konzipiert, die über Parameter und Rückruffunktionen mit übergeordneten Seitenkomponenten kommuniziert. Diese Struktur gewährleistet eine klare Trennung zwischen Darstellungslogik und Datenzugriff und erleichtert zukünftige Erweiterungen der Schnittstelle erheblich. Die Datenübertragung erfolgt nach dem Prinzip der sauberen Komponentenarchitektur: Die Blazor-Komponente ist als eigenständige Einheit konzipiert, die über Parameter und Rückruffunktionen mit übergeordneten Seitenkomponenten kommuniziert. Diese Struktur gewährleistet eine klare Trennung zwischen Darstellungslogik und Datenzugriff und erleichtert zukünftige Erweiterungen der Schnittstelle erheblich.
#### 4.1.4 Datenauswertung #### 7.1.4 Datenauswertung
Die im Anmeldetool erfassten Daten bilden die Grundlage für die Verwaltung und Auswertung von Veranstaltungsteilnahmen. Organisatoren können auf Basis der gespeicherten An- und Abmeldungen die Teilnehmerzahlen einsehen und die Planung entsprechend anpassen. Die im Anmeldetool erfassten Daten bilden die Grundlage für die Verwaltung und Auswertung von Veranstaltungsteilnahmen. Organisatoren können auf Basis der gespeicherten An- und Abmeldungen die Teilnehmerzahlen einsehen und die Planung entsprechend anpassen.
Die Architektur des Moduls ist bereits auf zukünftige Erweiterungen ausgelegt. Geplante Erweiterungen umfassen eine übersichtliche Teilnehmerliste mit Namen und Anmeldestatus, die Möglichkeit, eine maximale Teilnehmeranzahl je Veranstaltung festzulegen sowie eine direkte Speicherung und Auswertung der Anmeldedaten in einer Datenbank. Durch diese Erweiterungen soll das Anmeldetool künftig nicht nur als Interaktionselement für Teilnehmer, sondern auch als vollwertiges Verwaltungswerkzeug für Veranstaltungsorganisatoren dienen. Die Architektur des Moduls ist bereits auf zukünftige Erweiterungen ausgelegt. Geplante Erweiterungen umfassen eine übersichtliche Teilnehmerliste mit Namen und Anmeldestatus, die Möglichkeit eine maximale Teilnehmeranzahl je Veranstaltung festzulegen sowie eine direkte Speicherung und Auswertung der Anmeldedaten in einer Datenbank. Durch diese Erweiterungen soll das Anmeldetool künftig nicht nur als Interaktionselement für Teilnehmer, sondern auch als vollwertiges Verwaltungswerkzeug für Veranstaltungsorganisatoren dienen.
#### 4.1.5 UX-Überlegungen (User Experience) #### 7.1.5 UX-Überlegungen (User Experience)
Ein zentraler Aspekt bei der Entwicklung des Anmeldetools war die Benutzerfreundlichkeit der Oberfläche. UX (User Experience) bezeichnet dabei die Gesamtheit aller Erfahrungen, die ein Benutzer bei der Interaktion mit einer Anwendung macht von der visuellen Gestaltung über die Bedienbarkeit bis hin zur allgemeinen Zufriedenheit mit dem System. Die Module wurden so gestaltet, dass Benutzerinnen und Benutzer die Funktionen ohne zusätzliche Schulung verwenden können. Eine klare Struktur, eine intuitive Bedienung sowie ein konsistentes Erscheinungsbild innerhalb des bestehenden Systems standen dabei im Vordergrund. Ein zentraler Aspekt bei der Entwicklung des Anmeldetools war die Benutzerfreundlichkeit der Oberfläche. UX (User Experience) bezeichnet dabei die Gesamtheit aller Erfahrungen, die ein Benutzer bei der Interaktion mit einer Anwendung macht von der visuellen Gestaltung über die Bedienbarkeit bis hin zur allgemeinen Zufriedenheit mit dem System. Die Module wurden so gestaltet, dass Nutzerinnen und Nutzer die Funktionen ohne zusätzliche Schulung verwenden können. Eine klare Struktur, eine intuitive Bedienung sowie ein konsistentes Erscheinungsbild innerhalb des bestehenden Systems standen dabei im Vordergrund.
Während der Testphase wurden mehrere visuelle Darstellungsprobleme identifiziert und behoben. Dazu zählten Fehler bei der Overlay-Darstellung insbesondere in Bezug auf Hintergrundfarben, Transparenzen und z-Index-Ebenen sowie sogenannte Clipping-Fehler auf mobilen Endgeräten, bei denen Inhalte teilweise abgeschnitten oder außerhalb des sichtbaren Bereichs angezeigt wurden. Die Layoutstruktur und Elementgrößen wurden angepasst, ausreichende Abstände zu Seitenrändern sichergestellt und Tests auf verschiedenen Browser- und Gerätevarianten durchgeführt. Während der Testphase wurden mehrere visuelle Darstellungsprobleme identifiziert und behoben. Dazu zählten Fehler bei der Overlay-Darstellung insbesondere in Bezug auf Hintergrundfarben, Transparenzen und z-Index-Ebenen sowie sogenannte Clipping-Fehler auf mobilen Endgeräten, bei denen Inhalte teilweise abgeschnitten oder außerhalb des sichtbaren Bereichs angezeigt wurden. Die Layoutstruktur und Elementgrößen wurden angepasst, ausreichende Abstände zu Seitenrändern sichergestellt und Tests auf verschiedenen Browser- und Gerätevarianten durchgeführt.
Diese Maßnahmen stellen einen ersten Schritt in der kontinuierlichen Verbesserung der mobilen Benutzeroberfläche dar. Weitere Feinabstimmungen sind geplant, um das Anmeldetool langfristig als stabile, benutzerfreundliche und geräteübergreifend konsistente Lösung zu etablieren. Diese Maßnahmen stellen einen ersten Schritt in der kontinuierlichen Verbesserung der mobilen Benutzeroberfläche dar. Weitere Feinabstimmungen sind geplant, um das Anmeldetool langfristig als stabile, benutzerfreundliche und geräteübergreifend konsistente Lösung zu etablieren.
### 4.2 Hall of Fame ### 7.2 Hall of Fame
Das Hall-of-Fame-Modul ist ein zentrales Modul der AlumniHub-Plattform. Es dient dazu, ehemalige Absolventinnen und Absolventen der HTL Ungargasse sichtbar zu machen und ihre beruflichen Werdegänge zu präsentieren. Das Modul wurde als eigenständiges, wiederverwendbares Oqtane-Modul entwickelt und ermöglicht es registrierten Benutzerinnen und Benutzern, sich selbst mit einem persönlichen Profil einzutragen. Das Hall-of-Fame-Modul ist ein zentrales Modul der AlumniHub-Plattform. Es dient dazu, ehemalige Absolventinnen und Absolventen der HTL Ungargasse sichtbar zu machen und ihre beruflichen Werdegänge zu präsentieren. Das Modul wurde als eigenständiges, wiederverwendbares Oqtane-Modul entwickelt und ermöglicht es registrierten Benutzerinnen und Benutzern, sich selbst mit einem persönlichen Profil einzutragen.
@@ -279,8 +279,6 @@ Die Datenbankstruktur wird über Entity Framework Core Migrationen versioniert v
|-----------|----------------|--------| |-----------|----------------|--------|
| `InitializeModule` | `01.00.00.00` | Erstellt die Haupttabelle mit allen Grundspalten sowie den Audit-Spalten | | `InitializeModule` | `01.00.00.00` | Erstellt die Haupttabelle mit allen Grundspalten sowie den Audit-Spalten |
| `AddReportingColumns` | `01.00.00.02` | Erweitert die Haupttabelle um die Spalten `IsReported` und `ReportReason` | | `AddReportingColumns` | `01.00.00.02` | Erweitert die Haupttabelle um die Spalten `IsReported` und `ReportReason` |
> **Hinweis:** Version `01.00.00.01` wurde im Entwicklungsprozess übersprungen, da eine fehlerhafte Migration erstellt und anschließend wieder gelöscht werden musste.
| `AddReportTable` | `01.00.00.03` | Erstellt die eigenständige Report-Tabelle mit Fremdschlüssel zur Haupttabelle | | `AddReportTable` | `01.00.00.03` | Erstellt die eigenständige Report-Tabelle mit Fremdschlüssel zur Haupttabelle |
#### Implementierungsdetails und Problemlösungen #### Implementierungsdetails und Problemlösungen
@@ -289,7 +287,7 @@ Während der Entwicklung traten mehrere technische Herausforderungen auf, die im
**Bild-Upload-System** **Bild-Upload-System**
In der ursprünglichen Version des Moduls mussten Benutzerinnen und Benutzer eine Bild-URL manuell in ein Textfeld eingeben. Dies war wenig benutzerfreundlich und erforderte, dass Bilder zunächst anderweitig hochgeladen und verlinkt werden mussten. Das implementierte Bild-Upload-System ersetzt dies durch eine Blazor-`InputFile`-Komponente mit Live-Vorschau, Fortschrittsanzeige und Lösch-Button. Die Upload-Methode prüft die Dateigröße (maximal 5 MB), öffnet die Datei als Stream und übermittelt sie als `MultipartFormDataContent` an den Server, der den Dateityp serverseitig validiert, einen UUID-Dateinamen (Universally Unique Identifier eine zufällig generierte, global eindeutige Zeichenkette) generiert und die Datei speichert. Das System unterstützt beide Blazor-Rendering-Modi. In der ursprünglichen Version des Moduls mussten Benutzerinnen und Benutzer eine Bild-URL manuell in ein Textfeld eingeben. Dies war wenig benutzerfreundlich und erforderte, dass Bilder zunächst anderweitig hochgeladen und verlinkt werden mussten. Das implementierte Bild-Upload-System ersetzt dies durch eine Blazor-`InputFile`-Komponente mit Live-Vorschau, Fortschrittsanzeige und Lösch-Button. Die Upload-Methode prüft die Dateigröße (maximal 5 MB), öffnet die Datei als Stream und übermittelt sie als `MultipartFormDataContent` an den Server, der den Dateityp serverseitig validiert, einen UUID-Dateinamen generiert und die Datei speichert. Das System unterstützt beide Blazor-Rendering-Modi.
**Concurrency Exception beim Löschen** **Concurrency Exception beim Löschen**
@@ -305,13 +303,33 @@ Die ursprünglich fest codierten Sortierrichtungen wurden durch einen Toggle-But
--- ---
## 5. Übergangslösung, Probleme & Learnings ## 8. Projektorganisation & Teamarbeit
### 5.1 Übergangslösung (Sommer 2025) ### 8.1 Planung & Meilensteine
#### Meilensteine
#### Soll-/Ist-Vergleich
#### Zeitverzug
### 8.2 Teamverkleinerung
#### Downsizing von 6 auf 3 Personen
#### Neue Aufgabenverteilung
#### Auswirkungen auf Theme-Entwicklung, Module und Zeitplanung
---
## 9. Übergangslösung, Probleme & Learnings
### 9.1 Übergangslösung (Sommer 2025)
#### Gründe & Technische Umsetzung #### Gründe & Technische Umsetzung
Da AlumniHub zum Zeitpunkt des ersten Absolvententreffens im Sommer 2025 noch nicht vollständig fertiggestellt war und das Hosting von Oqtane auf dem Hetzner-Server zu unerwarteten technischen Problemen geführt hatte, wurde im Team die Entscheidung getroffen, eine eigenständige Übergangslösung zu entwickeln. Diese sollte pünktlich zur Veranstaltung einsatzbereit sein und die wichtigsten Funktionen abdecken: die Möglichkeit für Absolventinnen und Absolventen, ihre Teilnahme am Treffen zu bestätigen oder abzusagen, sowie die Möglichkeit, direktes Feedback zum Diplomprojekt AlumniHub abzugeben. Da AlumniHub zum Zeitpunkt des ersten Absolventenstreffens im Sommer 2025 noch nicht vollständig fertiggestellt war und das Hosting von Oqtane auf dem Hetzner-Server zu unerwarteten technischen Problemen geführt hatte, wurde im Team die Entscheidung getroffen, eine eigenständige Übergangslösung zu entwickeln. Diese sollte pünktlich zur Veranstaltung einsatzbereit sein und die wichtigsten Funktionen abdecken: die Möglichkeit für Absolventinnen und Absolventen, ihre Teilnahme am Treffen zu bestätigen oder abzusagen, sowie die Möglichkeit, direktes Feedback zum Diplomprojekt AlumniHub abzugeben.
Da für die Entwicklung nur wenig Zeit zur Verfügung stand und eine vollständige Integration in die noch nicht fertige AlumniHub-Plattform nicht realistisch war, wurde bewusst auf einen schlanken, eigenständigen Technologie-Stack gesetzt. Dieser sollte schnell entwickelt, einfach deploybar und zuverlässig betreibbar sein ohne die Komplexität eines vollständigen CMS-Systems. Da für die Entwicklung nur wenig Zeit zur Verfügung stand und eine vollständige Integration in die noch nicht fertige AlumniHub-Plattform nicht realistisch war, wurde bewusst auf einen schlanken, eigenständigen Technologie-Stack gesetzt. Dieser sollte schnell entwickelt, einfach deploybar und zuverlässig betreibbar sein ohne die Komplexität eines vollständigen CMS-Systems.
@@ -329,39 +347,27 @@ Es gab keine Benutzerkonten und keine Authentifizierung. Jede Person, die die Se
Diese bewusste Reduktion auf das Wesentliche war jedoch kein Nachteil, sondern eine pragmatische Entscheidung: Die Lösung musste schnell funktionieren und zuverlässig sein und das war sie. Nach dem Absolvententreffen wurde die Seite nicht einfach abgeschaltet, sondern zu einer reinen Feedback-Seite für das Diplomprojekt umfunktioniert. Über diese Seite konnten Interessierte darunter Lehrkräfte, Mitschülerinnen und Mitschüler sowie externe Besucher der Präsentation weiterhin direktes Feedback zum Projekt abgeben. Die Seite blieb so lange in Betrieb, bis die vollständig entwickelte AlumniHub-Plattform diese Funktion nativ übernahm. Diese bewusste Reduktion auf das Wesentliche war jedoch kein Nachteil, sondern eine pragmatische Entscheidung: Die Lösung musste schnell funktionieren und zuverlässig sein und das war sie. Nach dem Absolvententreffen wurde die Seite nicht einfach abgeschaltet, sondern zu einer reinen Feedback-Seite für das Diplomprojekt umfunktioniert. Über diese Seite konnten Interessierte darunter Lehrkräfte, Mitschülerinnen und Mitschüler sowie externe Besucher der Präsentation weiterhin direktes Feedback zum Projekt abgeben. Die Seite blieb so lange in Betrieb, bis die vollständig entwickelte AlumniHub-Plattform diese Funktion nativ übernahm.
### 5.2 Probleme ### 9.2 Probleme
#### Technische Probleme #### Technische Probleme
Eine der größten technischen Herausforderungen im gesamten Projektverlauf war der Zeitdruck, der insbesondere im Vorfeld des ersten Absolvententreffens spürbar war. Da AlumniHub zu diesem Zeitpunkt noch nicht einsatzbereit war, musste die Übergangslösung in sehr kurzer Zeit konzipiert, entwickelt und in Betrieb genommen werden. Dieser Zeitdruck führte dazu, dass keine ausreichende Zeit für gründliches Testen oder für die Umsetzung zusätzlicher Funktionen blieb. Eine der größten technischen Herausforderungen im gesamten Projektverlauf war der Zeitdruck, der insbesondere im Vorfeld des ersten Absolventenstreffens spürbar war. Da AlumniHub zu diesem Zeitpunkt noch nicht einsatzbereit war, musste die Übergangslösung in sehr kurzer Zeit konzipiert, entwickelt und in Betrieb genommen werden. Dieser Zeitdruck führte dazu, dass keine ausreichende Zeit für gründliches Testen oder für die Umsetzung zusätzlicher Funktionen blieb.
Ein weiteres technisches Problem ergab sich durch den Wechsel von Windows auf macOS während der Entwicklung. Da Oqtane primär für Windows entwickelt ist und die macOS-Unterstützung veraltet bzw. nicht vollständig angepasst ist, traten nach dem Plattformwechsel Build-Fehler auf und Oqtane startete zunächst nur mit Fehlern. Diese Probleme erschwerten die Weiterentwicklung erheblich, da zunächst die Entwicklungsumgebung stabilisiert werden musste, bevor die eigentliche Arbeit an den Modulen fortgesetzt werden konnte. Durch den Wechsel auf JetBrains Rider als Entwicklungsumgebung konnten die Build-Probleme schließlich behoben und die Arbeit an den Modulen erfolgreich fortgesetzt werden.
Ein weiteres technisches Problem betraf das Hosting von Oqtane auf dem Hetzner-Server. Die Einrichtung und der Betrieb von Oqtane auf dem Server bereiteten unerwartete Schwierigkeiten, die den regulären Entwicklungsfortschritt verlangsamten. Da dieser Bereich nicht zum eigenen Aufgabengebiet gehörte, konnten die genauen Ursachen nicht vollständig nachvollzogen werden. Die Probleme wirkten sich jedoch auf den gesamten Zeitplan des Projekts aus und waren mitverantwortlich dafür, dass AlumniHub zum Zeitpunkt des ersten Treffens noch nicht fertig war. Ein weiteres technisches Problem betraf das Hosting von Oqtane auf dem Hetzner-Server. Die Einrichtung und der Betrieb von Oqtane auf dem Server bereiteten unerwartete Schwierigkeiten, die den regulären Entwicklungsfortschritt verlangsamten. Da dieser Bereich nicht zum eigenen Aufgabengebiet gehörte, konnten die genauen Ursachen nicht vollständig nachvollzogen werden. Die Probleme wirkten sich jedoch auf den gesamten Zeitplan des Projekts aus und waren mitverantwortlich dafür, dass AlumniHub zum Zeitpunkt des ersten Treffens noch nicht fertig war.
In den letzten Monaten des Projekts wurde daher ein Wechsel des Hosting-Anbieters vorgenommen. Statt Hetzner wird die Plattform nun bei LiveDesign gehostet, einem österreichischen Unternehmen, das sich auf Hosting, Webdesign und individuelle Webservices spezialisiert hat. LiveDesign betreibt seine Datacenter ausschließlich in Österreich und bietet eine zuverlässige Infrastruktur für CMS-Systeme wie Oqtane. Durch diesen Wechsel konnten die bestehenden Stabilitätsprobleme behoben und der Betrieb der Plattform deutlich verbessert werden.
#### Kontakt mit Oqtane- und Hetzner-Support
Im Verlauf des Projekts wurde sowohl der Support von Oqtane als auch der Support von Hetzner kontaktiert, um Hilfe bei den aufgetretenen technischen Problemen zu erhalten.
Der Kontakt mit dem Oqtane-Support erfolgte über GitHub Issues sowie per E-Mail. Die gemeldeten Probleme betrafen spezifische Verhaltensweisen des Frameworks beim Hosting auf dem Hetzner-Server. Trotz der Kontaktaufnahme konnte keine hilfreiche Antwort erhalten werden, die zur Lösung der Probleme beigetragen hätte. Die offizielle Dokumentation sowie vorhandene Community-Beiträge lieferten ebenfalls keine ausreichenden Antworten auf die spezifischen Konfigurationsprobleme.
Auch der Hetzner-Support wurde bezüglich der Serverprobleme kontaktiert. Die Anfragen bezogen sich auf die Serverkonfiguration und mögliche Ursachen für die Instabilität beim Betrieb von Oqtane. Auch hier führten die Rückmeldungen nicht zu einer vollständigen Lösung des Problems. Die Erfahrung zeigte, dass bei der Nutzung spezialisierter Frameworks auf externen Hosting-Plattformen mit eingeschränktem Support gerechnet werden muss und eine intensive Eigenrecherche oft unumgänglich ist.
#### Organisatorische Probleme #### Organisatorische Probleme
Neben den technischen Herausforderungen gab es auch auf organisatorischer Ebene ein zentrales Problem, das den Projektverlauf im Sommer 2025 erheblich beeinflusste. Während der Sommermonate war die aktive Mitarbeit innerhalb des Teams sehr ungleich verteilt. Ein Großteil der Teammitglieder war urlaubsbedingt nicht oder nur eingeschränkt erreichbar und beteiligte sich in dieser Zeit kaum am Projekt. Nur ein kleiner Teil des Teams arbeitete in dieser Phase aktiv weiter und trieb den Fortschritt voran. Neben den technischen Herausforderungen gab es auch auf organisatorischer Ebene ein zentrales Problem, das den Projektverlauf im Sommer 2025 erheblich beeinflusste. Während der Sommermonate war die aktive Mitarbeit innerhalb des Teams sehr ungleich verteilt. Ein Großteil der Teammitglieder war urlaubsbedingt nicht oder nur eingeschränkt erreichbar und beteiligte sich in dieser Zeit kaum am Projekt. Nur ein kleiner Teil des Teams arbeitete in dieser Phase aktiv weiter und trieb den Fortschritt voran.
Diese Situation führte zu einer deutlichen Ungleichverteilung der Arbeitsbelastung. Wenige Personen mussten in dieser Zeit deutlich mehr Verantwortung übernehmen als ursprünglich geplant, was zu Frustration und Verzögerungen führte. Im Nachhinein zeigt sich, dass klarere Absprachen und verbindlichere Vereinbarungen zu Beginn des Sommers dazu beigetragen hätten, diese Situation zu vermeiden oder zumindest abzumildern. Diese Situation führte zu einer deutlichen Ungleichverteilung der Arbeitsbelastung. Wenige Personen mussten in dieser Zeit deutlich mehr Verantwortung übernehmen als ursprünglich geplant, was zu Frustration und Verzögerungen führte. Im Nachhinein zeigt sich, dass klarere Absprachen und verbindlichere Vereinbarungen zu Beginn des Sommers dazu beigetragen hätten, diese Situation zu vermeiden oder zumindest abzumildern.
### 5.3 Learnings ### 9.3 Learnings
#### Technisch #### Technisch
Das Projekt hat auf technischer Ebene wertvolle praktische Kenntnisse vermittelt, die über den schulischen Rahmen hinausgehen. Der konsequente Einsatz von Git zur Versionskontrolle war dabei eine der wichtigsten Erfahrungen. Durch die tägliche Arbeit mit Branches, Commits und Merges wurde ein tiefes Verständnis für kollaborative Softwareentwicklung aufgebaut. Es wurde deutlich, wie wichtig aussagekräftige Commit-Nachrichten, regelmäßige Commits und eine saubere Branch-Struktur für die Zusammenarbeit im Team sind. Das Projekt hat auf technischer Ebene wertvolle praktische Kenntnisse vermittelt, die über den schulischen Rahmen hinausgehen. Der konsequente Einsatz von Git zur Versionskontrolle war dabei eine der wichtigsten Erfahrungen. Durch die tägliche Arbeit mit Branches, Commits und Merges wurde ein tiefes Verständnis für kollaborative Softwareentwicklung aufgebaut. Es wurde deutlich, wie wichtig aussagekräftige Commit-Nachrichten, regelmäßige Commits und eine saubere Branch-Struktur für die Zusammenarbeit im Team sind.
Im Bereich Responsive Design wurden durch die praktische Umsetzung des Themes und der Übergangslösung wichtige Kenntnisse vertieft. Dabei wurde gelernt, wie man mit CSS Media Queries und Flexbox Layouts baut, die sich zuverlässig an unterschiedliche Bildschirmgrößen anpassen. Besonders die Umsetzung des Burger-Menüs für mobile Geräte war eine lehrreiche Erfahrung, die zeigte, wie man komplexe UI-Funktionen mit minimalem JavaScript-Einsatz realisieren kann. Im Bereich Responsive Design wurden durch die praktische Umsetzung des Themes und der Übergangslösung wichtige Kenntnisse vertieft. Es wurde erfahren, wie man mit CSS Media Queries und Flexbox Layouts baut, die sich zuverlässig an unterschiedliche Bildschirmgrößen anpassen. Besonders die Umsetzung des Burger-Menüs für mobile Geräte war eine lehrreiche Erfahrung, die zeigte, wie man komplexe UI-Funktionen mit minimalem JavaScript-Einsatz realisieren kann.
Auch der Umgang mit JavaScript zur Steuerung von UI-Elementen wurde durch die Arbeit am Projekt verbessert. Die Implementierung der Overlay-Steuerung in der Übergangslösung sowie die Menü-Logik im Theme haben gezeigt, wie JavaScript gezielt und effizient eingesetzt werden kann, um eine bessere Benutzererfahrung zu schaffen. Auch der Umgang mit JavaScript zur Steuerung von UI-Elementen wurde durch die Arbeit am Projekt verbessert. Die Implementierung der Overlay-Steuerung in der Übergangslösung sowie die Menü-Logik im Theme haben gezeigt, wie JavaScript gezielt und effizient eingesetzt werden kann, um eine bessere Benutzererfahrung zu schaffen.
@@ -377,67 +383,14 @@ Auf persönlicher Ebene war die wichtigste Erkenntnis aus diesem Projekt die Bed
--- ---
## 6. Testen & Qualitätssicherung ## 10. Testen & Qualitätssicherung
### Funktionstests der Module ### Funktionstests der Module
Alle entwickelten Module das Anmeldetool und das Hall-of-Fame-Modul wurden manuell auf ihre korrekte Funktionsweise getestet. Dabei wurden sämtliche Benutzeraktionen systematisch durchgegangen, darunter das An- und Abmelden zu Veranstaltungen, das Erstellen, Bearbeiten und Veröffentlichen von Hall-of-Fame-Einträgen, das Hochladen von Bildern sowie die Melde- und Löschfunktionen. Fehler und unerwartetes Verhalten wurden dokumentiert und im Anschluss behoben.
Beim Anmeldetool wurde insbesondere geprüft, ob die Zusage- und Absage-Buttons korrekt reagieren und der Status unmittelbar in der Oberfläche angezeigt wird. Beim Hall-of-Fame-Modul lag ein besonderer Fokus auf dem Bild-Upload: Es wurde getestet, ob die Größenbeschränkung von 5 MB korrekt greift, ob die Vorschau sofort erscheint und ob ungültige Dateiformate abgelehnt werden. Auch die Duplikatprüfung also die Sicherstellung, dass pro Person nur ein Eintrag erstellt werden kann sowie die Eigentümerprüfung wurden gezielt getestet.
### Theme-Tests ### Theme-Tests
Das entwickelte Oqtane-Theme wurde auf verschiedenen Browsern und Geräten getestet, um eine konsistente Darstellung sicherzustellen. Getestet wurde unter anderem auf aktuellen Versionen von Chrome, Firefox und Safari sowie auf mobilen Geräten mit unterschiedlichen Bildschirmgrößen. Ein besonderer Fokus lag dabei auf der korrekten Darstellung des Burger-Menüs auf mobilen Endgeräten sowie auf der Funktionsfähigkeit der dynamischen Navigation.
### Usability-Tests ### Usability-Tests
Neben den technischen Tests wurde die Plattform auch von weiteren Personen darunter Mitschülerinnen und Mitschüler sowie Lehrkräfte auf ihre Benutzerfreundlichkeit geprüft. Das Feedback aus diesen Tests floss in die weitere Entwicklung ein und führte unter anderem zu Anpassungen in der Darstellung und Bedienung einzelner Elemente. ### Bekannte Einschränkungen
Ein häufiges Feedback war, dass die Unterscheidung zwischen Zusage und Absage auf den ersten Blick nicht immer sofort klar war. Daraufhin wurden die Schaltflächen farblich deutlicher gestaltet Grün für die Zusage, Rot für die Absage und die Beschriftungen präzisiert. Solche Rückmeldungen aus echten Nutzertests sind wertvoll, weil Entwicklerinnen und Entwickler ihre eigene Anwendung oft anders wahrnehmen als Personen, die das System zum ersten Mal sehen. ---
---
## 7. Fazit und Ausblick
### 7.1 Zielerreichung
Rückblickend auf das Projekt AlumniHub lässt sich festhalten, dass die zentralen Ziele meines individuellen Aufgabenbereichs erfolgreich umgesetzt wurden.
Das **Hall-of-Fame-Modul** wurde vollständig fertiggestellt. Es umfasst die Übersichtsseite mit responsivem Kartenlayout, die Detailseite mit Glasmorphismus-Design, die Edit-Seite mit Rich-Text-Editor und Bild-Upload, die Meldefunktion sowie den PDF-Export mit QuestPDF. Das Modul ist in das Oqtane-CMS integriert und produktiv einsetzbar.
Das **Anmeldetool** wurde ebenfalls implementiert und ist funktionsfähig. Grundfunktionen wie Zusage und Absage zu Veranstaltungen sowie die responsive Darstellung sind vollständig umgesetzt. Weiterführende Funktionen wie eine vollständige Teilnehmerliste mit Datenbankanbindung und die Möglichkeit, maximale Teilnehmerzahlen festzulegen, sind architektonisch bereits vorbereitet, jedoch noch nicht vollständig implementiert.
Das **Theme** wurde von einem anderen Teammitglied entwickelt und ist ebenfalls fertiggestellt. Der Wechsel des Hostings von Hetzner zu LiveDesign hat die Stabilität der Plattform deutlich verbessert.
Insgesamt bin ich mit dem erreichten Stand zufrieden insbesondere angesichts der Herausforderungen durch die Teamverkleinerung, den Plattformwechsel von Windows auf macOS und die technischen Probleme mit dem ursprünglichen Hosting.
### 7.2 Ausblick
Für die Weiterentwicklung der Plattform gibt es mehrere sinnvolle nächste Schritte. Im Bereich des Anmeldetools wäre die Implementierung einer vollständigen Teilnehmerliste mit direkter Datenbankanbindung der wichtigste nächste Schritt. Ergänzend dazu sollte die Möglichkeit geschaffen werden, maximale Teilnehmerzahlen pro Veranstaltung festzulegen, sodass Organisatoren die Kapazität von Treffen besser steuern können.
Langfristig könnte die Plattform um eine automatische E-Mail-Benachrichtigung erweitert werden, die Mitglieder an bevorstehende Veranstaltungen erinnert. Auch eine Exportfunktion für die Anmeldedaten beispielsweise als CSV oder PDF wäre für die Vereinsverwaltung hilfreich.
AlumniHub bietet als Plattform eine solide Grundlage, die in den kommenden Jahren kontinuierlich erweitert werden kann, um den Absolventenverein der HTL Ungargasse langfristig digital zu unterstützen.
---
## 8. Quellen
Microsoft: ASP.NET Core Documentation. https://learn.microsoft.com/en-us/aspnet/core/ [Zugriff: 17.03.2026]
Microsoft: Blazor Documentation. https://learn.microsoft.com/en-us/aspnet/core/blazor/ [Zugriff: 17.03.2026]
Microsoft: Entity Framework Core Migrations. https://learn.microsoft.com/en-us/ef/core/managing-schemas/migrations/ [Zugriff: 17.03.2026]
Oqtane Framework: https://www.oqtane.org/ [Zugriff: 17.03.2026]
Oqtane Developer Documentation: https://docs.oqtane.org/ [Zugriff: 17.03.2026]
QuestPDF Open Source Library: https://www.questpdf.com/ [Zugriff: 17.03.2026]
Bootstrap Framework: https://getbootstrap.com/ [Zugriff: 17.03.2026]
Gitea Open Source Git Service: https://about.gitea.com/ [Zugriff: 17.03.2026]
LiveDesign Hosting, Design & Branding: https://livedesign.at/ [Zugriff: 17.03.2026]
test

View File

@@ -2,139 +2,40 @@
include_toc: true include_toc: true
gitea: none gitea: none
--- ---
# 1. Einleitung
## 1.1 Ausgangssituation und Motivation
## 1.2 Zielsetzung der Diplomarbeit
## 1.3 Nutzen der Website für den Absolventenverein
# 2. Projektmanagement mit Scrum # 2. Projektmanagement mit Scrum
## 2.1 Grundlagen der Scrum-Methode ## 2.1 Grundlagen der Scrum-Methode
Für die Organisation und Umsetzung des Projekts wurde das agile Projektmanagement-Framework Scrum verwendet. Scrum ist ein weit verbreitetes Vorgehensmodell in der Softwareentwicklung, das besonders für Projekte geeignet ist, bei denen sich Anforderungen im Laufe der Entwicklung verändern können. Im Gegensatz zu klassischen Projektmanagementmethoden arbeitet Scrum nicht mit einer vollständig im Voraus geplanten Entwicklung, sondern mit kurzen, wiederkehrenden Entwicklungszyklen.
Das zentrale Element von Scrum ist der sogenannte Sprint. Ein Sprint stellt einen fest definierten Zeitraum dar, in dem bestimmte Funktionen oder Anforderungen umgesetzt werden. In diesem Projekt betrug die Dauer eines Sprints zwei Wochen. Innerhalb dieses Zeitraums arbeitete das Entwicklungsteam daran, ausgewählte Aufgaben zu implementieren und am Ende des Sprints ein funktionsfähiges Ergebnis zu präsentieren.
Die agile Arbeitsweise von Scrum basiert auf einer iterativen und inkrementellen Entwicklung. Das bedeutet, dass die Software Schritt für Schritt erweitert wird. Nach jedem Sprint steht eine neue Version der Anwendung zur Verfügung, die zusätzliche Funktionen enthält. Dadurch können Änderungen oder neue Anforderungen flexibel in zukünftige Sprints integriert werden.
Die grundlegende Struktur und der Ablauf eines Scrum-Projekts sind in Abbildung X dargestellt.
![Scrum-Framework](image-2.png)
*Abbildung X: Übersicht des Scrum-Frameworks mit Rollen, Artefakten und Ereignissen*
Die Abbildung zeigt die wichtigsten Elemente des Scrum-Frameworks. Auf der linken Seite sind die Anforderungen des Projekts dargestellt, die im sogenannten Product Backlog gesammelt werden. Dieses Backlog enthält alle geplanten Funktionen, Verbesserungen und Aufgaben des Projekts. Diese Anforderungen stammen häufig von Stakeholdern oder zukünftigen Benutzern der Anwendung.
Während der Sprintplanung wählt das Entwicklungsteam gemeinsam mit dem Product Owner jene Aufgaben aus dem Product Backlog aus, die im nächsten Sprint umgesetzt werden sollen. Diese Aufgaben werden anschließend im Sprint Backlog gesammelt und bilden die Grundlage für die Arbeit während des Sprints.
Im Zentrum der Abbildung befindet sich der Sprint-Zyklus, der typischerweise zwischen einer und vier Wochen dauert. In diesem Projekt wurde eine Sprintdauer von zwei Wochen festgelegt. Während dieser Phase arbeitet das Entwicklungsteam an der Umsetzung der definierten Aufgaben. Dabei durchläuft die Entwicklung mehrere Schritte, wie beispielsweise Design, Entwicklung, Testen und Deployment.
Ein wichtiger Bestandteil des Scrum-Prozesses ist das Daily Scrum, ein kurzes tägliches Meeting des Teams. In diesem Meeting berichten die Teammitglieder über ihren aktuellen Fortschritt, geplante Aufgaben sowie mögliche Hindernisse im Entwicklungsprozess. Ziel dieses Meetings ist es, den Arbeitsfortschritt zu koordinieren und Probleme frühzeitig zu erkennen.
Am Ende jedes Sprints findet das Sprint Review statt. Dabei präsentiert das Entwicklungsteam die umgesetzten Funktionen des Produkts. Stakeholder und Projektbeteiligte haben in diesem Meeting die Möglichkeit, Feedback zu geben und neue Anforderungen einzubringen.
Anschließend folgt die Sprint Retrospective, in der das Team den Ablauf des vergangenen Sprints reflektiert. Dabei wird analysiert, welche Aspekte des Arbeitsprozesses gut funktioniert haben und welche Verbesserungen für zukünftige Sprints möglich sind.
Durch diese strukturierte Vorgehensweise ermöglicht Scrum eine kontinuierliche Weiterentwicklung der Software sowie eine regelmäßige Überprüfung des Projektfortschritts.
## 2.2 Rollenverteilung im Projektteam ## 2.2 Rollenverteilung im Projektteam
Das Scrum-Framework definiert drei zentrale Rollen, die jeweils unterschiedliche Aufgaben innerhalb des Projekts übernehmen. Diese Rollen tragen dazu bei, Verantwortlichkeiten klar zu strukturieren und den Entwicklungsprozess effizient zu gestalten.
Der Product Owner ist für die inhaltliche Planung des Produkts verantwortlich. Zu seinen Aufgaben gehört die Verwaltung und Priorisierung des Product Backlogs. Er entscheidet, welche Funktionen oder Anforderungen für das Produkt am wichtigsten sind und sorgt dafür, dass das Entwicklungsteam stets an den relevantesten Aufgaben arbeitet. Außerdem fungiert der Product Owner als Verbindung zwischen Stakeholdern und Entwicklungsteam.
Der Scrum Master unterstützt das Team bei der Anwendung der Scrum-Methodik und stellt sicher, dass die Scrum-Prinzipien im Projekt eingehalten werden. Zu seinen Aufgaben gehört unter anderem die Organisation und Moderation der Scrum-Meetings. Darüber hinaus hilft er dem Team dabei, Hindernisse im Entwicklungsprozess zu identifizieren und zu beseitigen.
Das Entwicklungsteam ist für die technische Umsetzung der Anforderungen verantwortlich. Es besteht aus den Entwicklern, die die Software planen, implementieren, testen und integrieren. Das Team organisiert seine Arbeit weitgehend selbstständig und entscheidet gemeinsam über die technische Umsetzung der Aufgaben.
Durch diese klar definierten Rollen wird sichergestellt, dass organisatorische und technische Aufgaben effizient verteilt werden können und der Entwicklungsprozess strukturiert abläuft.
## 2.3 Sprintplanung und Umsetzung ## 2.3 Sprintplanung und Umsetzung
Die Sprintplanung stellt einen wichtigen Bestandteil des Scrum-Prozesses dar. Zu Beginn jedes neuen Sprints trifft sich das Team, um gemeinsam zu entscheiden, welche Aufgaben innerhalb des kommenden Zeitraums umgesetzt werden sollen.
Als Grundlage dient das Product Backlog, in dem alle bekannten Anforderungen des Projekts gesammelt werden. Während der Sprintplanung wählt das Team jene Aufgaben aus, die innerhalb der nächsten zwei Wochen realistisch umgesetzt werden können. Diese Aufgaben werden anschließend in das Sprint Backlog übernommen.
Während des Sprints arbeitet das Entwicklungsteam an der Umsetzung dieser Aufgaben. Die Arbeit wird dabei häufig in kleinere Teilaufgaben unterteilt, um die Fortschritte besser verfolgen zu können.
Zur Koordination der täglichen Arbeit findet das sogenannte Daily Scrum statt. Dieses kurze Meeting dauert in der Regel maximal 15 Minuten und dient dazu, den aktuellen Stand der Entwicklung zu besprechen. Jedes Teammitglied beantwortet dabei typischerweise drei Fragen:
• Was habe ich seit dem letzten Meeting erledigt?
• Woran werde ich heute arbeiten?
• Welche Hindernisse gibt es aktuell?
Durch diese regelmäßige Abstimmung wird sichergestellt, dass alle Teammitglieder über den aktuellen Projektstand informiert sind und mögliche Probleme frühzeitig erkannt werden.
Am Ende eines Sprints werden die entwickelten Funktionen im Sprint Review präsentiert. In diesem Meeting wird überprüft, welche Anforderungen erfolgreich umgesetzt wurden und ob weitere Anpassungen notwendig sind. Anschließend reflektiert das Team im Rahmen der Sprint Retrospective den Arbeitsprozess und identifiziert mögliche Verbesserungen für zukünftige Sprints.
## 2.4 Vorteile von Scrum für die Webentwicklung ## 2.4 Vorteile von Scrum für die Webentwicklung
Die Verwendung von Scrum bietet insbesondere für Webentwicklungsprojekte zahlreiche Vorteile. Webanwendungen entwickeln sich häufig dynamisch weiter, da sich Anforderungen, Technologien oder Benutzerbedürfnisse im Laufe der Zeit verändern können.
Durch die Aufteilung der Entwicklung in kurze Sprints kann das Projekt flexibel auf solche Veränderungen reagieren. Neue Anforderungen können einfach in zukünftige Sprints integriert werden, ohne den gesamten Projektplan neu strukturieren zu müssen.
Ein weiterer Vorteil liegt in der kontinuierlichen Überprüfung der entwickelten Funktionen. Da am Ende jedes Sprints ein funktionierender Teil der Software präsentiert wird, können Fehler oder Verbesserungsmöglichkeiten frühzeitig erkannt werden. Dies reduziert das Risiko größerer Probleme in späteren Projektphasen.
Darüber hinaus fördert Scrum die Zusammenarbeit innerhalb des Teams. Regelmäßige Meetings und eine transparente Aufgabenverteilung sorgen dafür, dass alle Teammitglieder stets über den aktuellen Stand des Projekts informiert sind.
Insgesamt ermöglicht Scrum eine strukturierte, flexible und transparente Vorgehensweise bei der Entwicklung von Webanwendungen. Dadurch kann die Qualität der entwickelten Software verbessert und der Entwicklungsprozess effizienter gestaltet werden.
# 1. Einleitung des individuellen Teils
In diesem Abschnitt wird meine persönliche Aufgabenstellung im Rahmen des Projektes (Alumnihub) beschrieben.
**Auftrag / persönliche Aufgabenstellungen**
Meine Zuständigkeiten und Verantwortlichkeiten:
• Datenschutzerklärung
• Backup und Restore Systeme
• Entwicklung
• Premiumbereich
• LinkedIn Anmeldung
# 2. Anforderungen an das entwickelte Modul bzw. die Funktionalität
funktionale / nichtfunktionale Anforderungen
Use Cases
# 3. Individuelle Themenstellung & Zielsetzung # 3. Individuelle Themenstellung & Zielsetzung
## 3.1 Themenstellung ## 3.1 Themenstellung
### Entwicklung von einem CMS-Modul ### - Entwicklung von einem CMS-Moduls:
- Premiumbereich:
**Premiumbereich:**
Ein Schwerpunkt der Arbeit ist die Entwicklung eines Oqtane-Moduls, das einen Premiumbereich bereitstellt. Dieser Bereich soll ausschließlich autorisierten Benutzerinnen und Benutzern zugänglich sein und spezielle Inhalte oder Funktionen anbieten wie zum Beispiel das hochladen und ansehen von Ingeneuranträgen als Vorlage oder das finden und Kontakt aufnehmen mit anderen Benutzern. Dabei werden grundlegende Konzepte wie Benutzerrollen, Zugriffsrechte und die Integration in das bestehende CMS eingebunden. Ein Schwerpunkt der Arbeit ist die Entwicklung eines Oqtane-Moduls, das einen Premiumbereich bereitstellt. Dieser Bereich soll ausschließlich autorisierten Benutzerinnen und Benutzern zugänglich sein und spezielle Inhalte oder Funktionen anbieten wie zum Beispiel das hochladen und ansehen von Ingeneuranträgen als Vorlage oder das finden und Kontakt aufnehmen mit anderen Benutzern. Dabei werden grundlegende Konzepte wie Benutzerrollen, Zugriffsrechte und die Integration in das bestehende CMS eingebunden.
### Erstellung einer Datenschutzerklärung ### - Erstellung einer Datenschutzerklärung
Eine weitere wichtige Aufgabe war die Erstellung einer gesetzeskonformen Datenschutzerklärung. Diese ist erforderlich, um die Nutzerinnen und Nutzer unserer Webanwendung transparent und verständlich darüber zu informieren, welche personenbezogenen Daten erhoben, verarbeitet und gespeichert werden, zu welchem Zweck dies geschieht und welche Rechte ihnen in Bezug auf ihre Daten zustehen. Eine weitere wichtige Aufgabe war die Erstellung einer gesetzeskonformen Datenschutzerklärung. Diese ist erforderlich, um die Nutzerinnen und Nutzer unserer Webanwendung transparent und verständlich darüber zu informieren, welche personenbezogenen Daten erhoben, verarbeitet und gespeichert werden, zu welchem Zweck dies geschieht und welche Rechte ihnen in Bezug auf ihre Daten zustehen.
### - LinkedIn Anmeldung
### LinkedIn Anmeldung
Zur Verbesserung der Benutzerfreundlichkeit und zur vereinfachten Anmeldung wird eine Anmeldung über LinkedIn mithilfe OAuths implementiert. Diese ermöglicht es Benutzerinnen und Benutzern, sich mit einem bestehenden LinkedIn-Konto zu registrieren oder anzumelden. Zur Verbesserung der Benutzerfreundlichkeit und zur vereinfachten Anmeldung wird eine Anmeldung über LinkedIn mithilfe OAuths implementiert. Diese ermöglicht es Benutzerinnen und Benutzern, sich mit einem bestehenden LinkedIn-Konto zu registrieren oder anzumelden.
### - Datenbank Backup und Restore
### Datenbank Backup und Restore
Abschließend wurde das Thema Datensicherung umfassend behandelt, da die Sicherstellung der Datenintegrität und Systemverfügbarkeit einen zentralen Bestandteil moderner Webanwendungen darstellt. In diesem Zusammenhang wurde ein Skript zur automatisierten Erstellung von Datenbank-Backups entwickelt, das in regelmäßigen Abständen Sicherungskopien der relevanten Daten erzeugt. Zusätzlich wurde ein weiteres Skript implementiert, das im Falle eines Datenverlusts oder Systemausfalls eine strukturierte und zuverlässige Wiederherstellung der gesicherten Daten ermöglicht. Abschließend wurde das Thema Datensicherung umfassend behandelt, da die Sicherstellung der Datenintegrität und Systemverfügbarkeit einen zentralen Bestandteil moderner Webanwendungen darstellt. In diesem Zusammenhang wurde ein Skript zur automatisierten Erstellung von Datenbank-Backups entwickelt, das in regelmäßigen Abständen Sicherungskopien der relevanten Daten erzeugt. Zusätzlich wurde ein weiteres Skript implementiert, das im Falle eines Datenverlusts oder Systemausfalls eine strukturierte und zuverlässige Wiederherstellung der gesicherten Daten ermöglicht.
Ziel dieser Maßnahmen ist es, das Risiko von Datenverlusten zu minimieren und einen stabilen sowie sicheren Betrieb der Webanwendung zu gewährleisten. Die Backup- und Restore-Prozesse sollen automatisiert ablaufen, um menschliche Fehler zu reduzieren und eine kontinuierliche, regelmäßige Datensicherung sicherzustellen. Dadurch wird eine hohe Ausfallsicherheit sowie die langfristige Verfügbarkeit der gespeicherten Informationen gewährleistet. Ziel dieser Maßnahmen ist es, das Risiko von Datenverlusten zu minimieren und einen stabilen sowie sicheren Betrieb der Webanwendung zu gewährleisten. Die Backup- und Restore-Prozesse sollen automatisiert ablaufen, um menschliche Fehler zu reduzieren und eine kontinuierliche, regelmäßige Datensicherung sicherzustellen. Dadurch wird eine hohe Ausfallsicherheit sowie die langfristige Verfügbarkeit der gespeicherten Informationen gewährleistet.
## 3.2 Zielsetzung ## 3.2 Zielsetzung
### Technische Zielsetzung ### - Technische Zielsetzung
Die technische Zielsetzung dieses Diplomarbeitsprojekts bestand darin, eine stabile und sichere Webplattform für Alumni zu entwickeln. Als technische Grundlage wurde das Content-Management-System Oqtane verwendet, welches auf modernen Webtechnologien basiert und eine modulare Erweiterung von Funktionen ermöglicht. Die Implementierung erfolgte innerhalb der von Oqtane bereitgestellten Architektur, wodurch verschiedene Funktionen effizient integriert werden konnten.
Ein zentraler Bestandteil der technischen Umsetzung war die Integration einer externen Authentifizierung über LinkedIn mithilfe des Protokolls OAuth 2.0. Dadurch können sich Benutzer direkt mit ihrem LinkedIn-Konto auf der Plattform anmelden, ohne ein separates Benutzerkonto erstellen zu müssen. Dies vereinfacht den Registrierungsprozess und erhöht gleichzeitig die Sicherheit, da sensible Zugangsdaten ausschließlich beim externen Anbieter verbleiben. ### - Funktionale Zielsetzung
Zusätzlich wurde eine Datenbank auf Basis von PostgreSQL eingesetzt, um Benutzerinformationen, Inhalte sowie weitere Systemdaten zuverlässig zu speichern. Um die langfristige Verfügbarkeit dieser Daten sicherzustellen, wurde ein automatisiertes Backup-System implementiert. Dieses System erstellt regelmäßig Sicherungskopien der Datenbank sowie der wichtigsten Systemdateien. Ergänzend dazu wurde ein Restore-Skript entwickelt, mit dem gespeicherte Daten im Falle eines Systemfehlers oder Datenverlustes wiederhergestellt werden können. ### - Gestalterische Zielsetzung
Ein weiterer wichtiger Aspekt der technischen Zielsetzung war die Einhaltung rechtlicher Anforderungen im Bereich Datenschutz. Daher wurde eine Datenschutzerklärung erstellt und die Plattform so konzipiert, dass personenbezogene Daten der Benutzer entsprechend den Vorgaben der Datenschutz-Grundverordnung verarbeitet werden.
### Funktionale Zielsetzung
Die funktionale Zielsetzung des Projekts bestand darin, eine Onlineplattform zu entwickeln, die ehemaligen Schülerinnen und Schülern die Möglichkeit bietet, miteinander in Kontakt zu bleiben und sich über aktuelle Veranstaltungen zu informieren. Die Plattform dient somit als digitales Netzwerk für Alumni und soll den Austausch zwischen ehemaligen Mitgliedern der Bildungseinrichtung fördern.
Eine zentrale Funktion der Anwendung ist die Anmeldung über LinkedIn, wodurch Benutzer schnell und unkompliziert Zugriff auf die Plattform erhalten können. Nach der erfolgreichen Anmeldung wird automatisch ein Benutzerkonto erstellt oder ein bestehendes Konto zugeordnet.
Darüber hinaus bietet die Plattform Funktionen zur Darstellung und Verwaltung von Veranstaltungen. Alumni können sich über kommende Events informieren und sich für diese anmelden. Dadurch wird die Organisation von Treffen oder Veranstaltungen erleichtert und die Vernetzung innerhalb der Alumni-Community gefördert.
Zusätzlich wurde ein Premiumbereich entwickelt, der bestimmte Inhalte oder Funktionen exklusiv für berechtigte Benutzer bereitstellt. Dieser Bereich erweitert die Möglichkeiten der Plattform und ermöglicht es, spezielle Inhalte nur bestimmten Benutzergruppen zugänglich zu machen.
Durch diese Funktionen entsteht eine Plattform, die nicht nur als Informationsquelle dient, sondern auch aktiv zur Vernetzung der Alumni beiträgt.
### Gestalterische Zielsetzung
Neben den technischen und funktionalen Anforderungen spielte auch die Gestaltung der Plattform eine wichtige Rolle. Ziel war es, eine übersichtliche und benutzerfreundliche Oberfläche zu entwickeln, die eine einfache Navigation und intuitive Bedienung ermöglicht.
Die Struktur der Website wurde so aufgebaut, dass wichtige Funktionen wie Login, Benutzerprofil oder Eventübersicht schnell erreichbar sind. Ein klares Layout und eine strukturierte Seitenaufteilung tragen dazu bei, dass sich Benutzer auf der Plattform leicht orientieren können.
Darüber hinaus wurde darauf geachtet, dass die Plattform ein modernes Erscheinungsbild besitzt und den Erwartungen einer zeitgemäßen Webanwendung entspricht. Durch eine klare Gestaltung und eine reduzierte Benutzeroberfläche wird sichergestellt, dass Inhalte übersichtlich dargestellt werden und die Nutzung der Plattform möglichst komfortabel ist.
Insgesamt verfolgt die gestalterische Zielsetzung das Ziel, eine Plattform zu schaffen, die sowohl funktional als auch optisch ansprechend ist und den Benutzern eine positive Nutzungserfahrung bietet.
# 4. Datenschutz und rechtliche Grundlagen # 4. Datenschutz und rechtliche Grundlagen
@@ -145,16 +46,21 @@ Der Anwendungsbereich der DSGVO umfasst alle Verarbeitungen personenbezogener Da
Die DSGVO verfolgt mehrere grundsätzliche Ziele: Die DSGVO verfolgt mehrere grundsätzliche Ziele:
Schutz der Grundrechte natürlicher Personen bei der Verarbeitung ihrer personenbezogenen Daten sowie die Gewährleistung ihrer Grundfreiheiten. Schutz der Grundrechte natürlicher Personen bei der Verarbeitung ihrer personenbezogenen Daten sowie die Gewährleistung ihrer Grundfreiheiten.
• Einheitlicher Datenschutz in der EU, sodass sowohl Unternehmen innerhalb als auch außerhalb der EU, die Daten von EU-Bürgern verarbeiten, denselben Regeln unterliegen.
• Schaffung klarer Pflichten für Datenverantwortliche und -verarbeiter zur rechtskonformen Datenverarbeitung. Einheitlicher Datenschutz in der EU, sodass sowohl Unternehmen innerhalb als auch außerhalb der EU, die Daten von EU-Bürgern verarbeiten, denselben Regeln unterliegen.
Schaffung klarer Pflichten für Datenverantwortliche und -verarbeiter zur rechtskonformen Datenverarbeitung.
Die DSGVO enthält dabei zentral die Grundsätze der Datenverarbeitung (§ 5 DSGVO), die sicherstellen, dass personenbezogene Daten nur rechtmäßig, zweckgebunden und in transparentem Umfang verarbeitet werden. Dazu gehören unter anderem: Die DSGVO enthält dabei zentral die Grundsätze der Datenverarbeitung (§ 5 DSGVO), die sicherstellen, dass personenbezogene Daten nur rechtmäßig, zweckgebunden und in transparentem Umfang verarbeitet werden. Dazu gehören unter anderem:
Rechtmäßigkeit, Fairness und Transparenz der Verarbeitung Rechtmäßigkeit, Fairness und Transparenz der Verarbeitung
• Zweckbindung der Datenerhebung
• Datenminimierung und Speicherbegrenzung Zweckbindung der Datenerhebung
• Integrität und Vertraulichkeit der Datenverarbeitung
Datenminimierung und Speicherbegrenzung
Integrität und Vertraulichkeit der Datenverarbeitung
Die Einhaltung dieser Prinzipien ist für jede Organisation verpflichtend, die personenbezogene Daten verarbeitet unabhängig von ihrer Größe oder Branche. Dies umfasst sowohl technische Aspekte der Datenverarbeitung als auch die Informationspflichten gegenüber Betroffenen, wie sie etwa in Datenschutzerklärungen umgesetzt werden müssen. Die Einhaltung dieser Prinzipien ist für jede Organisation verpflichtend, die personenbezogene Daten verarbeitet unabhängig von ihrer Größe oder Branche. Dies umfasst sowohl technische Aspekte der Datenverarbeitung als auch die Informationspflichten gegenüber Betroffenen, wie sie etwa in Datenschutzerklärungen umgesetzt werden müssen.
@@ -162,22 +68,28 @@ Die Einhaltung dieser Prinzipien ist für jede Organisation verpflichtend, die p
Im Rahmen der Diplomarbeit wurde eine umfassende Analyse der Datenschutzanforderungen durchgeführt und entsprechende Maßnahmen zur Umsetzung auf der Website implementiert. Dabei wurden insbesondere die Vorgaben der DSGVO berücksichtigt, um sicherzustellen, dass die Website den geltenden Datenschutzbestimmungen entspricht. Im Rahmen der Diplomarbeit wurde eine umfassende Analyse der Datenschutzanforderungen durchgeführt und entsprechende Maßnahmen zur Umsetzung auf der Website implementiert. Dabei wurden insbesondere die Vorgaben der DSGVO berücksichtigt, um sicherzustellen, dass die Website den geltenden Datenschutzbestimmungen entspricht.
Ein zentrales Element der Umsetzung war die Erstellung einer gesetzeskonformen Datenschutzerklärung. Diese informiert die Nutzerinnen und Nutzer über: Ein zentrales Element der Umsetzung war die Erstellung einer gesetzeskonformen Datenschutzerklärung. Diese informiert die Nutzerinnen und Nutzer über:
die Art der verarbeiteten personenbezogenen Daten,
• die Art der verarbeiteten personenbezogenen Daten, den Zweck der Datenverarbeitung,
• den Zweck der Datenverarbeitung,
• die Rechtsgrundlagen der Verarbeitung,
• die Speicherdauer der Daten,
• die Weitergabe von Daten an Dritte
• sowie über die Rechte der Betroffenen gemäß Art. 1522 DSGVO.
die Rechtsgrundlagen der Verarbeitung,
die Speicherdauer der Daten,
die Weitergabe von Daten an Dritte
sowie über die Rechte der Betroffenen gemäß Art. 1522 DSGVO.
Die Datenschutzerklärung wird auf der Website gut sichtbar eingebunden und ist für alle Nutzerinnen und Nutzer jederzeit zugänglich. Die Datenschutzerklärung wird auf der Website gut sichtbar eingebunden und ist für alle Nutzerinnen und Nutzer jederzeit zugänglich.
Neben der Informationspflicht wurden auch technische und organisatorische Maßnahmen umgesetzt, um die Sicherheit der verarbeiteten Daten zu gewährleisten. Dazu gehören unter anderem: Neben der Informationspflicht wurden auch technische und organisatorische Maßnahmen umgesetzt, um die Sicherheit der verarbeiteten Daten zu gewährleisten. Dazu gehören unter anderem:
Verschlüsselte Übertragung von Daten mittels HTTPS Verschlüsselte Übertragung von Daten mittels HTTPS
• Passwortgeschützter Zugriff auf sensible Daten
• Regelmäßige Sicherheitsupdates der eingesetzten Software Passwortgeschützter Zugriff auf sensible Daten
• Minimierung der Datenerhebung auf das Notwendige: Es werden nur die Daten erhoben, die für die Funktion der Website unbedingt erforderlich sind. (Grundprinzip der Datenminimierung nach Art. 5 Abs. 1 lit. c DSGVO)
Regelmäßige Sicherheitsupdates der eingesetzten Software
Minimierung der Datenerhebung auf das Notwendige: Es werden nur die Daten erhoben, die für die Funktion der Website unbedingt erforderlich sind.(Grundprinzip der Datenminimierung nach Art. 5 Abs. 1 lit. c DSGVO)
## 4.3 Schutz personenbezogener Daten der Benutzer [^3] ## 4.3 Schutz personenbezogener Daten der Benutzer [^3]
Der Schutz personenbezogener Daten der Benutzer stellt einen zentralen Bestandteil der Website des Absolventenvereins dar. Sämtliche Datenverarbeitungen erfolgen unter Berücksichtigung der Vorgaben der Datenschutz-Grundverordnung (DSGVO) sowie des österreichischen Datenschutzgesetzes (DSG). Der Schutz personenbezogener Daten der Benutzer stellt einen zentralen Bestandteil der Website des Absolventenvereins dar. Sämtliche Datenverarbeitungen erfolgen unter Berücksichtigung der Vorgaben der Datenschutz-Grundverordnung (DSGVO) sowie des österreichischen Datenschutzgesetzes (DSG).
@@ -195,7 +107,6 @@ Zusätzlich werden die Betroffenenrechte gemäß Art. 1522 DSGVO ausdrücklic
Darüber hinaus besteht das Recht, sich bei der österreichischen Datenschutzbehörde zu beschweren, sofern eine rechtswidrige Verarbeitung vermutet wird. Darüber hinaus besteht das Recht, sich bei der österreichischen Datenschutzbehörde zu beschweren, sofern eine rechtswidrige Verarbeitung vermutet wird.
Durch die Kombination aus klar definierten Rechtsgrundlagen, transparenten Informationspflichten und technischen Schutzmaßnahmen wird ein hohes Datenschutzniveau gewährleistet und der verantwortungsvolle Umgang mit personenbezogenen Daten sichergestellt. Durch die Kombination aus klar definierten Rechtsgrundlagen, transparenten Informationspflichten und technischen Schutzmaßnahmen wird ein hohes Datenschutzniveau gewährleistet und der verantwortungsvolle Umgang mit personenbezogenen Daten sichergestellt.
# 5. Automatisierung von Serverprozessen # 5. Automatisierung von Serverprozessen
## 5.1 Notwendigkeit von Datensicherung [^4][^5] ## 5.1 Notwendigkeit von Datensicherung [^4][^5]
@@ -216,29 +127,23 @@ Der Umfang des Backups besteht aus zwei zentralen Komponenten:
Alle Backups werden lokal auf dem Server gespeichert. Diese Backups sind alle zu finden unter: /var/backups Alle Backups werden lokal auf dem Server gespeichert. Diese Backups sind alle zu finden unter: /var/backups
Für jedes Backup wird in diesem Verzeichnis ein Unterordner erstellt,dessen Name einen UTC-Zeitstempel enthält.Das ermöglicht eine saubere Trennung der Sicherungsstände und einfache chronologische Zuordnung. Für jedes Backup wird in diesem Verzeichnis ein Unterordner erstellt,dessen Name einen UTC-Zeitstempel enthält.Das ermöglicht eine saubere Trennung der Sicherungsstände und einfache chronologische Zuordnung.
```bash
TS="$(date -u +'%Y%m%dT%H%M%SZ')" TS="$(date -u +'%Y%m%dT%H%M%SZ')"
DEST_DIR="${BACKUP_ROOT}/${TS}" DEST_DIR="${BACKUP_ROOT}/${TS}"
```
date -u erzeugt einen Zeitstempel in UTC, wodurch die Bennenung unabhängig von Zeitzonen eindeutig bleibt. date -u erzeugt einen Zeitstempel in UTC, wodurch die Bennenung unabhängig von Zeitzonen eindeutig bleibt.
Der Zeitstempel wird als Ordnername verwendet, sodass jedes Backup separat abgelegt wird (z. B. 20260226T023000Z). Der Zeitstempel wird als Ordnername verwendet, sodass jedes Backup separat abgelegt wird (z. B. 20260226T023000Z).
Die Sicherung der PostgreSQL-Datenbank erfolgt mithilfe des Programms pg_dump, welches ein vollständiges Abbild der Datenbank erzeugt: Die Sicherung der PostgreSQL-Datenbank erfolgt mithilfe des Programms pg_dump, welches ein vollständiges Abbild der Datenbank erzeugt:
```bash
pg_dump -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" -d "$PGDATABASE" -Fc \ pg_dump -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" -d "$PGDATABASE" -Fc \
-f "${DEST_DIR}/db_${PGDATABASE}.dump" -f "${DEST_DIR}/db_${PGDATABASE}.dump"
```
Hierbei werden Host, Port, Benutzer und Datenbankname über Variablen definiert, wodurch das Skript flexibel einsetzbar bleibt. Der Parameter -Fc erstellt das Backup im sogenannten Custom-Format. Dieses Format bietet den Vorteil, dass beim Wiederherstellen einzelne Tabellen oder Datenbankobjekte selektiv importiert werden können. Zudem ist es komprimiert und effizienter als ein reines SQL-Textdump. Die Ausgabe wird direkt in eine Datei im zuvor erstellten Backup-Ordner geschrieben. Die Authentifizierung erfolgt über eine .pgpass-Datei, wodurch das Backup automatisiert und ohne manuelle Passworteingabe ausgeführt werden kann. Hierbei werden Host, Port, Benutzer und Datenbankname über Variablen definiert, wodurch das Skript flexibel einsetzbar bleibt. Der Parameter -Fc erstellt das Backup im sogenannten Custom-Format. Dieses Format bietet den Vorteil, dass beim Wiederherstellen einzelne Tabellen oder Datenbankobjekte selektiv importiert werden können. Zudem ist es komprimiert und effizienter als ein reines SQL-Textdump. Die Ausgabe wird direkt in eine Datei im zuvor erstellten Backup-Ordner geschrieben. Die Authentifizierung erfolgt über eine .pgpass-Datei, wodurch das Backup automatisiert und ohne manuelle Passworteingabe ausgeführt werden kann.
Neben der Datenbank wird auch der gesamte Anwendungsordner gesichert. Dies geschieht mithilfe des tar-Programms, das Dateien zu einem komprimierten Archiv zusammenfasst: Neben der Datenbank wird auch der gesamte Anwendungsordner gesichert. Dies geschieht mithilfe des tar-Programms, das Dateien zu einem komprimierten Archiv zusammenfasst:
```bash
tar -cvpzf "${DEST_DIR}/oqtane_files.tar.gz" \ tar -cvpzf "${DEST_DIR}/oqtane_files.tar.gz" \
--absolute-names "$OQTANE_DIR" --absolute-names "$OQTANE_DIR"
```
Das Programm tar steht für Tape Archive und wurde ursprünglich entwickelt, um mehrere Dateien auf Magnetbändern zu sichern. Heute wird es unter Linux und Unix-Systemen verwendet, um mehrere Dateien und Verzeichnisse zu einem einzigen Archiv zusammenzufassen. Dabei kann das Archiv optional komprimiert werden. Das Programm tar steht für Tape Archive und wurde ursprünglich entwickelt, um mehrere Dateien auf Magnetbändern zu sichern. Heute wird es unter Linux und Unix-Systemen verwendet, um mehrere Dateien und Verzeichnisse zu einem einzigen Archiv zusammenzufassen. Dabei kann das Archiv optional komprimiert werden.
@@ -248,9 +153,7 @@ Ein Cronjob ist eine zeitgesteuerte Aufgabe unter Linux-Systemen, die automatisc
Im vorliegenden Projekt wird ein Cronjob verwendet, um das Backup-Skript täglich automatisiert auszuführen. Der entsprechende Eintrag lautet: Im vorliegenden Projekt wird ein Cronjob verwendet, um das Backup-Skript täglich automatisiert auszuführen. Der entsprechende Eintrag lautet:
```bash
30 2 * * * /home/florian/backup-script.sh >> /home/florian/backup.log 2>&1 30 2 * * * /home/florian/backup-script.sh >> /home/florian/backup.log 2>&1
```
Die ersten fünf Felder definieren den Ausführungszeitpunkt. In diesem Fall bedeutet die Konfiguration, dass das Skript täglich um 02:30 Uhr gestartet wird. Die nächtliche Ausführung reduziert die Systembelastung während der regulären Nutzung. Die ersten fünf Felder definieren den Ausführungszeitpunkt. In diesem Fall bedeutet die Konfiguration, dass das Skript täglich um 02:30 Uhr gestartet wird. Die nächtliche Ausführung reduziert die Systembelastung während der regulären Nutzung.
@@ -260,47 +163,41 @@ Durch den Einsatz eines Cronjobs wird eine regelmäßige und zuverlässige Daten
Ein weiterer Bestandteil des Backup-Systems ist ein automatischer Mechanismus zur Verwaltung alter Sicherungen. Da Backups langfristig Speicherplatz beanspruchen können, wurde eine Funktion implementiert, die nur eine definierte Anzahl an Sicherungen beibehält. In der Konfiguration des Skripts wird festgelegt, dass maximal 30 Backups gespeichert werden. Ein weiterer Bestandteil des Backup-Systems ist ein automatischer Mechanismus zur Verwaltung alter Sicherungen. Da Backups langfristig Speicherplatz beanspruchen können, wurde eine Funktion implementiert, die nur eine definierte Anzahl an Sicherungen beibehält. In der Konfiguration des Skripts wird festgelegt, dass maximal 30 Backups gespeichert werden.
```bash
RETAIN=30 RETAIN=30
```
Während der Ausführung überprüft das Skript, wie viele Backup-Ordner im Backup-Verzeichnis vorhanden sind. Die Ordner werden anhand ihres Zeitstempels sortiert, wodurch die chronologische Reihenfolge der Sicherungen eindeutig bestimmt werden kann. Sollte die Anzahl der vorhandenen Backups den definierten Wert überschreiten, werden automatisch die ältesten Sicherungen gelöscht. Während der Ausführung überprüft das Skript, wie viele Backup-Ordner im Backup-Verzeichnis vorhanden sind. Die Ordner werden anhand ihres Zeitstempels sortiert, wodurch die chronologische Reihenfolge der Sicherungen eindeutig bestimmt werden kann. Sollte die Anzahl der vorhandenen Backups den definierten Wert überschreiten, werden automatisch die ältesten Sicherungen gelöscht.
```bash
if (( ${#backups[@]} > RETAIN )); then if (( ${#backups[@]} > RETAIN )); then
for old in "${backups[@]:RETAIN}"; do for old in "${backups[@]:RETAIN}"; do
rm -rf -- "$old" rm -rf -- "$old"
done done
fi fi
```
Durch diesen Rotationsmechanismus wird verhindert, dass sich im Laufe der Zeit eine unbegrenzte Anzahl von Backups ansammelt und dadurch der verfügbare Speicherplatz auf dem Server erschöpft wird. Gleichzeitig bleibt eine ausreichende Anzahl an Sicherungsständen erhalten, um im Fehlerfall auf frühere Systemzustände zurückgreifen zu können. Durch diesen Rotationsmechanismus wird verhindert, dass sich im Laufe der Zeit eine unbegrenzte Anzahl von Backups ansammelt und dadurch der verfügbare Speicherplatz auf dem Server erschöpft wird. Gleichzeitig bleibt eine ausreichende Anzahl an Sicherungsständen erhalten, um im Fehlerfall auf frühere Systemzustände zurückgreifen zu können.
Die gewählte Anzahl von 30 Sicherungen ermöglicht es, bei täglicher Ausführung des Backup-Skripts ungefähr einen Monat an Wiederherstellungspunkten vorzuhalten. Dadurch wird ein sinnvoller Kompromiss zwischen Datensicherheit und effizienter Speicherverwaltung erreicht. Die gewählte Anzahl von 30 Sicherungen ermöglicht es, bei täglicher Ausführung des Backup-Skripts ungefähr einen Monat an Wiederherstellungspunkten vorzuhalten. Dadurch wird ein sinnvoller Kompromiss zwischen Datensicherheit und effizienter Speicherverwaltung erreicht.
## 5.3 Implementierung der Backup-Skripte ## 5.3 Implementierung der Backup-Skripte
Die Implementierung des Backup-Systems erfolgte mittels eines Bash-Skripts, das auf dem Linux-Server ausgeführt wird. Bash eignet sich besonders für administrative Aufgaben, da sie direkten Zugriff auf Systembefehle, Dateien und Prozesse bietet. Das Skript wurde so aufgebaut, dass es robust, automatisierbar und nachvollziehbar arbeitet. Die Implementierung des Backup-Systems erfolgte mittels eines Bash-Skripts, das auf dem Linux-Server ausgeführt wird. Bash eignet sich besonders für administrative Aufgaben, da sie direkten Zugriff auf Systembefehle, Dateien und Prozesse bietet. Das Skript wurde so aufgebaut, dass es robust, automatisierbar und nachvollziehbar arbeitet.
Zu Beginn des Skripts wird folgende Konfiguration gesetzt: Zu Beginn des Skripts wird folgende Konfiguration gesetzt:
```bash
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail set -euo pipefail
```
Die erste Zeile definiert den Interpreter, mit dem das Skript ausgeführt wird. Dadurch wird sichergestellt, dass unabhängig von der Systemkonfiguration die korrekte Bash-Version verwendet wird. Die erste Zeile definiert den Interpreter, mit dem das Skript ausgeführt wird. Dadurch wird sichergestellt, dass unabhängig von der Systemkonfiguration die korrekte Bash-Version verwendet wird.
Die Anweisung set -euo pipefail erhöht die Sicherheit und Stabilität des Skripts: Die Anweisung set -euo pipefail erhöht die Sicherheit und Stabilität des Skripts:
`-e` beendet das Skript sofort, wenn ein Befehl fehlschlägt -e beendet das Skript sofort, wenn ein Befehl fehlschlägt
`-u` verhindert die Verwendung nicht definierter Variablen
`-o pipefail` sorgt dafür, dass auch Fehler innerhalb von Befehls-Pipelines erkannt werden -u verhindert die Verwendung nicht definierter Variablen
-o pipefail sorgt dafür, dass auch Fehler innerhalb von Befehls-Pipelines erkannt werden
Diese Einstellungen verhindern, dass das Backup bei Fehlern unbemerkt unvollständig ausgeführt wird. Diese Einstellungen verhindern, dass das Backup bei Fehlern unbemerkt unvollständig ausgeführt wird.
Im nächsten Schritt werden zentrale Konfigurationsvariablen definiert: Im nächsten Schritt werden zentrale Konfigurationsvariablen definiert:
```bash
BACKUP_ROOT="/var/backups/fullserver" BACKUP_ROOT="/var/backups/fullserver"
RETAIN=30 RETAIN=30
@@ -308,7 +205,6 @@ PGHOST="localhost"
PGPORT="5432" PGPORT="5432"
PGUSER="florian" PGUSER="florian"
PGDATABASE="oqtane" PGDATABASE="oqtane"
```
Durch die Verwendung von Variablen bleibt das Skript flexibel und wartbar. Änderungen, beispielsweise am Speicherort oder an der Datenbank, können an einer zentralen Stelle vorgenommen werden, ohne den restlichen Code anzupassen. Durch die Verwendung von Variablen bleibt das Skript flexibel und wartbar. Änderungen, beispielsweise am Speicherort oder an der Datenbank, können an einer zentralen Stelle vorgenommen werden, ohne den restlichen Code anzupassen.
@@ -320,89 +216,78 @@ Ein weiterer wichtiger Bestandteil der Implementierung ist das integrierte Rotat
Zusätzlich gibt das Skript Statusmeldungen mit Zeitangaben aus: Zusätzlich gibt das Skript Statusmeldungen mit Zeitangaben aus:
```bash
echo "[$(date -Iseconds)] Backup-Job abgeschlossen." echo "[$(date -Iseconds)] Backup-Job abgeschlossen."
```
Diese Meldungen werden bei automatischer Ausführung über den Cronjob in eine Logdatei geschrieben. Dadurch kann jederzeit überprüft werden, ob das Backup erfolgreich abgeschlossen wurde oder ob Fehler aufgetreten sind. Diese Meldungen werden bei automatischer Ausführung über den Cronjob in eine Logdatei geschrieben. Dadurch kann jederzeit überprüft werden, ob das Backup erfolgreich abgeschlossen wurde oder ob Fehler aufgetreten sind.
Die Implementierung zeichnet sich durch folgende Eigenschaften aus: Die Implementierung zeichnet sich durch folgende Eigenschaften aus:
vollständige Sicherung von Datenbank und Anwendungsdateien vollständige Sicherung von Datenbank und Anwendungsdateien
• automatische tägliche Ausführung
• integrierte Fehlerbehandlung automatische tägliche Ausführung
• strukturierte Archivierung mit Zeitstempel
• automatische Speicherverwaltung durch Rotationsmechanismus integrierte Fehlerbehandlung
strukturierte Archivierung mit Zeitstempel
automatische Speicherverwaltung durch Rotationsmechanismus
Durch diese Umsetzung wurde ein zuverlässiges und wartbares Backup-System geschaffen, das den kontinuierlichen Betrieb der Webanwendung unterstützt und im Fehlerfall eine schnelle Wiederherstellung ermöglicht. Durch diese Umsetzung wurde ein zuverlässiges und wartbares Backup-System geschaffen, das den kontinuierlichen Betrieb der Webanwendung unterstützt und im Fehlerfall eine schnelle Wiederherstellung ermöglicht.
## 5.4 Wiederherstellung von Daten mittels Restore-Skripten ## 5.4 Wiederherstellung von Daten mittels Restore-Skripten
Neben der Datensicherung stellt die strukturierte Wiederherstellung der Daten einen zentralen Bestandteil des Backup-Systems dar. Zu diesem Zweck wurde ein eigenes Bash-Skript implementiert, das sowohl die PostgreSQL-Datenbank als auch die Anwendungsdateien aus einem gewählten Backup-Ordner wiederherstellt
Neben der Datensicherung stellt die strukturierte Wiederherstellung der Daten einen zentralen Bestandteil des Backup-Systems dar. Zu diesem Zweck wurde ein eigenes Bash-Skript implementiert, das sowohl die PostgreSQL-Datenbank als auch die Anwendungsdateien aus einem gewählten Backup-Ordner wiederherstellt (Restore-Skript). Ziel war es, einen klar definierten und kontrollierten Prozess zu schaffen, der im Fehlerfall eine vollständige Rücksetzung des Systems ermöglicht. Resolve-Skript
. Ziel war es, einen klar definierten und kontrollierten Prozess zu schaffen, der im Fehlerfall eine vollständige Rücksetzung des Systems ermöglicht.
Das Skript beginnt analog zum Backup-Skript mit einer sicheren Ausführungskonfiguration: Das Skript beginnt analog zum Backup-Skript mit einer sicheren Ausführungskonfiguration:
```bash
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail set -euo pipefail
```
Auch hier sorgt set -euo pipefail dafür, dass das Skript bei Fehlern sofort abbricht, keine undefinierten Variablen verwendet werden und Fehler innerhalb von Befehls-Pipelines korrekt erkannt werden. Dadurch wird verhindert, dass ein unvollständiger oder fehlerhafter Restore durchgeführt wird. Auch hier sorgt set -euo pipefail dafür, dass das Skript bei Fehlern sofort abbricht, keine undefinierten Variablen verwendet werden und Fehler innerhalb von Befehls-Pipelines korrekt erkannt werden. Dadurch wird verhindert, dass ein unvollständiger oder fehlerhafter Restore durchgeführt wird.
Zu Beginn wird festgelegt, welcher Backup-Ordner verwendet werden soll. Wird beim Start ein Argument übergeben, wird dieses als Backup-Verzeichnis interpretiert. Andernfalls wird automatisch das neueste Backup ausgewählt: Zu Beginn wird festgelegt, welcher Backup-Ordner verwendet werden soll. Wird beim Start ein Argument übergeben, wird dieses als Backup-Verzeichnis interpretiert. Andernfalls wird automatisch das neueste Backup ausgewählt:
```bash
if [[ $# -ge 1 ]]; then if [[ $# -ge 1 ]]; then
BACKUP_SUBDIR="$1" BACKUP_SUBDIR="$1"
else else
BACKUP_SUBDIR="$(ls -1 "${BACKUP_ROOT}" | sort | tail -n 1)" BACKUP_SUBDIR="$(ls -1 "${BACKUP_ROOT}" | sort | tail -n 1)"
fi fi
```
Diese Logik ermöglicht eine flexible Nutzung des Skripts. Administratoren können gezielt einen bestimmten Sicherungsstand auswählen oder standardmäßig den aktuellsten verwenden. Diese Logik ermöglicht eine flexible Nutzung des Skripts. Administratoren können gezielt einen bestimmten Sicherungsstand auswählen oder standardmäßig den aktuellsten verwenden.
Vor Beginn der Wiederherstellung erfolgt eine deutliche Sicherheitswarnung: Vor Beginn der Wiederherstellung erfolgt eine deutliche Sicherheitswarnung:
```bash
read -rp "Fortfahren? (ja/nein): " answer read -rp "Fortfahren? (ja/nein): " answer
if [[ "$answer" != "ja" ]]; then if [[ "$answer" != "ja" ]]; then
exit 0 exit 0
fi fi
```
Diese Abfrage dient als Schutzmechanismus, da der Restore-Prozess bestehende Daten überschreibt. Erst nach expliziter Bestätigung wird die Wiederherstellung gestartet. Diese Abfrage dient als Schutzmechanismus, da der Restore-Prozess bestehende Daten überschreibt. Erst nach expliziter Bestätigung wird die Wiederherstellung gestartet.
Die Wiederherstellung der PostgreSQL-Datenbank erfolgt in mehreren Schritten. Zunächst wird falls vorhanden die bestehende Datenbank gelöscht: Die Wiederherstellung der PostgreSQL-Datenbank erfolgt in mehreren Schritten. Zunächst wird falls vorhanden die bestehende Datenbank gelöscht:
```bash
dropdb -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" "$PGDATABASE" dropdb -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" "$PGDATABASE"
```
Anschließend wird eine neue, leere Datenbank erstellt: Anschließend wird eine neue, leere Datenbank erstellt:
```bash
createdb -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" "$PGDATABASE" createdb -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" "$PGDATABASE"
```
Danach wird der zuvor gesicherte Dump eingespielt: Danach wird der zuvor gesicherte Dump eingespielt:
```bash
pg_restore -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" \ pg_restore -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" \
-d "$PGDATABASE" -c "$DUMP_FILE" -d "$PGDATABASE" -c "$DUMP_FILE"
```
Das Programm pg_restore liest das im Custom-Format gespeicherte Backup ein und stellt sämtliche Tabellen, Indizes und Datenbankobjekte wieder her. Die Option -c sorgt dafür, dass bestehende Objekte vor dem Import entfernt werden, wodurch Konflikte vermieden werden. Das Programm pg_restore liest das im Custom-Format gespeicherte Backup ein und stellt sämtliche Tabellen, Indizes und Datenbankobjekte wieder her. Die Option -c sorgt dafür, dass bestehende Objekte vor dem Import entfernt werden, wodurch Konflikte vermieden werden.
Neben der Datenbank wird auch der Anwendungsordner wiederhergestellt. Bevor die neuen Dateien entpackt werden, wird der aktuell vorhandene Ordner zur Sicherheit umbenannt: Neben der Datenbank wird auch der Anwendungsordner wiederhergestellt. Bevor die neuen Dateien entpackt werden, wird der aktuell vorhandene Ordner zur Sicherheit umbenannt:
```bash
mv "$OQTANE_DIR" "${OQTANE_DIR}.old.$(date +%s)" mv "$OQTANE_DIR" "${OQTANE_DIR}.old.$(date +%s)"
```
Diese Maßnahme verhindert einen vollständigen Datenverlust, falls beim Restore ein Problem auftreten sollte. Anschließend wird das Archiv entpackt: Diese Maßnahme verhindert einen vollständigen Datenverlust, falls beim Restore ein Problem auftreten sollte. Anschließend wird das Archiv entpackt:
```bash
tar -xvpzf "$FILES_ARCHIVE" tar -xvpzf "$FILES_ARCHIVE"
```
Der Parameter -x extrahiert das Archiv, -p stellt die ursprünglichen Dateiberechtigungen wieder her und -z dekomprimiert das gzip-Archiv. Dadurch wird die komplette Ordnerstruktur in ihrem ursprünglichen Zustand wiederhergestellt. Der Parameter -x extrahiert das Archiv, -p stellt die ursprünglichen Dateiberechtigungen wieder her und -z dekomprimiert das gzip-Archiv. Dadurch wird die komplette Ordnerstruktur in ihrem ursprünglichen Zustand wiederhergestellt.
@@ -425,8 +310,7 @@ Zur Anmeldung auf der entwickelten Webplattform wurde eine Authentifizierung üb
OAuth 2.0 basiert auf dem Prinzip der delegierten Autorisierung. Dabei erlaubt ein Benutzer einer Anwendung, bestimmte Informationen seines Kontos bei einem externen Dienst zu verwenden. Die eigentlichen Zugangsdaten beispielsweise das LinkedIn-Passwort verbleiben dabei ausschließlich beim Identitätsanbieter. OAuth 2.0 basiert auf dem Prinzip der delegierten Autorisierung. Dabei erlaubt ein Benutzer einer Anwendung, bestimmte Informationen seines Kontos bei einem externen Dienst zu verwenden. Die eigentlichen Zugangsdaten beispielsweise das LinkedIn-Passwort verbleiben dabei ausschließlich beim Identitätsanbieter.
Der grundlegende Ablauf einer OAuth-Authentifizierung ist in Abbildung X dargestellt. Dabei wird der Benutzer zunächst zur Login-Seite des externen Anbieters weitergeleitet. Nach erfolgreicher Anmeldung bestätigt der Benutzer, dass die Anwendung Zugriff auf bestimmte Profildaten erhalten darf. Der grundlegende Ablauf einer OAuth-Authentifizierung ist in Abbildung X dargestellt. Dabei wird der Benutzer zunächst zur Login-Seite des externen Anbieters weitergeleitet. Nach erfolgreicher Anmeldung bestätigt der Benutzer, dass die Anwendung Zugriff auf bestimmte Profildaten erhalten darf.
![OAuth-Authentifizierungsablauf](image.png) ![alt text](image.png) Erstellt von ChatGbt
*Abbildung: Ablauf der OAuth-Authentifizierung (Erstellt mit ChatGPT)*
Die Abbildung zeigt den Ablauf der OAuth-Authentifizierung. Zunächst erfolgt die Weiterleitung zur LinkedIn-Anmeldeseite, anschließend wird ein Autorisierungscode an die Webanwendung zurückgegeben, welcher gegen einen Zugriffstoken ausgetauscht wird. Die Abbildung zeigt den Ablauf der OAuth-Authentifizierung. Zunächst erfolgt die Weiterleitung zur LinkedIn-Anmeldeseite, anschließend wird ein Autorisierungscode an die Webanwendung zurückgegeben, welcher gegen einen Zugriffstoken ausgetauscht wird.
@@ -434,13 +318,13 @@ Nach der Autorisierung sendet LinkedIn einen sogenannten Authorization Code an d
Der Vorteil dieses Verfahrens liegt darin, dass die Webanwendung zu keinem Zeitpunkt Zugriff auf das Passwort des Benutzers erhält. Dadurch wird ein höheres Sicherheitsniveau erreicht und gleichzeitig die Benutzerfreundlichkeit verbessert, da sich Benutzer mit ihrem bestehenden LinkedIn-Konto anmelden können. Der Vorteil dieses Verfahrens liegt darin, dass die Webanwendung zu keinem Zeitpunkt Zugriff auf das Passwort des Benutzers erhält. Dadurch wird ein höheres Sicherheitsniveau erreicht und gleichzeitig die Benutzerfreundlichkeit verbessert, da sich Benutzer mit ihrem bestehenden LinkedIn-Konto anmelden können.
## 6.2 Technische Umsetzung der LinkedIn-Anmeldung in Oqtane ## 6.2 Technische Umsetzung der LinkedIn-Anmeldung in Oqtane
Die technische Umsetzung der LinkedIn-Authentifizierung erfolgte über das integrierte External Login System des Content-Management-Systems Oqtane. Dieses System ermöglicht die Integration externer Identitätsanbieter über standardisierte Protokolle wie OAuth 2.0. Die technische Umsetzung der LinkedIn-Authentifizierung erfolgte über das integrierte External Login System des Content-Management-Systems Oqtane. Dieses System ermöglicht die Integration externer Identitätsanbieter über standardisierte Protokolle wie OAuth 2.0.
Für die Verbindung mit LinkedIn wurde zunächst eine Entwickleranwendung im LinkedIn Developer Portal erstellt. Dabei werden zwei zentrale Zugangsdaten generiert: Für die Verbindung mit LinkedIn wurde zunächst eine Entwickleranwendung im LinkedIn Developer Portal erstellt. Dabei werden zwei zentrale Zugangsdaten generiert:
Client ID Client ID
• Client Secret
Client Secret
Diese dienen zur Identifikation der Webanwendung gegenüber den LinkedIn-Servern. Diese dienen zur Identifikation der Webanwendung gegenüber den LinkedIn-Servern.
@@ -458,15 +342,16 @@ Zusätzlich wurde eine sogenannte Redirect URL definiert. Diese URL wird von Lin
In der Konfiguration wurde außerdem festgelegt, welche Benutzerdaten von LinkedIn übernommen werden sollen. Dazu gehören unter anderem: In der Konfiguration wurde außerdem festgelegt, welche Benutzerdaten von LinkedIn übernommen werden sollen. Dazu gehören unter anderem:
Benutzername Benutzername
• E-Mail-Adresse
• eindeutige Benutzer-ID E-Mail-Adresse
eindeutige Benutzer-ID
Diese Daten werden von Oqtane als sogenannte Claims verarbeitet und anschließend dem Benutzerkonto der Plattform zugeordnet. Diese Daten werden von Oqtane als sogenannte Claims verarbeitet und anschließend dem Benutzerkonto der Plattform zugeordnet.
Darüber hinaus wurde in den Einstellungen aktiviert, dass bei der ersten Anmeldung automatisch ein neues Benutzerkonto erstellt werden kann. Dadurch können sich neue Nutzer direkt über ihr LinkedIn-Konto registrieren. Darüber hinaus wurde in den Einstellungen aktiviert, dass bei der ersten Anmeldung automatisch ein neues Benutzerkonto erstellt werden kann. Dadurch können sich neue Nutzer direkt über ihr LinkedIn-Konto registrieren.
## 6.3 Ablauf des Anmeldeprozesses ## 6.3 Ablauf des Anmeldeprozesses
Der eigentliche Anmeldevorgang erfolgt in mehreren aufeinanderfolgenden Schritten. Zunächst wählt der Benutzer auf der Login-Seite der Webplattform die Option zur Anmeldung über LinkedIn aus. Der eigentliche Anmeldevorgang erfolgt in mehreren aufeinanderfolgenden Schritten. Zunächst wählt der Benutzer auf der Login-Seite der Webplattform die Option zur Anmeldung über LinkedIn aus.
Daraufhin wird der Benutzer zur LinkedIn-Authentifizierungsseite weitergeleitet. Dort meldet sich der Benutzer mit seinem LinkedIn-Konto an und bestätigt die Autorisierung der Anwendung. Daraufhin wird der Benutzer zur LinkedIn-Authentifizierungsseite weitergeleitet. Dort meldet sich der Benutzer mit seinem LinkedIn-Konto an und bestätigt die Autorisierung der Anwendung.
@@ -477,345 +362,28 @@ Mit Hilfe dieses Tokens kann die Anwendung anschließend die freigegebenen Benut
# 7. Implementierung des Premium-Bereichs # 7. Implementierung des Premium-Bereichs
## 7.1 Ziel und Zweck des Premium-Bereichs ## 7.1 Ziel und Zweck des Premium-Bereichs
Der Premium-Bereich wurde mit dem Ziel entwickelt, den Mitgliedern des SZU Absolventenvereins einen klar abgegrenzten, exklusiven Bereich innerhalb der Vereinswebsite bereitzustellen. Das Premium-Bereich-Modul ist eine Erweiterung für das Content-Management-System Oqtane und bildet das Kernstück des digitalen Mitgliederbereichs. Es ermöglicht Mitgliedern, sich über das Hochladen eines Ingenieur-Antrags als PDF-Dokument für eine zeitlich begrenzte Premium-Mitgliedschaft zu qualifizieren. Premium-Mitglieder erhalten Zugang zu exklusiven Funktionen wie dem Einsehen genehmigter Anträge anderer Mitglieder sowie einer Mitgliedersuche mit integrierter Kontaktfunktion.
Der zentrale Zweck besteht darin, einen Anreiz für aktives Engagement im Verein zu schaffen. Dadurch entsteht ein Kreislauf, in dem qualitativ hochwertige Anträge die Wissensbasis der Gemeinschaft bereichern und gleichzeitig den einreichenden Mitgliedern einen konkreten Gegenwert in Form von Premium-Funktionen bieten. Der Premium-Bereich dient darüber hinaus als digitales Netzwerk-Instrument. Durch die Kombination aus Antrags-Einsicht, Mitgliedersuche und Kontaktfunktion wird eine Plattform geschaffen, die den fachlichen Austausch zwischen Absolventen fördert und die Vernetzung innerhalb der Gemeinschaft stärkt. Die zeitliche Begrenzung der Premium-Mitgliedschaft auf 12 Monate sorgt dafür, dass Mitglieder regelmäßig aktiv bleiben und neue Inhalte beitragen, um ihren Premium-Status aufrechtzuerhalten.
Die Entwicklung erfolgte als eigenständiges Oqtane-Modul, wodurch eine nahtlose Integration in die bestehende Vereinswebsite gewährleistet wird. Das Modul nutzt dabei die vom Framework bereitgestellten Mechanismen für Authentifizierung, Autorisierung, Datenbankzugriff und Dateiverwaltung. Die Architektur folgt etablierten Entwurfsmustern wie dem Repository-Pattern, Dependency Injection und dem Service-Layer-Muster. Das kumulative Premium-System mit vollständigem Audit-Trail stellt sicher, dass alle Statusänderungen transparent und nachvollziehbar sind. Die modulare Struktur erlaubt eine einfache Erweiterung um zusätzliche Funktionen, ohne die bestehende Codebasis grundlegend verändern zu müssen.
## 7.2 Funktionalität und Features des Premium-Bereichs ## 7.2 Funktionalität und Features des Premium-Bereichs
Der Premium-Bereich umfasst mehrere miteinander verknüpfte Funktionen, die gemeinsam ein geschlossenes System bilden.
**Ingenieur-Antrags-Workflow**
Das Kernfeature ist der Ingenieur-Antrags-Workflow. Mitglieder können über eine dedizierte Seite einen Antrag mit Titel, Kurzbeschreibung und PDF-Dokument einreichen. Die zentrale Datenstruktur dafür ist die Klasse `EngineerApplication`, die in der Tabelle `SZUAbsolventenvereinEngineerApplications` gespeichert wird:
```C#
[Table("SZUAbsolventenvereinEngineerApplications")]
public class EngineerApplication : ModelBase
{
[Key] public int ApplicationId { get; set; }
public int UserId { get; set; }
public int ModuleId { get; set; }
public int FileId { get; set; }
[StringLength(256)] public string Title { get; set; }
public string ShortDescription { get; set; }
[StringLength(50)] public string Status { get; set; }
public DateTime? SubmittedOn { get; set; }
public DateTime? ApprovedOn { get; set; }
}
```
Die Klasse erbt von `ModelBase`, wodurch automatisch die Audit-Felder `CreatedBy`, `CreatedOn`, `ModifiedBy` und `ModifiedOn` zur Verfügung stehen. Das Feld `Status` bildet den aktuellen Workflow-Schritt ab und kann die Werte „Draft", „Submitted", „Approved" oder „Rejected" annehmen. Die hochgeladene PDF-Datei wird nicht direkt gespeichert, sondern über eine `FileId` im Oqtane-Dateisystem referenziert.
Der Lebenszyklus eines Antrags durchläuft mehrere Phasen. Der Benutzer beginnt auf der Antragsseite `Apply.razor`, wo ein Formular mit Feldern für Titel, Kurzbeschreibung und einer Dateiauswahl über den integrierten Oqtane FileManager bereitgestellt wird. Der FileManager stellt eine benutzerfreundliche Upload-Oberfläche mit Fortschrittsanzeige bereit und akzeptiert ausschließlich PDF-Dateien. Die hochgeladene Datei wird dabei im Oqtane-Dateisystem abgelegt und das Modul speichert lediglich die resultierende Datei-ID in der Antragstabelle.
Beim Absenden des Formulars erstellt die clientseitige Methode `SubmitApplication` ein neues `EngineerApplication`-Objekt und befüllt es mit den Formulardaten. Der Status wird dabei automatisch auf „Published" gesetzt, zusammen mit den Zeitstempeln für Einreichung und Genehmigung. Die Methode unterscheidet anhand der `ApplicationId`, ob ein neuer Antrag über den Service `AddApplicationAsync` erstellt oder ein bestehender über `UpdateApplicationAsync` aktualisiert werden soll. Falls keine Datei ausgewählt wurde, wird der Vorgang mit einer entsprechenden Fehlermeldung abgebrochen. Die Kommunikation mit dem Server erfolgt über den injizierten `ApplicationService`, der als HTTP-Client die Anfragen an den REST-Controller weiterleitet.
Serverseitig nimmt die Methode `AddApplicationAsync` im `ServerEngineerApplicationService` den Antrag entgegen. Dort wird zunächst geprüft, ob der Benutzer authentifiziert ist und die View-Berechtigung für das Modul besitzt. Die User-ID wird aus dem HTTP-Kontext extrahiert und dem Antrag zugewiesen, um sicherzustellen, dass kein Benutzer Anträge im Namen anderer erstellen kann. Anschließend wird der Antrag über das Repository in der Datenbank persistiert.
Ein Administrator kann den Antrag entweder genehmigen oder ablehnen. Bei einer Genehmigung wird der Status auf „Approved" gesetzt und automatisch über den `PremiumService` eine 12-monatige Premium-Mitgliedschaft vergeben. Bei einer Ablehnung wechselt der Status auf „Rejected" und der Benutzer hat die Möglichkeit, einen überarbeiteten Antrag erneut einzureichen.
**Anzeige genehmigter Anträge**
Die Antrags-Listenansicht bildet das zweite zentrale Feature. Premium-Mitglieder sehen alle genehmigten und veröffentlichten Anträge in einer übersichtlichen Kartenansicht. Jede Karte enthält den Titel, den Namen des Autors, die Kurzbeschreibung und das Veröffentlichungsdatum. Über integrierte Schaltflächen können die zugehörigen PDF-Dokumente direkt im Browser betrachtet oder heruntergeladen werden. Der PDF-Viewer wird als modales Fenster mit eingebettetem iFrame realisiert.
Die serverseitige Methode `GetApplicationsAsync` steuert dabei die rollenbasierte Zugriffslogik und entscheidet, welche Anträge ein Benutzer sehen darf:
```C#
public Task<List<EngineerApplication>> GetApplicationsAsync(int ModuleId)
{
var user = _accessor.HttpContext.User;
if (_userPermissions.IsAuthorized(user, _alias.SiteId, EntityNames.Module, ModuleId, PermissionNames.Edit))
{
return Task.FromResult(_repository.GetEngineerApplications(ModuleId).ToList());
}
var userId = _accessor.HttpContext.GetUserId();
var results = new List<EngineerApplication>();
if (userId != -1)
{
var ownApps = _repository.GetEngineerApplications(ModuleId)
.Where(a => a.UserId == userId).ToList();
results.AddRange(ownApps);
}
if (IsUserPremium(user))
{
var approved = _repository.GetEngineerApplications(ModuleId, "Approved");
var published = _repository.GetEngineerApplications(ModuleId, "Published");
results.AddRange(approved.Union(published));
results = results.GroupBy(a => a.ApplicationId).Select(g => g.First()).ToList();
}
return Task.FromResult(results);
}
```
Administratoren erhalten alle Anträge zurück. Für andere Benutzer werden zunächst die eigenen Anträge geladen. Wenn der Benutzer Premium-Status hat, werden zusätzlich alle genehmigten und veröffentlichten Anträge anderer Benutzer ergänzt. Durch `GroupBy` werden Duplikate entfernt, die entstehen können, wenn ein eigener Antrag gleichzeitig den Status „Approved" trägt.
**Mitgliedersuche und Kontaktfunktion**
Die Mitgliedersuche ermöglicht Premium-Mitgliedern das gezielte Auffinden anderer registrierter Benutzer. Die clientseitige Blazor-Komponente `UserSearch.razor` stellt ein Eingabefeld bereit, über das der Benutzer seinen Suchbegriff eingibt. Bei jeder Suche wird der eingegebene Text an den `ServerUserContactService` auf dem Server übermittelt, der die eigentliche Suchlogik implementiert.
Die serverseitige Methode `SearchUsersAsync` prüft zunächst, ob der Suchbegriff mindestens drei Zeichen umfasst, um übermäßig breite Abfragen zu vermeiden, und ob der anfragende Benutzer authentifiziert ist. Anschließend durchsucht sie die Benutzerdatenbank sowohl nach Anzeigenamen als auch nach Benutzernamen, wobei die Suche groß-/kleinschreibungsunabhängig erfolgt. Die Ergebnisse werden auf maximal 20 Treffer begrenzt.
Besonders wichtig ist die Datenschutzfilterung: Anstatt die vollständigen `User`-Objekte aus der Datenbank zurückzugeben, erstellt die Methode neue, reduzierte Objekte, die nur die Felder `UserId`, `Username`, `DisplayName` und `PhotoFileId` enthalten. E-Mail-Adressen, Passwort-Hashes und andere sensible Daten werden dadurch serverseitig herausgefiltert, bevor die Ergebnisse an den Client gesendet werden. Dieser Ansatz folgt dem Prinzip der Datenminimierung — es werden nur die Informationen übertragen, die für die Anzeige der Suchergebnisse tatsächlich benötigt werden.
Die Kontaktfunktion ermöglicht es Premium-Mitgliedern, aus den Suchergebnissen heraus direkt eine Nachricht an den gefundenen Benutzer zu senden. Der Nachrichtenversand erfolgt über das Oqtane-Benachrichtigungssystem. Dabei werden pro Nachricht zwei separate Benachrichtigungen erstellt: Die erste Benachrichtigung hat ein leeres `ToEmail`-Feld und wird daher ausschließlich als In-App-Nachricht zugestellt, die der Empfänger beim nächsten Login in seinem Benachrichtigungsbereich sieht. Die zweite Benachrichtigung enthält die E-Mail-Adresse des Empfängers und löst zusätzlich eine E-Mail-Zustellung aus. Durch diesen dualen Mechanismus wird sichergestellt, dass der Empfänger sowohl innerhalb als auch außerhalb der Plattform erreicht wird, ohne dass der Absender die E-Mail-Adresse des Empfängers jemals zu sehen bekommt.
Ergänzend steht eine Meldefunktion zur Verfügung, über die Premium-Mitglieder Anträge mit unangemessenen oder fehlerhaften Inhalten melden können. Diese Community-Moderationsfunktion unterstützt die Administratoren bei der Qualitätssicherung der veröffentlichten Inhalte.
**Datenbank und Persistenz**
Alle Entitäten werden über einen Entity-Framework-Core-Datenbankkontext verwaltet, der die Multi-Tenant-Datenbankverbindung automatisch handhabt:
```C#
public class PremiumAreaContext : DBContextBase, ITransientService, IMultiDatabase
{
public virtual DbSet<Models.PremiumArea> PremiumArea { get; set; }
public virtual DbSet<Models.EngineerApplication> EngineerApplication { get; set; }
public virtual DbSet<Models.UserPremium> UserPremium { get; set; }
public virtual DbSet<Models.PremiumEvent> PremiumEvent { get; set; }
public PremiumAreaContext(IDBContextDependencies DBContextDependencies) : base(DBContextDependencies)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<Models.PremiumArea>().ToTable(ActiveDatabase.RewriteName("SZUAbsolventenvereinPremiumArea"));
builder.Entity<Models.EngineerApplication>().ToTable(ActiveDatabase.RewriteName("SZUAbsolventenvereinEngineerApplications"));
builder.Entity<Models.UserPremium>().ToTable(ActiveDatabase.RewriteName("SZUAbsolventenvereinUserPremium"));
builder.Entity<Models.PremiumEvent>().ToTable(ActiveDatabase.RewriteName("SZUAbsolventenvereinPremiumEvents"));
}
}
```
Die Tabellennamen werden über `ActiveDatabase.RewriteName()` datenbankunabhängig gehalten, sodass das Modul mit verschiedenen Datenbanksystemen betrieben werden kann. Neben der Antragstabelle speichert das Modul den Premium-Status der Benutzer in der Tabelle `UserPremium` mit einem Ablaufdatum und einer Quellenangabe. Ergänzend protokolliert die Tabelle `PremiumEvent` jede Änderung am Premium-Status als Audit-Trail, wodurch die vollständige Historie aller Premium-Vergaben nachvollziehbar bleibt.
Die Datenbankstruktur wird über Oqtane's Migrationssystem aufgebaut. Die folgende Migration zeigt exemplarisch die Erstellung der drei Kerntabellen:
```C#
[DbContext(typeof(PremiumAreaContext))]
[Migration("SZUAbsolventenverein.Module.PremiumArea.01.00.00.01")]
public class AddPremiumTables : MultiDatabaseMigration
{
public AddPremiumTables(IDatabase database) : base(database) { }
protected override void Up(MigrationBuilder migrationBuilder)
{
var engAppBuilder = new EngineerApplicationEntityBuilder(migrationBuilder, ActiveDatabase);
engAppBuilder.Create();
var userPremBuilder = new UserPremiumEntityBuilder(migrationBuilder, ActiveDatabase);
userPremBuilder.Create();
var premEventBuilder = new PremiumEventEntityBuilder(migrationBuilder, ActiveDatabase);
premEventBuilder.Create();
}
protected override void Down(MigrationBuilder migrationBuilder)
{
var engAppBuilder = new EngineerApplicationEntityBuilder(migrationBuilder, ActiveDatabase);
engAppBuilder.Drop();
var userPremBuilder = new UserPremiumEntityBuilder(migrationBuilder, ActiveDatabase);
userPremBuilder.Drop();
var premEventBuilder = new PremiumEventEntityBuilder(migrationBuilder, ActiveDatabase);
premEventBuilder.Drop();
}
}
```
Insgesamt definieren vier Migrationen die Datenbankstruktur: Die erste erstellt die Basistabelle des Moduls, die zweite fügt die drei Tabellen für Ingenieur-Anträge, Premium-Status und Premium-Events hinzu, die dritte entfernt nicht mehr benötigte Spalten nach der Umstellung auf den Oqtane FileManager, und die vierte ergänzt die Felder für Titel und Kurzbeschreibung. Alle Migrationen werden bei der Modulinstallation automatisch ausgeführt.
## 7.3 Zugriffsbeschränkung und Benutzerrechte ## 7.3 Zugriffsbeschränkung und Benutzerrechte
Der Zugriff auf den Premium-Bereich wird durch ein mehrstufiges Berechtigungssystem gesteuert, das sowohl auf Server- als auch auf Client-Seite durchgesetzt wird. Die verfügbaren Berechtigungen werden in der `ModuleInfo`-Klasse registriert:
```C#
public class ModuleInfo : IModule
{
public ModuleDefinition ModuleDefinition => new ModuleDefinition
{
Name = "PremiumArea",
Description = "This module adds a premium member system to Octane.",
Version = "1.0.3",
ServerManagerType = "SZUAbsolventenverein.Module.PremiumArea.Manager.PremiumAreaManager, SZUAbsolventenverein.Module.PremiumArea.Server.Oqtane",
ReleaseVersions = "1.0.0,1.0.1,1.0.2,1.0.3",
Dependencies = "SZUAbsolventenverein.Module.PremiumArea.Shared.Oqtane",
PermissionNames = $"{PermissionNames.View},{PermissionNames.Edit},{PermissionNames.Browse}"
};
}
```
Die Eigenschaft `PermissionNames` legt fest, welche Berechtigungen für das Modul verfügbar sind. Die View-Berechtigung erlaubt grundlegende Funktionen wie das Einreichen eigener Anträge. Die Edit-Berechtigung gewährt administrative Funktionen wie das Genehmigen und Ablehnen von Anträgen. Über `ReleaseVersions` wird die Migrationshistorie definiert, sodass Oqtane bei Updates die korrekten Migrationsschritte ausführt.
Grundsätzlich wird zwischen drei Zugriffsebenen unterschieden: Standardbenutzer können ausschließlich eigene Ingenieur-Anträge einreichen und verwalten. Sie haben keinen Einblick in die Anträge anderer Mitglieder und können weder die Mitgliedersuche noch die Kontaktfunktion nutzen. Premium-Mitglieder erhalten Zugang zu allen Funktionen des Premium-Bereichs. Administratoren besitzen uneingeschränkten Zugriff und können sämtliche Anträge unabhängig vom Status einsehen, genehmigen oder ablehnen.
Der Premium-Status kann auf zwei Wegen erlangt werden: durch die Genehmigung eines Ingenieur-Antrags mit automatischer 12-monatiger Mitgliedschaft oder durch manuelle Zuweisung der Oqtane-Rolle „Premium Member" durch einen Administrator. Die serverseitige Methode `IsUserPremium` berücksichtigt beide Wege:
```C#
private bool IsUserPremium(System.Security.Claims.ClaimsPrincipal user)
{
if (!user.Identity.IsAuthenticated)
return false;
if (user.IsInRole("Premium Member"))
return true;
int userId = -1;
var claim = user.Claims.FirstOrDefault(item =>
item.Type == System.Security.Claims.ClaimTypes.NameIdentifier);
if (claim != null)
int.TryParse(claim.Value, out userId);
if (userId != -1)
return _premiumService.IsPremium(userId);
return false;
}
```
Zuerst wird die Oqtane-Rollenzugehörigkeit geprüft, anschließend der datenbankbasierte Premium-Status mit Ablaufdatum. Das kumulative System sorgt dafür, dass bei mehrfacher Vergabe die Laufzeiten addiert und nicht überschrieben werden — ein Mitglied, das während einer laufenden Premium-Mitgliedschaft einen weiteren Antrag genehmigt bekommt, erhält die zusätzlichen 12 Monate auf das bestehende Ablaufdatum aufgeschlagen.
Die Zugriffsbeschränkung wird konsequent auf beiden Seiten durchgesetzt: Clientseitig entscheidet die Blazor-Komponente anhand der Benutzerrolle, welche UI-Elemente angezeigt werden. Serverseitig prüft jeder Service-Aufruf die Berechtigung des anfragenden Benutzers über das `[Authorize]`-Attribut mit Policies wie `PolicyNames.ViewModule` und `PolicyNames.EditModule`, bevor Daten zurückgegeben oder Änderungen vorgenommen werden. Dadurch wird sichergestellt, dass selbst bei einer Manipulation der Client-Anfrage keine unberechtigten Zugriffe möglich sind.
## 7.4 Mehrwert für registrierte Mitglieder ## 7.4 Mehrwert für registrierte Mitglieder
Der Premium-Bereich schafft einen konkreten Mehrwert für registrierte Mitglieder auf mehreren Ebenen. Auf fachlicher Ebene entsteht durch die gesammelten Ingenieur-Anträge eine wachsende Wissensbasis, die allen Premium-Mitgliedern zugänglich ist. Absolventen können von den Arbeiten anderer Mitglieder lernen, sich inspirieren lassen und fachliche Ansätze vergleichen. Durch die Möglichkeit, Titel und Kurzbeschreibungen zu hinterlegen, können Mitglieder gezielt nach relevanten Themen suchen, ohne jedes PDF-Dokument einzeln öffnen zu müssen.
Auf sozialer Ebene fördert der Premium-Bereich die Vernetzung innerhalb der Absolventengemeinschaft. Die Mitgliedersuche mit integrierter Kontaktfunktion ermöglicht es, gezielt nach ehemaligen Kommilitonen oder Fachkollegen zu suchen und direkt Kontakt aufzunehmen. Der duale Benachrichtigungsmechanismus — bestehend aus In-App-Nachricht und E-Mail — stellt sicher, dass Kontaktanfragen zuverlässig zugestellt werden und kein Mitglied eine Nachricht verpasst.
Auf motivationaler Ebene bietet das zeitlich begrenzte Premium-System einen Anreiz zur aktiven Teilnahme. Die Aussicht auf exklusive Funktionen motiviert Mitglieder, eigene Ingenieur-Anträge einzureichen und damit sowohl den eigenen Premium-Status zu erlangen als auch zur Wissensbasis der Gemeinschaft beizutragen. Die Meldefunktion gibt Mitgliedern zusätzlich die Möglichkeit, aktiv zur Qualitätssicherung beizutragen und unangemessene Inhalte zu kennzeichnen.
Der Datenschutz wird dabei konsequent gewahrt. Die Mitgliedersuche gibt nur ausgewählte, nicht-sensible Informationen wie Anzeigenamen und Benutzernamen zurück. E-Mail-Adressen und andere persönliche Daten werden serverseitig herausgefiltert und sind für andere Mitglieder nicht einsehbar. Die Kontaktaufnahme erfolgt ausschließlich über das plattformeigene Benachrichtigungssystem, sodass kein Mitglied seine persönlichen Kontaktdaten preisgeben muss.
# 8. Technologien # 8. Technologien
## 8.1 ASP.NET und .NET ## 8.1 ASP.NET und .NET
Für die Entwicklung der Webanwendung wurde das Framework ASP.NET in Kombination mit der Plattform .NET verwendet. .NET ist eine von Microsoft entwickelte Entwicklungsplattform zur Erstellung moderner Anwendungen für Web, Desktop, Cloud und mobile Systeme. ## 8.2 Postgres Datenbank
## 8.3 LinkedIn OAuth 2.0
ASP.NET stellt innerhalb der .NET-Plattform ein Framework dar, das speziell für die Entwicklung von Webanwendungen und Webservices konzipiert wurde. Es bietet eine Vielzahl an Funktionen zur Verarbeitung von HTTP-Anfragen, zur Verwaltung von Benutzersitzungen sowie zur Integration von Datenbanken und externen Diensten. # 10. Learnigs
## 10.1 Technische und fachliche Erkenntnisse
## 10.2 Agile Projektarbeit und Teamarbeit(Zeitmanagment)
## 10.3 Persönliche Weiterentwicklung
Die Anwendung basiert auf .NET 8, einer aktuellen Version der Plattform, welche insbesondere Verbesserungen in den Bereichen Performance, Sicherheit und Skalierbarkeit bietet. Durch die Nutzung dieser Plattform ist es möglich, stabile und performante Webanwendungen zu entwickeln, die auch bei steigender Benutzeranzahl zuverlässig funktionieren. # 11. Fazit und Ausblick
Ein wesentliches Konzept von ASP.NET ist die serverseitige Verarbeitung von Webanfragen. Wenn ein Benutzer eine Seite im Browser aufruft, wird zunächst eine Anfrage an den Webserver gesendet. Der Server verarbeitet diese Anfrage innerhalb der ASP.NET-Anwendung und sendet anschließend eine generierte Antwort zurück an den Browser. ## 11.1 Zusammenfassung der Arbeit
## 11.2 Mögliche Erweiterungen der Website
## 11.3 Zukunftspotenzial für den Absolventenverein
Durch diese Architektur wird sichergestellt, dass die eigentliche Logik der Anwendung auf dem Server ausgeführt wird, während der Browser lediglich für die Darstellung der Benutzeroberfläche zuständig ist. # 12. Quellenverzeichnis
Ein weiterer Vorteil von ASP.NET besteht in der klar strukturierten Architektur moderner Webanwendungen. Typischerweise wird eine Anwendung in mehrere Schichten unterteilt, beispielsweise:
• Präsentationsschicht (Benutzeroberfläche)
• Geschäftslogik
• Datenzugriffsschicht
Diese Struktur erleichtert die Wartung und Erweiterung der Anwendung erheblich, da Änderungen gezielt innerhalb einzelner Komponenten vorgenommen werden können.
## 8.2 PostgreSQL-Datenbank
Zur Speicherung der Daten der Plattform wurde das relationale Datenbanksystem PostgreSQL eingesetzt. PostgreSQL gehört zu den leistungsfähigsten Open-Source-Datenbanken und wird weltweit in vielen professionellen Anwendungen verwendet.
Eine relationale Datenbank speichert Informationen in Tabellen, die aus Zeilen und Spalten bestehen. Jede Tabelle repräsentiert eine bestimmte Art von Daten, beispielsweise Benutzer, Veranstaltungen oder Systeminformationen. Beziehungen zwischen Tabellen werden durch sogenannte Schlüssel definiert.
Durch diese Struktur kann beispielsweise gespeichert werden:
• welcher Benutzer existiert
• welche Veranstaltungen geplant sind
• welcher Benutzer sich für welches Event angemeldet hat
PostgreSQL bietet darüber hinaus zahlreiche Funktionen, die für moderne Webanwendungen wichtig sind. Dazu gehören unter anderem:
• hohe Stabilität und Zuverlässigkeit
• Unterstützung komplexer Datenabfragen mittels SQL
• Transaktionssicherheit zur Vermeidung von Datenverlust
• Erweiterbarkeit durch zusätzliche Module
Ein weiterer wichtiger Vorteil besteht darin, dass PostgreSQL sehr gut mit modernen Webframeworks wie ASP.NET zusammenarbeitet. Dadurch kann die Anwendung effizient auf gespeicherte Daten zugreifen und diese verarbeiten.
Da die Plattform personenbezogene Daten von Benutzern speichert, wurde zusätzlich ein Backup-System implementiert, das regelmäßige Sicherungen der Datenbank erstellt. Dadurch können Daten im Falle eines Fehlers oder eines Systemausfalls wiederhergestellt werden.
# 9. Learnings
## 9.1 Technische und fachliche Erkenntnisse
Während der Umsetzung meiner Diplomarbeit konnte ich umfangreiche technische Erfahrungen in der Entwicklung moderner Webanwendungen sammeln. Ein zentraler Bestandteil der Arbeit war die Implementierung einer Alumni-Plattform, die ehemaligen Studierenden eine Möglichkeit bietet, sich zu vernetzen, Profile zu verwalten und sich für Veranstaltungen anzumelden.
Ein wesentlicher Lernaspekt war die praktische Anwendung des Webframeworks ASP.NET auf Basis der Plattform .NET 8. Dabei konnte ich ein tieferes Verständnis für die Architektur moderner Webanwendungen entwickeln. Besonders wichtig war das Zusammenspiel zwischen Backend-Logik, Datenbankzugriff und Benutzeroberfläche. Durch die Entwicklung verschiedener Funktionen, wie beispielsweise Eventverwaltung, Benutzerprofile und Premiumbereiche, wurde deutlich, wie wichtig eine klare Strukturierung der Anwendung ist.
Ein weiterer technischer Schwerpunkt war die Arbeit mit der relationalen Datenbank PostgreSQL. Hier lernte ich, Datenmodelle zu entwerfen, Tabellenbeziehungen zu definieren und effiziente Datenbankabfragen zu erstellen. Da die Plattform personenbezogene Daten verwaltet, musste auch auf Aspekte wie Datensicherheit und Datenintegrität geachtet werden. In diesem Zusammenhang wurde zusätzlich ein Backup- und Restore-System implementiert, das eine Wiederherstellung der Datenbank im Falle eines Fehlers ermöglicht. Dadurch konnte ich praktische Erfahrungen im Bereich Datensicherung und Systemstabilität sammeln.
Ein weiterer wichtiger Bestandteil der Arbeit war die Integration eines externen Authentifizierungssystems über LinkedIn. Dabei wurde das Autorisierungsprotokoll OAuth 2.0 eingesetzt. Durch diese Implementierung konnte ich ein besseres Verständnis für moderne Authentifizierungsverfahren entwickeln. Besonders interessant war dabei der Ablauf des OAuth-Authentifizierungsprozesses, bei dem Benutzer über einen externen Anbieter authentifiziert werden, ohne dass ihre Zugangsdaten direkt an die eigene Anwendung übermittelt werden.
Zusätzlich wurden Funktionen im Bereich Datenschutz umgesetzt, die den Anforderungen der DSGVO entsprechen. Dazu zählen unter anderem Möglichkeiten zur Verwaltung personenbezogener Daten sowie automatisierte Löschmechanismen. Diese Aspekte haben mir gezeigt, wie wichtig Datenschutz und rechtliche Anforderungen bei der Entwicklung moderner Webanwendungen sind.
Insgesamt konnte ich durch die praktische Umsetzung der Plattform ein deutlich tieferes Verständnis für Webtechnologien, Systemarchitekturen und Backend-Entwicklung gewinnen.
## 9.2 Agile Projektarbeit und Teamarbeit (Zeitmanagement)
Neben den technischen Aspekten konnte ich auch wichtige Erfahrungen im Bereich der agilen Projektarbeit sammeln. Für die Organisation des Projekts wurde das agile Framework Scrum eingesetzt.
Die Arbeit wurde in Sprints von jeweils zwei Wochen unterteilt. Innerhalb eines Sprints wurden konkrete Aufgaben definiert, die bis zum Ende des Zeitraums umgesetzt werden sollten. Diese Struktur ermöglichte eine klare Planung der Arbeitsschritte und half dabei, größere Entwicklungsaufgaben in kleinere, überschaubare Teilaufgaben zu unterteilen.
Ein wichtiger Bestandteil der Scrum-Arbeitsweise war die regelmäßige Reflexion der Arbeit. Nach jedem Sprint konnte überprüft werden, welche Funktionen erfolgreich umgesetzt wurden und welche Aufgaben möglicherweise angepasst werden mussten. Dadurch entstand ein iterativer Entwicklungsprozess, bei dem das System kontinuierlich verbessert wurde.
Auch das Zeitmanagement spielte eine zentrale Rolle. Da die Entwicklung der Plattform mehrere unterschiedliche Komponenten umfasste beispielsweise Datenbankstruktur, Benutzerverwaltung, Authentifizierungssystem und Eventverwaltung war eine gute Planung notwendig. Durch die Aufteilung in Sprints konnte ich meine Arbeitszeit besser strukturieren und Prioritäten setzen.
Darüber hinaus zeigte sich, dass agile Methoden besonders gut für Softwareprojekte geeignet sind, da sie flexible Anpassungen während der Entwicklung ermöglichen. Neue Anforderungen oder Verbesserungen konnten relativ einfach in zukünftige Sprints integriert werden.
Diese Erfahrungen haben mir ein besseres Verständnis für moderne Softwareentwicklungsprozesse vermittelt und gezeigt, wie wichtig strukturierte Planung und kontinuierliche Verbesserung in technischen Projekten sind.
## 9.3 Persönliche Weiterentwicklung
Neben den technischen und organisatorischen Erkenntnissen stellte die Diplomarbeit auch eine wichtige persönliche Weiterentwicklung dar. Die eigenständige Planung und Umsetzung eines komplexen Softwareprojekts erforderte ein hohes Maß an Selbstorganisation und Durchhaltevermögen.
Während der Entwicklung der Alumni-Plattform musste ich regelmäßig neue Technologien und Konzepte erlernen. Dazu gehörten unter anderem Webframeworks, Datenbanksysteme, Authentifizierungsprotokolle sowie Aspekte der IT-Sicherheit und des Datenschutzes. Der Umgang mit diesen Technologien hat meine Fähigkeiten im Bereich der Softwareentwicklung deutlich erweitert.
Darüber hinaus lernte ich, technische Probleme systematisch zu analysieren und eigenständig Lösungen zu entwickeln. Besonders bei der Integration verschiedener Systeme beispielsweise der LinkedIn-Authentifizierung oder der Datenbankfunktionen traten immer wieder Herausforderungen auf, die eine intensive Recherche und Fehlersuche erforderten.
Ein weiterer wichtiger Lernaspekt war die Verbesserung meiner Fähigkeiten im Bereich der Dokumentation. Die Erstellung eines Diplomarbeitsbuchs erfordert eine strukturierte und verständliche Beschreibung technischer Inhalte. Dadurch konnte ich lernen, komplexe technische Zusammenhänge klar und nachvollziehbar darzustellen.
Zusammenfassend hat mir die Diplomarbeit nicht nur tiefere technische Kenntnisse vermittelt, sondern auch meine Fähigkeiten im Bereich Problemlösung, Selbstorganisation und Projektplanung gestärkt. Diese Kompetenzen stellen eine wichtige Grundlage für zukünftige berufliche Tätigkeiten im Bereich der Softwareentwicklung dar.
# 10. Fazit und Ausblick
## 10.1 Zusammenfassung der Arbeit
Ziel dieser Diplomarbeit war die Konzeption und Entwicklung einer webbasierten Alumni-Plattform für den Absolventenverein. Die Plattform soll ehemaligen Studierenden ermöglichen, miteinander in Kontakt zu bleiben, Informationen auszutauschen und an Veranstaltungen des Vereins teilzunehmen. Dadurch wird die Kommunikation zwischen Absolventinnen und Absolventen sowie der Bildungseinrichtung langfristig gestärkt.
Im Rahmen der Arbeit wurde eine moderne Webanwendung entwickelt, die auf dem Framework ASP.NET und der Plattform .NET 8 basiert. Die Speicherung der Daten erfolgt in der relationalen Datenbank PostgreSQL, welche eine strukturierte Verwaltung der Benutzerdaten, Eventinformationen und Systemdaten ermöglicht.
Ein wichtiger Bestandteil der Plattform ist die Benutzerverwaltung. Um den Registrierungs- und Loginprozess zu vereinfachen, wurde eine Authentifizierung über LinkedIn implementiert. Dabei wird das Autorisierungsprotokoll OAuth 2.0 verwendet, wodurch sich Benutzer mit ihrem bestehenden LinkedIn-Konto anmelden können. Dies erhöht die Benutzerfreundlichkeit und reduziert gleichzeitig den Verwaltungsaufwand für eigene Login-Daten.
Neben der Benutzerverwaltung wurden auch weitere Funktionen umgesetzt. Dazu zählen unter anderem die Verwaltung von Veranstaltungen, für die sich Alumni anmelden können, sowie ein Premiumbereich mit erweiterten Funktionen für Mitglieder. Zusätzlich wurden Maßnahmen im Bereich Datenschutz umgesetzt, um den Anforderungen der DSGVO gerecht zu werden. Dazu gehört beispielsweise die Möglichkeit zur Verwaltung und Löschung personenbezogener Daten sowie ein System zur Sicherung der Datenbank mittels Backup- und Restore-Funktionen.
Die Entwicklung der Plattform erfolgte nach agilen Prinzipien mithilfe des Scrum-Frameworks. Die Arbeit wurde in mehrere zweiwöchige Sprints unterteilt, wodurch eine strukturierte und iterative Entwicklung der einzelnen Funktionen möglich war.
Zusammenfassend konnte mit der Diplomarbeit eine funktionale und erweiterbare Plattform entwickelt werden, die eine moderne Grundlage für die digitale Vernetzung von Alumni darstellt.
## 10.2 Mögliche Erweiterungen der Website
Obwohl bereits viele grundlegende Funktionen implementiert wurden, bietet die Plattform weiteres Potenzial für zukünftige Erweiterungen und Verbesserungen.
Eine mögliche Erweiterung wäre beispielsweise die Integration eines internen Nachrichtensystems. Dadurch könnten Alumni direkt über die Plattform miteinander kommunizieren und Kontakte einfacher pflegen. Ebenso wäre die Implementierung eines Forums oder einer Diskussionsplattform denkbar, in der Mitglieder Erfahrungen austauschen oder berufliche Themen diskutieren können.
Auch im Bereich der Eventverwaltung könnten zusätzliche Funktionen integriert werden. Beispielsweise wäre es möglich, automatische Erinnerungen für Veranstaltungen zu versenden oder Teilnehmerlisten übersichtlich darzustellen. Darüber hinaus könnten Eventberichte oder Fotogalerien vergangener Veranstaltungen integriert werden.
Ein weiterer möglicher Ausbau betrifft den Premiumbereich der Plattform. Hier könnten zusätzliche Inhalte oder exklusive Funktionen für Mitglieder bereitgestellt werden, etwa spezielle Networking-Angebote oder Zugriff auf besondere Veranstaltungen.
Auch technische Erweiterungen sind denkbar. Dazu zählen beispielsweise:
eine mobile Optimierung der Plattform
eine eigene mobile App
Integration weiterer Social-Media-Plattformen
erweiterte Such- und Filterfunktionen für Alumni-Profile
Durch diese Erweiterungen könnte die Plattform langfristig noch attraktiver und vielseitiger gestaltet werden.
## 10.3 Zukunftspotenzial für den Absolventenverein
Die entwickelte Alumni-Plattform bietet dem Absolventenverein eine moderne digitale Infrastruktur zur Verwaltung und Vernetzung seiner Mitglieder. Durch die zentrale Plattform können Informationen, Veranstaltungen und Kontakte effizient organisiert werden.
Ein wesentlicher Vorteil besteht darin, dass der Verein seine Mitglieder dauerhaft an die Institution binden kann. Ehemalige Studierende haben die Möglichkeit, weiterhin mit ihrer Ausbildungsstätte und anderen Absolventinnen und Absolventen in Verbindung zu bleiben. Dies stärkt das Netzwerk des Vereins und kann langfristig auch neue Kooperationen oder berufliche Kontakte ermöglichen.
Darüber hinaus kann die Plattform auch zur Organisation von Veranstaltungen genutzt werden. Alumni können sich direkt online für Events anmelden und erhalten Informationen zu kommenden Aktivitäten. Dadurch wird die Planung von Veranstaltungen für den Verein deutlich erleichtert.
Langfristig kann die Plattform zu einem zentralen digitalen Treffpunkt für Absolventinnen und Absolventen werden. Besonders im beruflichen Umfeld kann ein starkes Alumni-Netzwerk einen großen Mehrwert bieten, beispielsweise durch den Austausch von Erfahrungen oder beruflichen Möglichkeiten.
Insgesamt besitzt die entwickelte Plattform ein großes Zukunftspotenzial. Durch kontinuierliche Erweiterungen und die aktive Nutzung durch die Mitglieder kann sie zu einem wichtigen Instrument für die Vernetzung und Weiterentwicklung des Absolventenvereins werden.
# 11. Quellenverzeichnis
[^1]: DSGVO Datenschutz-Grundverordnung: https://eur-lex.europa.eu/eli/reg/2016/679/ [^1]: DSGVO Datenschutz-Grundverordnung: https://eur-lex.europa.eu/eli/reg/2016/679/
@@ -823,6 +391,9 @@ Insgesamt besitzt die entwickelte Plattform ein großes Zukunftspotenzial. Durch
[^3]: DSB Österreichische Datenschutzbehörde: https://dsb.gv.at/ [^3]: DSB Österreichische Datenschutzbehörde: https://dsb.gv.at/
[^4]: Datensicherung und Datenverlust: https://www.bsi.bund.de/DE/Themen/Verbraucherinnen-und-Verbraucher/Informationen-und-Empfehlungen/Cyber-Sicherheitsempfehlungen/Daten-sichern-verschluesseln-und-loeschen/Datensicherung-und-Datenverlust/Datensicherung-wie-geht-das/datensicherung-wie-geht-das_node.html [^4]:Datensicherung und Datenverlust: https://www.bsi.bund.de/DE/Themen/Verbraucherinnen-und-Verbraucher/Informationen-und-Empfehlungen/Cyber-Sicherheitsempfehlungen/Daten-sichern-verschluesseln-und-loeschen/Datensicherung-und-Datenverlust/Datensicherung-wie-geht-das/datensicherung-wie-geht-das_node.html
[^5]: ChatGPT Notwendigkeit der Datensicherung: https://chatgpt.com/c/69a06632-e4fc-8384-bd6c-a543d7bbd00d [^5]: ChatGPT Notwendigkeit der Datensicherung: https://chatgpt.com/c/69a06632-e4fc-8384-bd6c-a543d7bbd00d

Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 351 KiB