Merge branch 'main' of https://git.kocoder.xyz/Diplomarbeit-Absolventenverein/pm
Some checks failed
Word Count / count-words (push) Failing after 32s
Some checks failed
Word Count / count-words (push) Failing after 32s
This commit is contained in:
5
00-toc.md
Normal file
5
00-toc.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
\pagestyle{empty}
|
||||||
|
|
||||||
|
# Inhaltsverzeichnis {.unnumbered .unlisted}
|
||||||
|
|
||||||
|
\tableofcontents
|
||||||
@@ -11,20 +11,20 @@
|
|||||||
\end{minipage}
|
\end{minipage}
|
||||||
\rule{\textwidth}{0.4pt}
|
\rule{\textwidth}{0.4pt}
|
||||||
|
|
||||||
\vspace{2cm}
|
\vspace{1cm}
|
||||||
|
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\includegraphics[width=0.6\textwidth]{images/preamble/logo.png} \\
|
\includegraphics[width=0.6\textwidth]{images/preamble/logo.png} \\
|
||||||
\vspace{2cm}
|
\vspace{1.5cm}
|
||||||
|
|
||||||
\textbf{\Huge DIPLOMARBEIT} \\
|
\textbf{\Huge DIPLOMARBEIT} \\
|
||||||
\vspace{1cm}
|
\vspace{1cm}
|
||||||
\textbf{\huge AlumniHub} \\
|
\textbf{\huge AlumniHub} \\
|
||||||
\vspace{0.5cm}
|
\vspace{0.5cm}
|
||||||
\textit{\Large Zentrale Plattform für den Absolventenverein des SZ HTL HAK Ungargasse}
|
\textit{\Large Plattform für den Absolventenverein des SZ HTL HAK Ungargasse}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
\vspace{2cm}
|
\vspace{1.75cm}
|
||||||
|
|
||||||
\begin{minipage}[t]{0.5\textwidth}
|
\begin{minipage}[t]{0.5\textwidth}
|
||||||
\textbf{Verfasser:} \\
|
\textbf{Verfasser:} \\
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
Prof. Thomas Gürth
|
Prof. Thomas Gürth
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
|
|
||||||
\vspace{1cm}
|
\vspace{0.5cm}
|
||||||
|
|
||||||
\begin{minipage}[t]{0.5\textwidth}
|
\begin{minipage}[t]{0.5\textwidth}
|
||||||
\textbf{Klasse:} \\
|
\textbf{Klasse:} \\
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
2025/26
|
2025/26
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
|
|
||||||
\vspace{1cm}
|
\vspace{0.75cm}
|
||||||
|
|
||||||
\begin{minipage}[t]{0.5\textwidth}
|
\begin{minipage}[t]{0.5\textwidth}
|
||||||
\textbf{Abgabevermerk:} \\
|
\textbf{Abgabevermerk:} \\
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
\hrulefill
|
\hrulefill
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
|
|
||||||
\vspace{0.5cm}
|
\vspace{0.25cm}
|
||||||
|
|
||||||
\textbf{übernommen von:} \\
|
\textbf{übernommen von:} \\
|
||||||
\hrulefill
|
\hrulefill
|
||||||
@@ -68,6 +68,7 @@
|
|||||||
|
|
||||||
\newpage
|
\newpage
|
||||||
\pagenumbering{Roman}
|
\pagenumbering{Roman}
|
||||||
|
\cleardoublepage
|
||||||
\section*{Eidesstattliche Erklärung}
|
\section*{Eidesstattliche Erklärung}
|
||||||
Ich erkläre, dass ich die vorliegende Diplomarbeit selbstständig und ohne fremde Hilfe verfasst, andere als die angegebenen Quellen und Hilfsmittel nicht benutzt, sowie die aus anderen Werken übernommene Inhalte durch Quellenangaben erkenntlich gemacht habe.
|
Ich erkläre, dass ich die vorliegende Diplomarbeit selbstständig und ohne fremde Hilfe verfasst, andere als die angegebenen Quellen und Hilfsmittel nicht benutzt, sowie die aus anderen Werken übernommene Inhalte durch Quellenangaben erkenntlich gemacht habe.
|
||||||
|
|
||||||
@@ -96,9 +97,22 @@ Wien, am 26.03.2026 & & \hrulefill \\
|
|||||||
\section*{Kurzfassung}
|
\section*{Kurzfassung}
|
||||||
Die vorliegende Diplomarbeit „AlumniHub“ befasst sich mit der Entwicklung eines zentralen Portals für den Absolventenverein der HTL Ungargasse. Ziel des Projektes ist es, die Kommunikation zwischen dem Verein und seinen Mitgliedern zu digitalisieren und zu vereinfachen. Die Plattform ermöglicht es Absolventinnen und Absolventen, Profile zu erstellen, sich zu vernetzen und Informationen über Vereinsaktivitäten abzurufen. Ein besonderer Fokus lag auf der Integration eines Premium-Bereichs sowie eines sicheren Anmeldesystems über LinkedIn.
|
Die vorliegende Diplomarbeit „AlumniHub“ befasst sich mit der Entwicklung eines zentralen Portals für den Absolventenverein der HTL Ungargasse. Ziel des Projektes ist es, die Kommunikation zwischen dem Verein und seinen Mitgliedern zu digitalisieren und zu vereinfachen. Die Plattform ermöglicht es Absolventinnen und Absolventen, Profile zu erstellen, sich zu vernetzen und Informationen über Vereinsaktivitäten abzurufen. Ein besonderer Fokus lag auf der Integration eines Premium-Bereichs sowie eines sicheren Anmeldesystems über LinkedIn.
|
||||||
|
|
||||||
|
\cleardoublepage
|
||||||
\section*{Abstract}
|
\section*{Abstract}
|
||||||
The diploma thesis "AlumniHub" focuses on the development of a central portal for the alumni association of the HTL Ungargasse. The project aims to digitize and simplify communication between the association and its members. The platform allows alumni to create profiles, network, and retrieve information about association activities. A major focus was the integration of a premium section and a secure authentication system via LinkedIn.
|
The diploma thesis "AlumniHub" focuses on the development of a central portal for the alumni association of the HTL Ungargasse. The project aims to digitize and simplify communication between the association and its members. The platform allows alumni to create profiles, network, and retrieve information about association activities. A major focus was the integration of a premium section and a secure authentication system via LinkedIn.
|
||||||
|
|
||||||
\newpage
|
\newpage
|
||||||
\pagenumbering{arabic}
|
\pagenumbering{arabic}
|
||||||
|
\
|
||||||
\setcounter{page}{1}
|
\setcounter{page}{1}
|
||||||
|
|
||||||
|
\makeatletter
|
||||||
|
\renewcommand{\tableofcontents}{%
|
||||||
|
\@starttoc{toc}%
|
||||||
|
}
|
||||||
|
\renewcommand{\listoffigures}{%
|
||||||
|
\@starttoc{lof}%
|
||||||
|
}
|
||||||
|
\renewcommand{\listoftables}{%
|
||||||
|
\@starttoc{lot}%
|
||||||
|
}
|
||||||
|
|||||||
179
01-Allgemein.md
179
01-Allgemein.md
@@ -1,12 +1,18 @@
|
|||||||
|
\cleardoublepage
|
||||||
|
\pagestyle{fancy}
|
||||||
|
\pagenumbering{arabic}
|
||||||
|
|
||||||
# Einleitung Allgemeiner Teil
|
# Einleitung Allgemeiner Teil
|
||||||
|
|
||||||
## Diplomarbeitsantrag
|
## Diplomarbeitsantrag
|
||||||
|
|
||||||
### Ausgangslage
|
### Ausgangslage
|
||||||
Der Absolventenverein verwaltet derzeit rund 300 Alumni, deren Daten in einer CSV-Datei gepflegt werden. Die Event-Anmeldungen der letzten Jahre erfolgten über “Perspective Funnels”, dessen Lizenz mittlerweile abgelaufen ist. Für die kommenden Veranstaltungen wird daher ein Ersatz für die Event-Registrierung benötigt. Die aktuellen Abläufe sind dezentral und teilweise manuell, was zu einem erhöhten Verwaltungsaufwand und fehlender Übersicht führt. Eine integrierte Plattform für Mitgliederverwaltung, Kommunikation und Event-Organisation existiert bislang nicht.
|
|
||||||
|
Der Absolventenverein verwaltet derzeit rund 300 Alumni, deren Daten in einer CSV-Datei gepflegt werden. Die Event-Anmeldungen der letzten Jahre erfolgten über “Perspective Funnels”, dessen Lizenz mittlerweile abgelaufen ist. Für die kommenden Veranstaltungen wird daher ein Ersatz für die Event-Registrierung benötigt. Die aktuellen Abläufe sind dezentral und teilweise manuell, was zu einem erhöhten Verwaltungsaufwand und fehlender Übersicht führt. Eine integrierte Plattform für Mitgliederverwaltung, Kommunikation und Event-Organisation existiert bislang nicht.
|
||||||
|
|
||||||
### Zielsetzung
|
### Zielsetzung
|
||||||
Ziel der Diplomarbeit ist es, ein Content-Management-System als Basis für eine innovative, barrierefreie und sichere Website des Absolventenvereins zu nutzen, dabei vorhandene Funktionen des CMS anzupassen und eigene Module wie eine Eventanmeldung, eine Hall of Fame, ein Schwarzes Brett als Kommunikationsplattform sowie einen Premiumbereich zu entwickeln. Die Anwendung soll modular, erweiterbar und leicht wartbar sein und auf einem Schulserver betrieben werden, um eine kontrollierte und geschützte Umgebung für die Verwaltung der Mitglieder- und Veranstaltungsdaten zu gewährleisten.
|
|
||||||
|
Ziel der Diplomarbeit ist es, ein Content-Management-System als Basis für eine innovative, barrierefreie und sichere Website des Absolventenvereins zu nutzen, dabei vorhandene Funktionen des CMS anzupassen und eigene Module wie eine Eventanmeldung, eine Hall of Fame, ein Schwarzes Brett als Kommunikationsplattform sowie einen Premiumbereich zu entwickeln. Die Anwendung soll modular, erweiterbar und leicht wartbar sein und auf einem Schulserver betrieben werden, um eine kontrollierte und geschützte Umgebung für die Verwaltung der Mitglieder- und Veranstaltungsdaten zu gewährleisten.
|
||||||
|
|
||||||
### Tatsächliches Ergebnis
|
### Tatsächliches Ergebnis
|
||||||
|
|
||||||
@@ -19,6 +25,7 @@ Adam Gaiswinkler war für die Dokumentation der Benutzeroberfläche und des Back
|
|||||||
Florian Edlmayer entwickelte ein funktionierendes CMS-Modul für den Premiumbereich der Absolventen. Zusätzlich erstellte er eine vollständige und gesetzeskonforme Datenschutzerklärung. Ein weiterer wichtiger Bestandteil war die erfolgreiche Implementierung einer OAuth-Authentifizierung über LinkedIn.
|
Florian Edlmayer entwickelte ein funktionierendes CMS-Modul für den Premiumbereich der Absolventen. Zusätzlich erstellte er eine vollständige und gesetzeskonforme Datenschutzerklärung. Ein weiterer wichtiger Bestandteil war die erfolgreiche Implementierung einer OAuth-Authentifizierung über LinkedIn.
|
||||||
|
|
||||||
## Das Team
|
## Das Team
|
||||||
|
|
||||||
Konstantin Hintermayer
|
Konstantin Hintermayer
|
||||||
|
|
||||||
Geboren am: 25.05.2007
|
Geboren am: 25.05.2007
|
||||||
@@ -33,18 +40,19 @@ Geboren am: 20.08.2006
|
|||||||
|
|
||||||
E-Mail: [florian.edlmayer@edu.szu.at]
|
E-Mail: [florian.edlmayer@edu.szu.at]
|
||||||
|
|
||||||
Individuelle Themenstellung: Entwicklung eines CMS-Moduls für den Premiumbereich des Absolventenvereins,Verfassung der Datenschutzerklärung und zuständig für Informationssicherheit, Implementierung von OAuth, Datenbankmanagement.
|
Individuelle Themenstellung: Entwicklung eines CMS-Moduls für den Premiumbereich des Absolventenvereins,Verfassung der Datenschutzerklärung und zuständig für Informationssicherheit, Implementierung von OAuth, Datenbankmanagement.
|
||||||
|
|
||||||
Adam Gaiswinkler
|
Adam Gaiswinkler
|
||||||
|
|
||||||
Geboren am:
|
Geboren am:
|
||||||
|
|
||||||
E-Mail: [adam.gaiswinkler@edu.szu.at]
|
E-Mail: [adam.gaiswinkler@edu.szu.at]
|
||||||
|
|
||||||
Individuelle Themenstellung:Entwicklung zweier CMS-Module: (Anmeldetool für Treffen und Hall of Fame), Grundkonfiguration des CMS, Starker Fokus auf nutzerfreundliches und responsives Design, Web-Entwicklung mit C# und ASP.NET.
|
Individuelle Themenstellung:Entwicklung zweier CMS-Module: (Anmeldetool für Treffen und Hall of Fame), Grundkonfiguration des CMS, Starker Fokus auf nutzerfreundliches und responsives Design, Web-Entwicklung mit C# und ASP.NET.
|
||||||
|
|
||||||
## Fachliches Umfeld(Technologien)
|
## Fachliches Umfeld(Technologien)
|
||||||
Im fachlichen Umfeld dieser Diplomarbeit kommt das Content-Management-System Oqtane zum Einsatz. Oqtane basiert auf modernen Webtechnologien wie ASP.NET Core und der Plattform .NET und ermöglicht die Entwicklung modularer und skalierbarer Webanwendungen. Durch seine komponentenbasierte Architektur können Funktionen in Form von Modulen flexibel entwickelt und in die Anwendung integriert werden. Dies erleichtert sowohl die Erweiterbarkeit als auch die Wartung der Plattform. Besonders im Kontext dieser Arbeit bietet Oqtane eine geeignete Grundlage, um eine dynamische und benutzerorientierte Alumni-Plattform umzusetzen, da sowohl Inhalte als auch Benutzerverwaltung effizient verwaltet werden können.
|
|
||||||
|
Im fachlichen Umfeld dieser Diplomarbeit kommt das Content-Management-System Oqtane zum Einsatz. Oqtane basiert auf modernen Webtechnologien wie ASP.NET Core und der Plattform .NET und ermöglicht die Entwicklung modularer und skalierbarer Webanwendungen. Durch seine komponentenbasierte Architektur können Funktionen in Form von Modulen flexibel entwickelt und in die Anwendung integriert werden. Dies erleichtert sowohl die Erweiterbarkeit als auch die Wartung der Plattform. Besonders im Kontext dieser Arbeit bietet Oqtane eine geeignete Grundlage, um eine dynamische und benutzerorientierte Alumni-Plattform umzusetzen, da sowohl Inhalte als auch Benutzerverwaltung effizient verwaltet werden können.
|
||||||
|
|
||||||
Siehe Details unter: Konstantin Hintermayer individueller Teil
|
Siehe Details unter: Konstantin Hintermayer individueller Teil
|
||||||
|
|
||||||
@@ -55,39 +63,39 @@ Siehe Details unter: Konstantin Hintermayer individueller Teil
|
|||||||
### Hauptziele
|
### Hauptziele
|
||||||
|
|
||||||
- **HZ01 – Verwaltung von Absolventenprofilen**
|
- **HZ01 – Verwaltung von Absolventenprofilen**
|
||||||
Das System ermöglicht die zentrale Erstellung und Pflege individueller Profile für Absolventen.
|
Das System ermöglicht die zentrale Erstellung und Pflege individueller Profile für Absolventen.
|
||||||
|
|
||||||
- **HZ02 – Organisation von Veranstaltungen**
|
- **HZ02 – Organisation von Veranstaltungen**
|
||||||
Die Applikation stellt Funktionen zur Planung und Durchführung von Vereinstreffen und Events bereit.
|
Die Applikation stellt Funktionen zur Planung und Durchführung von Vereinstreffen und Events bereit.
|
||||||
|
|
||||||
- **HZ03 – Darstellung der Hall of Fame**
|
- **HZ03 – Darstellung der Hall of Fame**
|
||||||
Besondere Leistungen und Erfolge von Absolventen werden in einer digitalen Ehrengalerie präsentiert.
|
Besondere Leistungen und Erfolge von Absolventen werden in einer digitalen Ehrengalerie präsentiert.
|
||||||
|
|
||||||
- **HZ04 – Firmen- und Jobstellenmarkt**
|
- **HZ04 – Firmen- und Jobstellenmarkt**
|
||||||
Integration einer Plattform für Stellenangebote, Praktika und die Vernetzung mit Partnerunternehmen.
|
Integration einer Plattform für Stellenangebote, Praktika und die Vernetzung mit Partnerunternehmen.
|
||||||
|
|
||||||
- **HZ05 – Zugriffsverwaltung und Sicherheit**
|
- **HZ05 – Zugriffsverwaltung und Sicherheit**
|
||||||
Implementierung einer rollenbasierten Zugriffskontrolle und Gewährleistung der Datensicherheit nach DSGVO-Standard.
|
Implementierung einer rollenbasierten Zugriffskontrolle und Gewährleistung der Datensicherheit nach DSGVO-Standard.
|
||||||
|
|
||||||
- **HZ06 – Schülerzugang und CMS**
|
- **HZ06 – Schülerzugang und CMS**
|
||||||
Einbindung eines Redaktionssystems für Beiträge und eines speziellen Zugangs für aktuelle Schüler.
|
Einbindung eines Redaktionssystems für Beiträge und eines speziellen Zugangs für aktuelle Schüler.
|
||||||
|
|
||||||
### Hardwareanforderungen und Infrastruktur
|
### Hardwareanforderungen und Infrastruktur
|
||||||
|
|
||||||
- **HW01 – Benutzerkapazität (300 Nutzer)**
|
- **HW01 – Benutzerkapazität (300 Nutzer)**
|
||||||
Das System unterstützt mindestens 300 gleichzeitig registrierte Benutzer für Administration und Nutzung.
|
Das System unterstützt mindestens 300 gleichzeitig registrierte Benutzer für Administration und Nutzung.
|
||||||
|
|
||||||
- **HW02 – Aktive Zugriffsrate (50 Zugriffe/Tag)**
|
- **HW02 – Aktive Zugriffsrate (50 Zugriffe/Tag)**
|
||||||
Die Infrastruktur ist auf ca. 50 tägliche aktive Nutzer ohne Performanceverluste ausgelegt.
|
Die Infrastruktur ist auf ca. 50 tägliche aktive Nutzer ohne Performanceverluste ausgelegt.
|
||||||
|
|
||||||
- **HW03 – Einfache Skalierbarkeit**
|
- **HW03 – Einfache Skalierbarkeit**
|
||||||
Die Architektur erlaubt eine flexible Erweiterung der Ressourcen ohne strukturelle Änderungen.
|
Die Architektur erlaubt eine flexible Erweiterung der Ressourcen ohne strukturelle Änderungen.
|
||||||
|
|
||||||
- **HW04/05 – Hochverfügbarkeit (99,5 %)**
|
- **HW04/05 – Hochverfügbarkeit (99,5 %)**
|
||||||
Der Betrieb erfolgt auf skalierbaren Cloud-Servern mit einer angestrebten Verfügbarkeit von 99,5 % pro Jahr.
|
Der Betrieb erfolgt auf skalierbaren Cloud-Servern mit einer angestrebten Verfügbarkeit von 99,5 % pro Jahr.
|
||||||
|
|
||||||
- **HW07 – Disaster Recovery (24h)**
|
- **HW07 – Disaster Recovery (24h)**
|
||||||
Im Falle eines Totalausfalls muss das System innerhalb von 24 Stunden wieder benutzbar sein.
|
Im Falle eines Totalausfalls muss das System innerhalb von 24 Stunden wieder benutzbar sein.
|
||||||
|
|
||||||
• **HW12/13 – Automatisierte Sicherung**
|
• **HW12/13 – Automatisierte Sicherung**
|
||||||
Implementierung einer automatisierten Datensicherung für Datenbanken und Binaries auf unabhängigen Speichern.
|
Implementierung einer automatisierten Datensicherung für Datenbanken und Binaries auf unabhängigen Speichern.
|
||||||
@@ -98,64 +106,63 @@ Die Datenbank wird zur Ausfallsicherheit redundant geführt und nutzt automatisc
|
|||||||
### Schnittstellenanforderungen
|
### Schnittstellenanforderungen
|
||||||
|
|
||||||
- **SnT-1 – REST-API (Frontend/Backend)**
|
- **SnT-1 – REST-API (Frontend/Backend)**
|
||||||
Bereitstellung einer API zur Kommunikation zwischen dem Oqtane-CMS und dem Blazor-Frontend für dynamische CRUD-Operationen.
|
Bereitstellung einer API zur Kommunikation zwischen dem Oqtane-CMS und dem Blazor-Frontend für dynamische CRUD-Operationen.
|
||||||
|
|
||||||
- **SnT-2 – SMTP-E-Mail-Versand (Brevo)**
|
- **SnT-2 – SMTP-E-Mail-Versand (Brevo)**
|
||||||
Einbindung des Brevo SMTP-Dienstes für den Versand von bis zu 300 transaktionalen E-Mails pro Tag.
|
Einbindung des Brevo SMTP-Dienstes für den Versand von bis zu 300 transaktionalen E-Mails pro Tag.
|
||||||
|
|
||||||
- **SnT-3 – LinkedIn OAuth (Phase 2)**
|
- **SnT-3 – LinkedIn OAuth (Phase 2)**
|
||||||
Schnittstelle zur Authentifizierung und zum automatisierten Abruf von Profildaten über LinkedIn.
|
Schnittstelle zur Authentifizierung und zum automatisierten Abruf von Profildaten über LinkedIn.
|
||||||
|
|
||||||
### Software und Zugriffsverwaltung
|
### Software und Zugriffsverwaltung
|
||||||
|
|
||||||
- **SW-1/2 – Barrierefreiheit und Browser-Support**
|
- **SW-1/2 – Barrierefreiheit und Browser-Support**
|
||||||
Unterstützung gängiger Browser und Einhaltung des WCAG 2.1 AA Standards für Barrierefreiheit.
|
Unterstützung gängiger Browser und Einhaltung des WCAG 2.1 AA Standards für Barrierefreiheit.
|
||||||
|
|
||||||
- **SW-4 – Sicherer Administrationszugriff**
|
- **SW-4 – Sicherer Administrationszugriff**
|
||||||
Administrativer Zugriff erfolgt ausschließlich über eine verschlüsselte VPN-Verbindung (Wireguard) und SSH.
|
Administrativer Zugriff erfolgt ausschließlich über eine verschlüsselte VPN-Verbindung (Wireguard) und SSH.
|
||||||
|
|
||||||
- **ZUG-1–4 – Authentifizierung und Rollen**
|
- **ZUG-1–4 – Authentifizierung und Rollen**
|
||||||
Implementierung klassischer Login-Verfahren, Passwort-Reset-Funktionen und einer detaillierten Benutzerverwaltung für Administratoren.
|
Implementierung klassischer Login-Verfahren, Passwort-Reset-Funktionen und einer detaillierten Benutzerverwaltung für Administratoren.
|
||||||
|
|
||||||
- **ZUG-6/7 – Magic Link und 2FA (Phase 2)**
|
- **ZUG-6/7 – Magic Link und 2FA (Phase 2)**
|
||||||
Erweiterung der Sicherheit durch passwortlose Anmeldung via E-Mail-Link und Zwei-Faktor-Authentifizierung.
|
Erweiterung der Sicherheit durch passwortlose Anmeldung via E-Mail-Link und Zwei-Faktor-Authentifizierung.
|
||||||
|
|
||||||
### Funktionsmodule (Phase 2)
|
### Funktionsmodule (Phase 2)
|
||||||
|
|
||||||
- **HoF-1/2 – Hall of Fame Funktionen**
|
- **HoF-1/2 – Hall of Fame Funktionen**
|
||||||
Nutzer können ihre Erfolge online präsentieren und als ansprechendes PDF für Treffen exportieren.
|
Nutzer können ihre Erfolge online präsentieren und als ansprechendes PDF für Treffen exportieren.
|
||||||
|
|
||||||
- **JOB-1/2 – Job- und Praktikumsbörse**
|
- **JOB-1/2 – Job- und Praktikumsbörse**
|
||||||
Plattform für Stellenanzeigen und Bewerbungen inklusive Dashboard für Arbeitgeber und statistischen Auswertungen.
|
Plattform für Stellenanzeigen und Bewerbungen inklusive Dashboard für Arbeitgeber und statistischen Auswertungen.
|
||||||
|
|
||||||
- **PRE-1–3 – Premiumbereich**
|
- **PRE-1–3 – Premiumbereich**
|
||||||
Exklusiver Zugang für Premiummitglieder inklusive Einsicht in Ingenieuranträge und erweiterter Event-Organisation.
|
Exklusiver Zugang für Premiummitglieder inklusive Einsicht in Ingenieuranträge und erweiterter Event-Organisation.
|
||||||
|
|
||||||
- **ScB-1–4 – Schwarzes Brett**
|
- **ScB-1–4 – Schwarzes Brett**
|
||||||
Ein interaktiver Feed für Nachrichten, Event-Ankündigungen und Werbung mit integriertem Meldesystem für Inhalte.
|
Ein interaktiver Feed für Nachrichten, Event-Ankündigungen und Werbung mit integriertem Meldesystem für Inhalte.
|
||||||
|
|
||||||
- **AfT-1–5 – Anmeldetool für Treffen**
|
- **AfT-1–5 – Anmeldetool für Treffen**
|
||||||
Umfassendes Tool zur Eventerstellung, zum Versand von Einladungen (E-Mail/SMS) und zur Zielgruppenfilterung.
|
Umfassendes Tool zur Eventerstellung, zum Versand von Einladungen (E-Mail/SMS) und zur Zielgruppenfilterung.
|
||||||
|
|
||||||
- **Pro-1–4 – Erweiterte Profilverwaltung**
|
- **Pro-1–4 – Erweiterte Profilverwaltung**
|
||||||
Nutzer können ihre Daten manuell pflegen oder automatisiert mit ihrem LinkedIn-Profil abgleichen lassen.
|
Nutzer können ihre Daten manuell pflegen oder automatisiert mit ihrem LinkedIn-Profil abgleichen lassen.
|
||||||
|
|
||||||
### Daten und Dokumentation
|
### Daten und Dokumentation
|
||||||
|
|
||||||
- **DB-1 – PostgreSQL Datenbank**
|
- **DB-1 – PostgreSQL Datenbank**
|
||||||
Entwicklung eines relationalen Datenbankdesigns inklusive Indizierung und Verschlüsselung zur Gewährleistung der Datenintegrität.
|
Entwicklung eines relationalen Datenbankdesigns inklusive Indizierung und Verschlüsselung zur Gewährleistung der Datenintegrität.
|
||||||
|
|
||||||
- **DOK-1–6 – Projektdokumentation**
|
- **DOK-1–6 – Projektdokumentation**
|
||||||
Erstellung aller notwendigen Handbücher (Benutzer, Admin, Git) und des Disaster-Recovery-Handbuchs.
|
Erstellung aller notwendigen Handbücher (Benutzer, Admin, Git) und des Disaster-Recovery-Handbuchs.
|
||||||
|
|
||||||
### Nicht-Ziele
|
### Nicht-Ziele
|
||||||
|
|
||||||
- **NZ01 – Zahlungsprozesse**
|
- **NZ01 – Zahlungsprozesse**
|
||||||
Die technische Abwicklung von Zahlungen im Premiumbereich liegt außerhalb des Projektscopes.
|
Die technische Abwicklung von Zahlungen im Premiumbereich liegt außerhalb des Projektscopes.
|
||||||
|
|
||||||
- **NZ02 – Externe Kalenderlösungen**
|
- **NZ02 – Externe Kalenderlösungen**
|
||||||
Die Integration externer Dienste wie V-Calendar oder V-Event ist nicht vorgesehen.
|
Die Integration externer Dienste wie V-Calendar oder V-Event ist nicht vorgesehen.
|
||||||
|
|
||||||
|
|
||||||
## Aufgabenverteilung
|
## Aufgabenverteilung
|
||||||
|
|
||||||
@@ -184,35 +191,36 @@ Die Integration externer Dienste wie V-Calendar oder V-Event ist nicht vorgesehe
|
|||||||
|
|
||||||
### Meilensteine
|
### Meilensteine
|
||||||
|
|
||||||
| # | Datum | Beschreibung |
|
| # | Datum | Beschreibung |
|
||||||
| :--- | :----------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| :-- | :----------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| *1* | *19.09.2025* | Fertigstellung und Abgabe des Diplomarbeitsantrags. |
|
| _1_ | _19.09.2025_ | Fertigstellung und Abgabe des Diplomarbeitsantrags. |
|
||||||
| *2* | *30.10.2025* | [cite_start]Server-Setup mit SSH-Zugriff [cite: 83][cite_start], CMS-Grundkonfiguration (Oqtane) im SZU-Design [cite: 69, 83][cite_start], Implementierung der Eingabemaske und API für das Anmeldetool [cite: 137] [cite_start]sowie Erstellung der DSGVO-Richtlinien [cite: 38] [cite_start]und Backupstrategie[cite: 55, 62]. |
|
| _2_ | _30.10.2025_ | [cite_start]Server-Setup mit SSH-Zugriff [cite: 83][cite_start], CMS-Grundkonfiguration (Oqtane) im SZU-Design [cite: 69, 83][cite_start], Implementierung der Eingabemaske und API für das Anmeldetool [cite: 137] [cite_start]sowie Erstellung der DSGVO-Richtlinien [cite: 38] [cite_start]und Backupstrategie[cite: 55, 62]. |
|
||||||
| *3* | *27.11.2025* | [cite_start]Entwicklung grafischer Auswertungen für Anmeldedaten [cite: 120] [cite_start]und Integration der OAuth-Authentifizierung zum automatisierten Abruf von Profildaten[cite: 78, 148]. |
|
| _3_ | _27.11.2025_ | [cite_start]Entwicklung grafischer Auswertungen für Anmeldedaten [cite: 120] [cite_start]und Integration der OAuth-Authentifizierung zum automatisierten Abruf von Profildaten[cite: 78, 148]. |
|
||||||
| *4* | *18.12.2025* | Realisierung des Schwarzen Bretts inkl. [cite_start]Sperrfunktion für Administratoren [cite: 133][cite_start], Entwicklung des Hall of Fame Moduls mit PDF-Generierung [cite: 105] [cite_start]sowie Aufbau der Premiumkunden-Verwaltung[cite: 113]. |
|
| _4_ | _18.12.2025_ | Realisierung des Schwarzen Bretts inkl. [cite_start]Sperrfunktion für Administratoren [cite: 133][cite_start], Entwicklung des Hall of Fame Moduls mit PDF-Generierung [cite: 105] [cite_start]sowie Aufbau der Premiumkunden-Verwaltung[cite: 113]. |
|
||||||
| *5* | *21.01.2026* | [cite_start]Erstellung der technischen Systemdokumentation [cite: 155][cite_start], Durchführung von Modultests und Implementierung der Premium-Serviceverwaltung[cite: 113]. |
|
| _5_ | _21.01.2026_ | [cite_start]Erstellung der technischen Systemdokumentation [cite: 155][cite_start], Durchführung von Modultests und Implementierung der Premium-Serviceverwaltung[cite: 113]. |
|
||||||
| *6* | *08.02.2026* | [cite_start]Projektabschluss der Infrastruktur-Tasks, Übergabe der Disaster-Recovery-Skripte [cite: 58] [cite_start]und Finalisierung der gesamten Projektdokumentation[cite: 155]. |
|
| _6_ | _08.02.2026_ | [cite_start]Projektabschluss der Infrastruktur-Tasks, Übergabe der Disaster-Recovery-Skripte [cite: 58] [cite_start]und Finalisierung der gesamten Projektdokumentation[cite: 155]. |
|
||||||
| *7* | *12.03.2026* | Finale Abgabe des Diplomarbeitsbuchs. |
|
| _7_ | _12.03.2026_ | Finale Abgabe des Diplomarbeitsbuchs. |
|
||||||
| *8* | *22.04.2026* | Defensio (Projektabschluss). |
|
| _8_ | _22.04.2026_ | Defensio (Projektabschluss). |
|
||||||
|
|
||||||
### Sprints
|
### Sprints
|
||||||
|
|
||||||
| # | Beginn | Ende | Hinweis | Meilensteine |
|
| # | Beginn | Ende | Hinweis | Meilensteine |
|
||||||
| :--- | :--------- | :--------- | :--------------- | :------------- |
|
| :-- | :--------- | :--------- | :--------------- | :------------- |
|
||||||
| 1 | 02.10.2025 | 16.10.2025 | | |
|
| 1 | 02.10.2025 | 16.10.2025 | | |
|
||||||
| 2 | 16.10.2025 | 30.10.2025 | | 1. Meilenstein |
|
| 2 | 16.10.2025 | 30.10.2025 | | 1. Meilenstein |
|
||||||
| 3 | 30.10.2025 | 13.11.2025 | Herbstferien | |
|
| 3 | 30.10.2025 | 13.11.2025 | Herbstferien | |
|
||||||
| 4 | 13.11.2025 | 27.11.2025 | | 2. Meilenstein |
|
| 4 | 13.11.2025 | 27.11.2025 | | 2. Meilenstein |
|
||||||
| 5 | 27.11.2025 | 11.12.2025 | | |
|
| 5 | 27.11.2025 | 11.12.2025 | | |
|
||||||
| 6 | 11.12.2025 | 25.12.2025 | Weihnachtsferien | 3. Meilenstein |
|
| 6 | 11.12.2025 | 25.12.2025 | Weihnachtsferien | 3. Meilenstein |
|
||||||
| 7 | 25.12.2025 | 08.01.2026 | Weihnachtsferien | |
|
| 7 | 25.12.2025 | 08.01.2026 | Weihnachtsferien | |
|
||||||
| 8 | 08.01.2026 | 22.01.2026 | | 4. Meilenstein |
|
| 8 | 08.01.2026 | 22.01.2026 | | 4. Meilenstein |
|
||||||
| 9 | 22.01.2026 | 05.02.2026 | Semesterferien | |
|
| 9 | 22.01.2026 | 05.02.2026 | Semesterferien | |
|
||||||
| 10 | 05.02.2026 | 19.02.2026 | | 5. Meilenstein |
|
| 10 | 05.02.2026 | 19.02.2026 | | 5. Meilenstein |
|
||||||
| 11 | 19.02.2026 | 05.03.2026 | | |
|
| 11 | 19.02.2026 | 05.03.2026 | | |
|
||||||
| 12 | 05.03.2026 | 19.03.2026 | | 6. Meilenstein |
|
| 12 | 05.03.2026 | 19.03.2026 | | 6. Meilenstein |
|
||||||
|
|
||||||
## Projektumfeld Analyse
|
## Projektumfeld Analyse
|
||||||
|
|
||||||
### Grafische Darstellung
|
### Grafische Darstellung
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
@@ -261,37 +269,39 @@ Die Integration externer Dienste wie V-Calendar oder V-Event ist nicht vorgesehe
|
|||||||
class N5,N6,N7,L2 blue;
|
class N5,N6,N7,L2 blue;
|
||||||
class N8,L3 red;
|
class N8,L3 red;
|
||||||
class Hub center;
|
class Hub center;
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Beschreibung der wichtigsten Umfelder
|
### Beschreibung der wichtigsten Umfelder
|
||||||
|
|
||||||
### Tabelle 3: Projektumfelder
|
### Tabelle 3: Projektumfelder
|
||||||
|
|
||||||
| # | Bezeichnung | Beschreibung | Bewertung |
|
| # | Bezeichnung | Beschreibung | Bewertung |
|
||||||
| :--- | :--------------------- | :------------------------------- | :-------- |
|
| :-- | :--------------------- | :------------------------------- | :-------- |
|
||||||
| 1 | Konstantin Hintermayer | Projektleiter | + |
|
| 1 | Konstantin Hintermayer | Projektleiter | + |
|
||||||
| 2 | Florian Edlmayer | Projektmitarbeiter | + |
|
| 2 | Florian Edlmayer | Projektmitarbeiter | + |
|
||||||
| 3 | Adam Gaiswinkler | Projektmitarbeiter | + |
|
| 3 | Adam Gaiswinkler | Projektmitarbeiter | + |
|
||||||
| 4 | Ing. Thomas Gürth | Projektbetreuer | + |
|
| 4 | Ing. Thomas Gürth | Projektbetreuer | + |
|
||||||
| 5 | Absolventenverein | Auftraggeber des Alumnihubs | +/- |
|
| 5 | Absolventenverein | Auftraggeber des Alumnihubs | +/- |
|
||||||
| 6 | Schülerinnen/Schüler | Zielgruppe der SZU Ungargasse | +/- |
|
| 6 | Schülerinnen/Schüler | Zielgruppe der SZU Ungargasse | +/- |
|
||||||
| 7 | Lehrerinnen/Lehrer | Lehrpersonal der SZU Ungargasse | +/- |
|
| 7 | Lehrerinnen/Lehrer | Lehrpersonal der SZU Ungargasse | +/- |
|
||||||
| 8 | Konkurrenz | Potenziell vorhandene Konkurrenz | - |
|
| 8 | Konkurrenz | Potenziell vorhandene Konkurrenz | - |
|
||||||
|
|
||||||
## Risikoanalyse
|
## Risikoanalyse
|
||||||
|
|
||||||
### Tabelle 4: Risiken
|
### Tabelle 4: Risiken
|
||||||
|
|
||||||
| # | Bezeichnung | Beschreibung | Wahrscheinlichkeit (%) | Auswirkung (%) | Risikowert |
|
| # | Bezeichnung | Beschreibung | Wahrscheinlichkeit (%) | Auswirkung (%) | Risikowert |
|
||||||
| :--- | :----------------- | :-------------------------------------------------------------------------------------------------------------------------------- | :--------------------: | :------------: | :--------: |
|
| :-- | :----------------- | :-------------------------------------------------------------------------------------------------------------------------------- | :--------------------: | :------------: | :--------: |
|
||||||
| 1 | Infrastruktur | [cite_start]Instabilität oder Fehlkonfiguration der Cloud-Server (Hetzner CX22), die den Live-Betrieb unterbrechen[cite: 45, 51]. | 60 | 90 | 5400 |
|
| 1 | Infrastruktur | [cite_start]Instabilität oder Fehlkonfiguration der Cloud-Server (Hetzner CX22), die den Live-Betrieb unterbrechen[cite: 45, 51]. | 60 | 90 | 5400 |
|
||||||
| 2 | Datenverlust | [cite_start]Kritischer Ausfall der Datenbank ohne erfolgreiche Wiederherstellung durch automatisierte Backups[cite: 51, 62]. | 15 | 95 | 1425 |
|
| 2 | Datenverlust | [cite_start]Kritischer Ausfall der Datenbank ohne erfolgreiche Wiederherstellung durch automatisierte Backups[cite: 51, 62]. | 15 | 95 | 1425 |
|
||||||
| 3 | DSGVO-Verstoß | [cite_start]Fehlende Konformität bei der Speicherung personenbezogener Daten oder beim Opt-In-Verfahren[cite: 38, 39, 128]. | 10 | 100 | 1000 |
|
| 3 | DSGVO-Verstoß | [cite_start]Fehlende Konformität bei der Speicherung personenbezogener Daten oder beim Opt-In-Verfahren[cite: 38, 39, 128]. | 10 | 100 | 1000 |
|
||||||
| 4 | Sicherheitslücke | [cite_start]Unbefugter Zugriff auf das System durch Schwachstellen in der VPN- oder SSH-Verbindung[cite: 83]. | 15 | 85 | 1275 |
|
| 4 | Sicherheitslücke | [cite_start]Unbefugter Zugriff auf das System durch Schwachstellen in der VPN- oder SSH-Verbindung[cite: 83]. | 15 | 85 | 1275 |
|
||||||
| 5 | API-Schnittstellen | [cite_start]Ausfall oder Inkompatibilität externer Dienste wie LinkedIn OAuth oder Brevo Mailservice[cite: 74, 78]. | 30 | 50 | 1500 |
|
| 5 | API-Schnittstellen | [cite_start]Ausfall oder Inkompatibilität externer Dienste wie LinkedIn OAuth oder Brevo Mailservice[cite: 74, 78]. | 30 | 50 | 1500 |
|
||||||
| 6 | Performance | [cite_start]Beeinträchtigung der Systemleistung bei steigenden Zugriffszahlen in Phase 2[cite: 44, 46]. | 40 | 40 | 1600 |
|
| 6 | Performance | [cite_start]Beeinträchtigung der Systemleistung bei steigenden Zugriffszahlen in Phase 2[cite: 44, 46]. | 40 | 40 | 1600 |
|
||||||
| 7 | Wiederherstellung | [cite_start]Überschreitung des geplanten Disaster-Recovery-Zeitraums von 24 Stunden[cite: 51, 66]. | 25 | 70 | 1750 |
|
| 7 | Wiederherstellung | [cite_start]Überschreitung des geplanten Disaster-Recovery-Zeitraums von 24 Stunden[cite: 51, 66]. | 25 | 70 | 1750 |
|
||||||
| 8 | Oqtane-Integration | [cite_start]Komplexität bei der Entwicklung und Einbindung benutzerdefinierter CMS-Module[cite: 69, 72]. | 30 | 45 | 1350 |
|
| 8 | Oqtane-Integration | [cite_start]Komplexität bei der Entwicklung und Einbindung benutzerdefinierter CMS-Module[cite: 69, 72]. | 30 | 45 | 1350 |
|
||||||
| 9 | Dokumentation | [cite_start]Lückenhafte technische Dokumentation erschwert die Wartung durch den Absolventenverein[cite: 155]. | 20 | 30 | 600 |
|
| 9 | Dokumentation | [cite_start]Lückenhafte technische Dokumentation erschwert die Wartung durch den Absolventenverein[cite: 155]. | 20 | 30 | 600 |
|
||||||
|
|
||||||
### Grafische Darstellung
|
### Grafische Darstellung
|
||||||
|
|
||||||
@@ -314,7 +324,9 @@ quadrantChart
|
|||||||
Oqtane_Integration: [0.45, 0.3]
|
Oqtane_Integration: [0.45, 0.3]
|
||||||
Dokumentation: [0.3, 0.2]
|
Dokumentation: [0.3, 0.2]
|
||||||
```
|
```
|
||||||
|
|
||||||
## Projektressourcen
|
## Projektressourcen
|
||||||
|
|
||||||
### Persönliche Ressourcen(geplant)
|
### Persönliche Ressourcen(geplant)
|
||||||
|
|
||||||
| Teammitglied | Personenstunden |
|
| Teammitglied | Personenstunden |
|
||||||
@@ -323,10 +335,9 @@ quadrantChart
|
|||||||
| **Florian Edlmayer** | 180 |
|
| **Florian Edlmayer** | 180 |
|
||||||
| **Adam Gaiswinkler** | 180 |
|
| **Adam Gaiswinkler** | 180 |
|
||||||
| **SUMME** | **540** |
|
| **SUMME** | **540** |
|
||||||
|
|
||||||
### Persönliche Ressourcen(real)
|
### Persönliche Ressourcen(real)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Projektmanagement mit Scrum
|
## Projektmanagement mit Scrum
|
||||||
|
|
||||||
### Grundlagen der Scrum-Methode
|
### Grundlagen der Scrum-Methode
|
||||||
@@ -398,7 +409,6 @@ Darüber hinaus fördert Scrum die Zusammenarbeit innerhalb des Teams. Regelmä
|
|||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
|
|
||||||
# Allgemeines
|
# Allgemeines
|
||||||
|
|
||||||
## Danksagung
|
## Danksagung
|
||||||
@@ -414,4 +424,3 @@ Ein besonders komplexer Aspekt dieser Arbeit war die Infrastruktur, für die im
|
|||||||
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.
|
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.
|
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.
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
\cleardoublepage
|
||||||
|
|
||||||
# Adam Gaiswinkler
|
# Adam Gaiswinkler
|
||||||
|
|
||||||
## Einleitung
|
## Einleitung
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
\cleardoublepage
|
||||||
|
|
||||||
# Florian Edlmayer
|
# Florian Edlmayer
|
||||||
|
|
||||||
## Einleitung des individuellen Teils
|
## Einleitung des individuellen Teils
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
\cleardoublepage
|
||||||
|
|
||||||
# Konstantin Hintermayer
|
# Konstantin Hintermayer
|
||||||
|
|
||||||
## Einleitung des individuellen Teils
|
## Einleitung des individuellen Teils
|
||||||
@@ -111,6 +113,8 @@ Zusätzlich gab es einen Administrationszugang zu den Servern, welcher über SSH
|
|||||||
| Schule | Highport |
|
| Schule | Highport |
|
||||||
| LiveDesign | IPSEC VPN |
|
| LiveDesign | IPSEC VPN |
|
||||||
|
|
||||||
|
Table: SSH Zugänge in den unterschiedlichen Umgebungen
|
||||||
|
|
||||||
Die VPN basierten Zugänge sind tendenziell schwieriger zu finden und auszunutzen, während die Lösung in der Schule mittels Highport den SSH Service öffentlich erreichbar macht. Durch den `Highport` ist der SSH Service schwieriger zu finden. Zur Authentifizierung mit SSH verwenden wir SSH-Keys, da diese durch ihre komplexität sicherer sind, als Passwörter.
|
Die VPN basierten Zugänge sind tendenziell schwieriger zu finden und auszunutzen, während die Lösung in der Schule mittels Highport den SSH Service öffentlich erreichbar macht. Durch den `Highport` ist der SSH Service schwieriger zu finden. Zur Authentifizierung mit SSH verwenden wir SSH-Keys, da diese durch ihre komplexität sicherer sind, als Passwörter.
|
||||||
|
|
||||||
### Entwicklung mit ASP.NET
|
### Entwicklung mit ASP.NET
|
||||||
@@ -198,7 +202,7 @@ architecture-beta
|
|||||||
service b(mdi:package-variant-closed)[Klasse B]
|
service b(mdi:package-variant-closed)[Klasse B]
|
||||||
service ib(mdi:car-clutch)[Interface B]
|
service ib(mdi:car-clutch)[Interface B]
|
||||||
|
|
||||||
a:B --> T:ib
|
a:R --> L:ib
|
||||||
ib:R <-- L:b
|
ib:R <-- L:b
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -322,27 +326,27 @@ Für die Sicherung und Zusammenarbeit wurde im Rahmen dieser Arbeit Remote-Repos
|
|||||||
|
|
||||||
Als schlanke und selbst gehostete Open-Source-Alternative zu Plattformen wie GitHub oder GitLab wurde für die Verwaltung der Repositories Gitea eingesetzt. Hauptgrund für die Benutzung von Gitea war meine bereits aufgesetzte Instanz, welche schon mehrere Jahre in Verwendung war und mit der es im Team auch schon Erfahrungen gab. Gitea bietet neben der reinen Git-Verwaltung essenzielle Werkzeuge für den Software-Lebenszyklus, wie ein integriertes Issue-Tracking, Code-Reviews über Pull-Requests sowie eine Benutzerverwaltung, und unterstützt somit die strukturierte Umsetzung der Diplomarbeit im Team.[@gitea_docs]
|
Als schlanke und selbst gehostete Open-Source-Alternative zu Plattformen wie GitHub oder GitLab wurde für die Verwaltung der Repositories Gitea eingesetzt. Hauptgrund für die Benutzung von Gitea war meine bereits aufgesetzte Instanz, welche schon mehrere Jahre in Verwendung war und mit der es im Team auch schon Erfahrungen gab. Gitea bietet neben der reinen Git-Verwaltung essenzielle Werkzeuge für den Software-Lebenszyklus, wie ein integriertes Issue-Tracking, Code-Reviews über Pull-Requests sowie eine Benutzerverwaltung, und unterstützt somit die strukturierte Umsetzung der Diplomarbeit im Team.[@gitea_docs]
|
||||||
|
|
||||||
#### 4.4.1 Repositories
|
#### Repositories
|
||||||
|
|
||||||
Ein Repository bildet den zentralen Speicherort für einen Projektteil. In Gitea wurden separate Repositories für die einzelnen Module und Themes, das Oqtane Framework, Skripte, die Dokumentation angelegt. Ein zusätzliches Repository bindet alle übrigen Quellcode-Repositories als Submodule ein, das macht die Einrichtung einer neuen Entwicklungsumgebung sehr kompfortabel. Dies ermöglichte eine saubere Trennung der verschiedenen Projektkomponenten. [@gitea_docs]
|
Ein Repository bildet den zentralen Speicherort für einen Projektteil. In Gitea wurden separate Repositories für die einzelnen Module und Themes, das Oqtane Framework, Skripte, die Dokumentation angelegt. Ein zusätzliches Repository bindet alle übrigen Quellcode-Repositories als Submodule ein, das macht die Einrichtung einer neuen Entwicklungsumgebung sehr kompfortabel. Dies ermöglichte eine saubere Trennung der verschiedenen Projektkomponenten. [@gitea_docs]
|
||||||
|
|
||||||
#### 4.4.2 Issues
|
#### Issues
|
||||||
|
|
||||||
Zur Aufgabenplanung und Fehlerverfolgung wurde das integrierte Issue-System genutzt. Jede anstehende Aufgabe oder entdeckte Schwachstelle wurde als „Issue“ erfasst, einem Verantwortlichen zugewiesen und mit Labels (z. B. „Bug“, „Feature“ oder „Dokumentation“) versehen. Dies half dabei, den Überblick über den Projektfortschritt zu behalten und die Anforderungen aus dem Lastenheft strukturiert abzuarbeiten. [@gitea_docs][@gitea_issue_tracker]
|
Zur Aufgabenplanung und Fehlerverfolgung wurde das integrierte Issue-System genutzt. Jede anstehende Aufgabe oder entdeckte Schwachstelle wurde als „Issue“ erfasst, einem Verantwortlichen zugewiesen und mit Labels (z. B. „Bug“, „Feature“ oder „Dokumentation“) versehen. Dies half dabei, den Überblick über den Projektfortschritt zu behalten und die Anforderungen aus dem Lastenheft strukturiert abzuarbeiten. [@gitea_docs][@gitea_issue_tracker]
|
||||||
|
|
||||||
#### 4.4.3 Pull Requests
|
#### Pull Requests
|
||||||
|
|
||||||
Um die Qualität des Codes zu sichern, wurden Änderungen nicht direkt in den Hauptzweig eingespielt, sondern über Pull Requests eingereicht. Ein Teammitglied konnte so die Änderungen eines anderen sichten, kommentieren und bei Bedarf Korrekturen anfordern. Erst nach einer erfolgreichen Überprüfung wurde der Code in den main-Branch gemergt. [@gitea_docs][@gitea_pull_requests]
|
Um die Qualität des Codes zu sichern, wurden Änderungen nicht direkt in den Hauptzweig eingespielt, sondern über Pull Requests eingereicht. Ein Teammitglied konnte so die Änderungen eines anderen sichten, kommentieren und bei Bedarf Korrekturen anfordern. Erst nach einer erfolgreichen Überprüfung wurde der Code in den main-Branch gemergt. [@gitea_docs][@gitea_pull_requests]
|
||||||
|
|
||||||
#### 4.4.4 Actions
|
#### Actions
|
||||||
|
|
||||||
Gitea Actions wurden eingesetzt, um CI/CD-Pipelines (Continuous Integration / Continuous Deployment) zu realisieren. Bei jedem Push oder Pull Request wurden automatisierte Skripte ausgeführt, die das Projekt bauten. Dies reduzierte manuelle Fehlerquellen erheblich. Außerdem konnten wir mithilfe von CI/CD den Release Prozess einmalig festlegen und automatisieren, ohne bei jedem Update manuell den selben Prozess wiederholt durchgehen zu müssen. Das APT-Package Projekt enthält die CI/CD Konfiguration für das bauen von Oqtane, der Module und Themes, sowie das verpacken in ein APT Paket und dem veröffentlichen aller Pakete als eingenes Gitea Release. [@gitea_docs][@gitea_actions]
|
Gitea Actions wurden eingesetzt, um CI/CD-Pipelines (Continuous Integration / Continuous Deployment) zu realisieren. Bei jedem Push oder Pull Request wurden automatisierte Skripte ausgeführt, die das Projekt bauten. Dies reduzierte manuelle Fehlerquellen erheblich. Außerdem konnten wir mithilfe von CI/CD den Release Prozess einmalig festlegen und automatisieren, ohne bei jedem Update manuell den selben Prozess wiederholt durchgehen zu müssen. Das APT-Package Projekt enthält die CI/CD Konfiguration für das bauen von Oqtane, der Module und Themes, sowie das verpacken in ein APT Paket und dem veröffentlichen aller Pakete als eingenes Gitea Release. [@gitea_docs][@gitea_actions]
|
||||||
|
|
||||||
#### 4.4.5 Releases
|
#### Releases
|
||||||
|
|
||||||
Über die Release-Funktion wurden wichtige Meilensteine der Diplomarbeit festgeschrieben. Hierbei wird ein spezifischer Git-Tag mit einer Versionsnummer versehen und die dazugehörigen Binärdateien, Pakete und Dokumente archiviert. So lässt sich jederzeit auf einen stabilen, abgabebereiten Stand des Projekts zugreifen. [@gitea_docs]
|
Über die Release-Funktion wurden wichtige Meilensteine der Diplomarbeit festgeschrieben. Hierbei wird ein spezifischer Git-Tag mit einer Versionsnummer versehen und die dazugehörigen Binärdateien, Pakete und Dokumente archiviert. So lässt sich jederzeit auf einen stabilen, abgabebereiten Stand des Projekts zugreifen. [@gitea_docs]
|
||||||
|
|
||||||
#### 4.4.6 Package Repositories
|
#### Package Repositories
|
||||||
|
|
||||||
Gitea fungierte zusätzlich als Register für Pakete und Container-Images. Selbst erstellte Artefakte, wie das Debian Paket für die Bereitstellung der Anwendung, wurden direkt in der Gitea-Instanz versioniert gespeichert. Dadurch waren alle notwendigen Komponenten für das Deployment an einem zentralen Ort verfügbar und abrufbar. Gitea selbst unterstützt verschiedenste Pakettypen. Darunter fallen unteranderem NuGet- und Debianpakete. Für beide haben wir in dieser Arbeit verwendung gefunden. [@gitea_docs][@gitea_packages]
|
Gitea fungierte zusätzlich als Register für Pakete und Container-Images. Selbst erstellte Artefakte, wie das Debian Paket für die Bereitstellung der Anwendung, wurden direkt in der Gitea-Instanz versioniert gespeichert. Dadurch waren alle notwendigen Komponenten für das Deployment an einem zentralen Ort verfügbar und abrufbar. Gitea selbst unterstützt verschiedenste Pakettypen. Darunter fallen unteranderem NuGet- und Debianpakete. Für beide haben wir in dieser Arbeit verwendung gefunden. [@gitea_docs][@gitea_packages]
|
||||||
|
|
||||||
@@ -354,7 +358,7 @@ Gitea fungierte zusätzlich als Register für Pakete und Container-Images. Selbs
|
|||||||
|
|
||||||
Eine C#-Solution, welche einige Module, welche für den Admineinsatz geschrieben worden sind beinhaltet. Dieses Modul besteht aus 3 Teilmodulen. Einem Modul für den Versand von Rundmails, eines für die Einstellung von der Token Lebenszeit bei Tokens, welche per E-Mail verschickt werden und eines, welches das Reporting-System übernimmt.
|
Eine C#-Solution, welche einige Module, welche für den Admineinsatz geschrieben worden sind beinhaltet. Dieses Modul besteht aus 3 Teilmodulen. Einem Modul für den Versand von Rundmails, eines für die Einstellung von der Token Lebenszeit bei Tokens, welche per E-Mail verschickt werden und eines, welches das Reporting-System übernimmt.
|
||||||
|
|
||||||
#### 5.1.1 Mass Mailing
|
#### Mass Mailing
|
||||||
|
|
||||||
Das Mass Mailer Modul ist eine administrative Erweiterung für den Alumnihub, die es dem Vorstand ermöglicht, personalisierte Rundschreiben an alle registrierten Mitglieder zu versenden. Da die Pflege der Mitgliederdaten direkt im CMS erfolgt, bietet dieses Modul eine nahtlose Integration ohne den Export von CSV-Listen in externe Newsletter-Tools.
|
Das Mass Mailer Modul ist eine administrative Erweiterung für den Alumnihub, die es dem Vorstand ermöglicht, personalisierte Rundschreiben an alle registrierten Mitglieder zu versenden. Da die Pflege der Mitgliederdaten direkt im CMS erfolgt, bietet dieses Modul eine nahtlose Integration ohne den Export von CSV-Listen in externe Newsletter-Tools.
|
||||||
|
|
||||||
@@ -364,7 +368,7 @@ Für den tatsächlichen Versand der E-Mails nutzen wir den Cloud-Dienst Brevo. D
|
|||||||
|
|
||||||
`Batch-Processing`: Mails werden nicht sofort ("Fire and Forget") versendet, sondern in eine Versandwarteschlange geschrieben. Nachdem schon die Notifications Infrastruktur, welche sich auch um den Mail versand kümmert, ins Framework eingebaut worden ist, wird diese gleich zum `schedulen` unserer E-Mails genutzt. Immer 100 Mails alle 24 Stunden bis alle Ziele die Mails erhalten haben. Das Limit von 100 / Tag ist konservativ sehr niedrig angesetzt, damit Funktionen wie Passwort Reset Mails nicht (leicht) dadurch beeinflusst werden können.
|
`Batch-Processing`: Mails werden nicht sofort ("Fire and Forget") versendet, sondern in eine Versandwarteschlange geschrieben. Nachdem schon die Notifications Infrastruktur, welche sich auch um den Mail versand kümmert, ins Framework eingebaut worden ist, wird diese gleich zum `schedulen` unserer E-Mails genutzt. Immer 100 Mails alle 24 Stunden bis alle Ziele die Mails erhalten haben. Das Limit von 100 / Tag ist konservativ sehr niedrig angesetzt, damit Funktionen wie Passwort Reset Mails nicht (leicht) dadurch beeinflusst werden können.
|
||||||
|
|
||||||
#### 5.1.2 Token Lifetime
|
#### Token Lifetime
|
||||||
|
|
||||||
Das Token Lifetime Modul wurde geschrieben, um die Token-Lebenszeit konfigurierbar zu machen. Notwendig war das, um die Passwort Reset Links im initialen Mail versand länger gültig sein zu lassen. Durch das `Batch Processing` war es möglich, dass eine Mail erst Tage nach erstellen des Links hinaus geschickt wird und bei einer Standard Ablaufdauer von 2 Tagen sind manche Links schon ungültig, bis sie den Mail Server erreichen. Ziel war es, die Änderung der Lebenszeit für Administratoren im User Interface im Admin Bereich möglich zu machen.
|
Das Token Lifetime Modul wurde geschrieben, um die Token-Lebenszeit konfigurierbar zu machen. Notwendig war das, um die Passwort Reset Links im initialen Mail versand länger gültig sein zu lassen. Durch das `Batch Processing` war es möglich, dass eine Mail erst Tage nach erstellen des Links hinaus geschickt wird und bei einer Standard Ablaufdauer von 2 Tagen sind manche Links schon ungültig, bis sie den Mail Server erreichen. Ziel war es, die Änderung der Lebenszeit für Administratoren im User Interface im Admin Bereich möglich zu machen.
|
||||||
|
|
||||||
@@ -377,7 +381,7 @@ Es gibt 2 Möglichkeiten, wie man dieses Problem Lösen kann:
|
|||||||
|
|
||||||
`Der Workaround` ist die Möglichkeit für die wir uns entschieden haben, allerdings ist das nicht die schönste Lösung. Eine eventuell nachfolgende Diplomarbeit kann an dieser Stelle ansetzen und `die saubere Lösung` implementieren.
|
`Der Workaround` ist die Möglichkeit für die wir uns entschieden haben, allerdings ist das nicht die schönste Lösung. Eine eventuell nachfolgende Diplomarbeit kann an dieser Stelle ansetzen und `die saubere Lösung` implementieren.
|
||||||
|
|
||||||
#### 5.1.3 Reporting System
|
#### Reporting System
|
||||||
|
|
||||||
Eine weitere Anforderung der Diplomarbeit war es Einträge in Modulen wie der `Hall of Fame`, dem `Schwarzen Brett` und dem Premium Bereich (`Engineer Applications`) melden zu können. Am Anfang war es wichtig, dass jeder schnell vorankommt, allerdings haben wir die Kommunikation Teamintern ein wenig verschlafen und dadurch ein paar Funktionen doppelt geschrieben. Dadurch kam es zu Inkonsistenzen in der Verwendung der unterschiedlichen Reporting Systeme. Deswegen haben wir uns am Ende für eine globales Reporting System entschieden.
|
Eine weitere Anforderung der Diplomarbeit war es Einträge in Modulen wie der `Hall of Fame`, dem `Schwarzen Brett` und dem Premium Bereich (`Engineer Applications`) melden zu können. Am Anfang war es wichtig, dass jeder schnell vorankommt, allerdings haben wir die Kommunikation Teamintern ein wenig verschlafen und dadurch ein paar Funktionen doppelt geschrieben. Dadurch kam es zu Inkonsistenzen in der Verwendung der unterschiedlichen Reporting Systeme. Deswegen haben wir uns am Ende für eine globales Reporting System entschieden.
|
||||||
|
|
||||||
@@ -408,9 +412,12 @@ Damit DI funktioniert muss für den DI Consumer (`also das Modul, welches das Re
|
|||||||
Die Implementierung des IReportingComponents stellt nur eine Property (`ReportType`, welche den TypeName der Razor Komponente zurückliefert, damit Dynamic Component sie laden kann) und eine Methode (`ConstructParameterList`, welche das Parameter Dictionary erstellt. Nur zwecks Typensicherheit eingefügt) bereit. Mit dem Dynamic Component von Razor ist es möglich, per C# Code unterschiedliche Komponenten zu rendern und damit auch die per DI injizierte Klasse.
|
Die Implementierung des IReportingComponents stellt nur eine Property (`ReportType`, welche den TypeName der Razor Komponente zurückliefert, damit Dynamic Component sie laden kann) und eine Methode (`ConstructParameterList`, welche das Parameter Dictionary erstellt. Nur zwecks Typensicherheit eingefügt) bereit. Mit dem Dynamic Component von Razor ist es möglich, per C# Code unterschiedliche Komponenten zu rendern und damit auch die per DI injizierte Klasse.
|
||||||
|
|
||||||
```razor
|
```razor
|
||||||
@inject IReportUI ReportingComponent
|
@inject IReportUI ReportUI
|
||||||
|
|
||||||
<DynamicComponent Type="@ReportingComponent.ReportType" Parameters="@ReportingComponent.ConstructParameterList(_item, RenderModeBoundary)"/>
|
<DynamicComponent
|
||||||
|
Type="@ReportUI.ReportType"
|
||||||
|
Parameters="@ReportUI.ConstructParameterList(_item, RenderModeBoundary)"
|
||||||
|
/>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
private IReportable _item;
|
private IReportable _item;
|
||||||
@@ -423,7 +430,7 @@ Die Bereitstellung des Moduls geschieht im `AdminModules` Modul.
|
|||||||
|
|
||||||
Dieses Modul ermöglicht es Administratoren und Absolventen, Veranstaltungen zu erstellen, auf der Seite zu veröffentlichen und zu verwalten, während Mitglieder ihre Teilnahme direkt über das Portal bestätigen oder absagen können. Dieses Modul dient der organisatorischen Unterstützung von Absolvententreffen und anderen Vereinsaktivitäten. Dieses Modul wurde gemeinsam mit Adam Gaiswinkler geschrieben, wobei er sich um die Darstellung der Events im Frontend gekümmert hat, während ich mich der Infrastruktur im Hintergrund angenommen habe.
|
Dieses Modul ermöglicht es Administratoren und Absolventen, Veranstaltungen zu erstellen, auf der Seite zu veröffentlichen und zu verwalten, während Mitglieder ihre Teilnahme direkt über das Portal bestätigen oder absagen können. Dieses Modul dient der organisatorischen Unterstützung von Absolvententreffen und anderen Vereinsaktivitäten. Dieses Modul wurde gemeinsam mit Adam Gaiswinkler geschrieben, wobei er sich um die Darstellung der Events im Frontend gekümmert hat, während ich mich der Infrastruktur im Hintergrund angenommen habe.
|
||||||
|
|
||||||
#### 5.2.1 Backend und Datenhaltung
|
#### Backend und Datenhaltung
|
||||||
|
|
||||||
Die serverseitige Implementierung basiert auf dem Repository-Pattern des Oqtane-Frameworks. Hierbei kommen zwei zentrale Repositories zum Einsatz:
|
Die serverseitige Implementierung basiert auf dem Repository-Pattern des Oqtane-Frameworks. Hierbei kommen zwei zentrale Repositories zum Einsatz:
|
||||||
|
|
||||||
@@ -431,7 +438,46 @@ Das `EventRepository` verwaltet die Metadaten der Veranstaltungen wie Name, Besc
|
|||||||
Das `ResponseRepository` speichert die Rückmeldungen der Benutzer. Ein Eintrag verknüpft dabei die UserId mit der EventId und dem Status der Rückmeldung.
|
Das `ResponseRepository` speichert die Rückmeldungen der Benutzer. Ein Eintrag verknüpft dabei die UserId mit der EventId und dem Status der Rückmeldung.
|
||||||
Die Kommunikation zwischen dem Client und dem Server erfolgt über einen REST-API-Controller `EventRegistrationController`, der sicherstellt, dass nur autorisierte Benutzer Änderungen vornehmen oder detaillierte Statistiken einsehen können.
|
Die Kommunikation zwischen dem Client und dem Server erfolgt über einen REST-API-Controller `EventRegistrationController`, der sicherstellt, dass nur autorisierte Benutzer Änderungen vornehmen oder detaillierte Statistiken einsehen können.
|
||||||
|
|
||||||
#### 5.2.2 Statistik und Visualisierung
|
##### Entity Relationship Diagram
|
||||||
|
|
||||||
|
\
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
%%| filename: erd-event-registration
|
||||||
|
%%| fig-cap: ER Diagramm des Event Registration Moduls
|
||||||
|
erDiagram
|
||||||
|
direction LR
|
||||||
|
EVENT ||--o{ RESPONSE : "has"
|
||||||
|
EVENT {
|
||||||
|
int EventId PK
|
||||||
|
int ModuleId
|
||||||
|
string Name
|
||||||
|
string Description
|
||||||
|
datetime EventDate
|
||||||
|
string Location
|
||||||
|
string CreatedBy
|
||||||
|
datetime CreatedOn
|
||||||
|
string ModifiedBy
|
||||||
|
datetime ModifiedOn
|
||||||
|
}
|
||||||
|
RESPONSE {
|
||||||
|
int EventResponseId PK
|
||||||
|
bool ResponseType
|
||||||
|
int OwnerId FK
|
||||||
|
int EventRegistrationId FK
|
||||||
|
int ModuleId
|
||||||
|
string CreatedBy
|
||||||
|
datetime CreatedOn
|
||||||
|
string ModifiedBy
|
||||||
|
datetime ModifiedOn
|
||||||
|
}
|
||||||
|
USER ||--o{ RESPONSE : "has"
|
||||||
|
USER {
|
||||||
|
int UserId PK
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Statistik und Visualisierung
|
||||||
|
|
||||||
Ein wesentlicher Teil der administrativen Ansicht ist die Visualisierung der Anmeldezahlen. Hierfür wurde eine Integration von Chart.js realisiert, um den aktuellen Stand der Rückmeldungen grafisch aufzubereiten.
|
Ein wesentlicher Teil der administrativen Ansicht ist die Visualisierung der Anmeldezahlen. Hierfür wurde eine Integration von Chart.js realisiert, um den aktuellen Stand der Rückmeldungen grafisch aufzubereiten.
|
||||||
|
|
||||||
@@ -447,14 +493,20 @@ Durch diese Trennung bleibt die Geschäftslogik im C#-Code, während für die pe
|
|||||||
|
|
||||||
Das Modul "Schwarzes Brett" dient als digitale Anschlagtafel für den Absolventenverein. Mitglieder können hier Gesuche, Angebote oder allgemeine Informationen veröffentlichen. Es stellt eine zentrale Informationsdrehscheibe dar, die den informellen Austausch innerhalb des Vereins fördern soll.
|
Das Modul "Schwarzes Brett" dient als digitale Anschlagtafel für den Absolventenverein. Mitglieder können hier Gesuche, Angebote oder allgemeine Informationen veröffentlichen. Es stellt eine zentrale Informationsdrehscheibe dar, die den informellen Austausch innerhalb des Vereins fördern soll.
|
||||||
|
|
||||||
#### 5.3.1 Struktur und Anzeige
|
#### Struktur und Anzeige
|
||||||
|
|
||||||
|
{ latex-placement="ht" }
|
||||||
|
|
||||||
|
<!-- ![Detailansicht eines Eintrags auf dem Schwarzen Brett][img-ref] -->
|
||||||
|
|
||||||
Die Anzeige der Einträge erfolgt in einer responsiven Grid-Ansicht (Index-Komponente), wobei jeder Eintrag als Karte (Card) dargestellt wird. Dieses Design sorgt für eine übersichtliche Präsentation auch bei einer größeren Anzahl von Mitteilungen.
|
Die Anzeige der Einträge erfolgt in einer responsiven Grid-Ansicht (Index-Komponente), wobei jeder Eintrag als Karte (Card) dargestellt wird. Dieses Design sorgt für eine übersichtliche Präsentation auch bei einer größeren Anzahl von Mitteilungen.
|
||||||
|
|
||||||
- Bilderunterstützung: Das Modul nutzt die Oqtane-interne Dateiverwaltung. Wenn ein Bild für einen Eintrag hochgeladen wurde, wird dieses über einen Image-Proxy skaliert und als Vorschaubild angezeigt. Fehlt ein Bild, wird ein konsistenter Platzhalter verwendet, um das visuelle Gleichgewicht der Grid-Ansicht zu wahren.
|
- Bilderunterstützung: Das Modul nutzt die Oqtane-interne Dateiverwaltung. Wenn ein Bild für einen Eintrag hochgeladen wurde, wird dieses über einen Image-Proxy skaliert und als Vorschaubild angezeigt. Fehlt ein Bild, wird ein konsistenter Platzhalter verwendet, um das visuelle Gleichgewicht der Grid-Ansicht zu wahren.
|
||||||
- Detailansicht: Die Details-Komponente bietet eine fokussierte Ansicht des Eintrags mit vollständiger HTML-Beschreibung, die über einen Rich-Text-Editor gepflegt werden kann. Ergänzt wird dies durch Metadaten wie Erstellungsdatum und Autor.
|
- Detailansicht: Die Details-Komponente bietet eine fokussierte Ansicht des Eintrags mit vollständiger HTML-Beschreibung, die über einen Rich-Text-Editor gepflegt werden kann. Ergänzt wird dies durch Metadaten wie Erstellungsdatum und Autor.
|
||||||
|
|
||||||
#### 5.3.2 Automatisierter E-Mail-Digest
|
<!-- [img-ref]: BlackBoard-Details.png "Detailansicht eines Eintrags auf dem Schwarzen Brett" -->
|
||||||
|
|
||||||
|
#### Automatisierter E-Mail-Digest
|
||||||
|
|
||||||
Um die Mitglieder regelmäßig über neue Inhalte zu informieren, wurde ein automatisierter `Cronjob` implementiert. Dieser Job läuft im Hintergrund des Oqtane-Frameworks und führt folgende Schritte aus:
|
Um die Mitglieder regelmäßig über neue Inhalte zu informieren, wurde ein automatisierter `Cronjob` implementiert. Dieser Job läuft im Hintergrund des Oqtane-Frameworks und führt folgende Schritte aus:
|
||||||
|
|
||||||
@@ -464,11 +516,11 @@ Um die Mitglieder regelmäßig über neue Inhalte zu informieren, wurde ein auto
|
|||||||
- Versand: Die generierten Notifications werden in die Warteschlange der Notification-Infrastruktur eingereiht und sukzessive versendet.
|
- Versand: Die generierten Notifications werden in die Warteschlange der Notification-Infrastruktur eingereiht und sukzessive versendet.
|
||||||
Integration des Reporting-Systems
|
Integration des Reporting-Systems
|
||||||
|
|
||||||
#### 5.3.3 Reporting System
|
#### Reporting System
|
||||||
|
|
||||||
Ein wichtiges Merkmal des Schwarzen Bretts zur Sicherstellung der Inhaltsqualität ist die Anbindung an das globale Reporting-System (siehe 5.4). In der Detailansicht wird über Dependency Injection die IReportUI-Komponente eingebunden. Mithilfe der DynamicComponent von Blazor wird die Melde-Funktion nahtlos in die Oberfläche des Moduls integriert. Dadurch können unangemessene Inhalte direkt von Benutzern gemeldet werden.
|
Ein wichtiges Merkmal des Schwarzen Bretts zur Sicherstellung der Inhaltsqualität ist die Anbindung an das globale Reporting-System (siehe 5.4). In der Detailansicht wird über Dependency Injection die IReportUI-Komponente eingebunden. Mithilfe der DynamicComponent von Blazor wird die Melde-Funktion nahtlos in die Oberfläche des Moduls integriert. Dadurch können unangemessene Inhalte direkt von Benutzern gemeldet werden.
|
||||||
|
|
||||||
#### 5.3.4 Technischer Hintergrund
|
#### Technischer Hintergrund
|
||||||
|
|
||||||
Auf der Serverseite folgt das Modul dem etablierten Muster mit einem `BlackBoardRepository` für den effizienten Datenbankzugriff und einem `BlackBoardController` für die API-Bereitstellung. Die Implementierung des Scheduled Jobs als HostedServiceBase ermöglicht eine tiefe Integration in die Oqtane-Infrastruktur bei gleichzeitig geringem Ressourcenverbrauch.
|
Auf der Serverseite folgt das Modul dem etablierten Muster mit einem `BlackBoardRepository` für den effizienten Datenbankzugriff und einem `BlackBoardController` für die API-Bereitstellung. Die Implementierung des Scheduled Jobs als HostedServiceBase ermöglicht eine tiefe Integration in die Oqtane-Infrastruktur bei gleichzeitig geringem Ressourcenverbrauch.
|
||||||
|
|
||||||
|
|||||||
3
97-tabellenverzeichnis.md
Normal file
3
97-tabellenverzeichnis.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Tabellenverzeichnis
|
||||||
|
|
||||||
|
\listoftables
|
||||||
3
98-abbildungsverzeichnis.md
Normal file
3
98-abbildungsverzeichnis.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Abbildungsverzeichnis
|
||||||
|
|
||||||
|
\listoffigures
|
||||||
@@ -6,3 +6,27 @@
|
|||||||
\usepackage[hyphens]{url}
|
\usepackage[hyphens]{url}
|
||||||
\usepackage[hidelinks]{hyperref}
|
\usepackage[hidelinks]{hyperref}
|
||||||
\setlength{\emergencystretch}{3em} % Prevent overfull lines
|
\setlength{\emergencystretch}{3em} % Prevent overfull lines
|
||||||
|
|
||||||
|
\usepackage{fancyhdr}
|
||||||
|
|
||||||
|
% Define the fancy style but don't activate yet
|
||||||
|
\fancypagestyle{fancy}{
|
||||||
|
\fancyhf{} % clear all header and footer fields
|
||||||
|
\fancyhead[RO,LE]{\includegraphics[height=2cm]{images/preamble/logo.png}}
|
||||||
|
\fancyhead[LO,RE]{\nouppercase{\leftmark}}
|
||||||
|
\fancyfoot[RO,LE]{\thepage}
|
||||||
|
\renewcommand{\headrulewidth}{0.4pt}
|
||||||
|
\renewcommand{\footrulewidth}{0.4pt}
|
||||||
|
\newgeometry{top=2.5cm, bottom=4cm, left=3cm, right=2cm, includehead, includefoot, a4paper}
|
||||||
|
\setlength{\headheight}{2cm}
|
||||||
|
\setlength{\footskip}{1.5cm}
|
||||||
|
}
|
||||||
|
|
||||||
|
\renewcommand{\sectionmark}[1]{\markboth{#1}{}} % Set section title to \leftmark
|
||||||
|
|
||||||
|
% Default style for preamble/TOC
|
||||||
|
\pagestyle{plain}
|
||||||
|
\fancyhf{}
|
||||||
|
\fancyfoot[C]{\thepage}
|
||||||
|
\renewcommand{\headrulewidth}{0pt}
|
||||||
|
\renewcommand{\footrulewidth}{0pt}
|
||||||
|
|||||||
BIN
images/04-Konstantin/BlackBoard-Details.png
Normal file
BIN
images/04-Konstantin/BlackBoard-Details.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 508 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.6 MiB After Width: | Height: | Size: 17 KiB |
@@ -1,12 +1,13 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
pandoc \
|
pandoc \
|
||||||
|
00-toc.md \
|
||||||
01-Allgemein.md \
|
01-Allgemein.md \
|
||||||
02-Diplomarbeitsbuch-individueller-teil-Adam-Gaiswinkler.md \
|
02-Diplomarbeitsbuch-individueller-teil-Adam-Gaiswinkler.md \
|
||||||
03-Diplomarbeitsbuch-individueller-teil-Florian-Edlmayer.md \
|
03-Diplomarbeitsbuch-individueller-teil-Florian-Edlmayer.md \
|
||||||
04-Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md \
|
04-Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md \
|
||||||
|
97-tabellenverzeichnis.md \
|
||||||
|
98-abbildungsverzeichnis.md \
|
||||||
99-bibliographie.md \
|
99-bibliographie.md \
|
||||||
--toc \
|
|
||||||
--toc-depth=3 \
|
|
||||||
--number-sections \
|
--number-sections \
|
||||||
--lua-filter _extensions/diagram/diagram.lua \
|
--lua-filter _extensions/diagram/diagram.lua \
|
||||||
--syntax-definition _extensions/razor/razor.xml \
|
--syntax-definition _extensions/razor/razor.xml \
|
||||||
@@ -14,7 +15,11 @@ pandoc \
|
|||||||
--bibliography sources.bib \
|
--bibliography sources.bib \
|
||||||
--include-before-body 00_preamble.tex \
|
--include-before-body 00_preamble.tex \
|
||||||
-H _extensions/header/header.tex \
|
-H _extensions/header/header.tex \
|
||||||
-V geometry:margin=2cm \
|
-V geometry:"top=2.5cm, bottom=2cm, left=3cm, right=2cm, a4paper" \
|
||||||
-V toc-title="Inhaltsverzeichnis" \
|
-V toc-title="Inhaltsverzeichnis" \
|
||||||
--lof \
|
-V classoption=twoside \
|
||||||
-o diplomarbeitsbuch.pdf
|
-V fontsize=12pt \
|
||||||
|
-V linestretch=1.5 \
|
||||||
|
-o diplomarbeitsbuch.pdf
|
||||||
|
# --toc \
|
||||||
|
# --toc-depth=3 \
|
||||||
Reference in New Issue
Block a user