Compare commits

...

6 Commits

Author SHA1 Message Date
3be7fd4123 New: pandoc-tex.sh and logging im lua filter
Some checks failed
Word Count / count-words (push) Has been cancelled
2026-03-23 14:18:10 +01:00
90294a0503 Abbildungsverzeichnis befüllen 2026-03-23 14:18:10 +01:00
29b29fe49d Aligning in Code Block 2026-03-23 14:18:10 +01:00
e4c7cab347 Fix: Adams Table 2026-03-23 14:18:10 +01:00
8612e13f2a Remove citrep 2026-03-23 14:18:10 +01:00
6995fa35f0 New: Bold names 2026-03-23 14:17:06 +01:00
6 changed files with 77 additions and 35 deletions

View File

@@ -26,7 +26,7 @@ Florian Edlmayer entwickelte ein funktionierendes CMS-Modul für den Premiumbere
## Das Team
Konstantin Hintermayer
**Konstantin Hintermayer**
Geboren am: 25.05.2007
@@ -34,7 +34,8 @@ E-Mail: [konstantin.hintermayer@edu.szu.at]
Individuelle Themenstellung: Projektleitung (Product Owner), (Server-) Infrastruktur, Aufsetzen und Installieren der Server / Linux / Datenbank, Adminzugriff, Skripten, Entwicklung der Auswertungen und des schwarzen Bretts.
Florian Edlmayer
**Florian Edlmayer**
Geboren am: 20.08.2006
@@ -42,7 +43,8 @@ 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.
Adam Gaiswinkler
**Adam Gaiswinkler**
Geboren am: 11.10.2006
@@ -197,16 +199,16 @@ Table: Aufgabenverteilung Adam Gaiswinkler
### Meilensteine
| # | Datum | Beschreibung |
| :--- | :----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| _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]. |
| _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]. |
| _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]. |
| _7_ | _12.03.2026_ | Finale Abgabe des Diplomarbeitsbuchs. |
| _8_ | _22.04.2026_ | Defensio (Projektabschluss). |
| # | Datum | Beschreibung |
| :-- | :------------- | --------------------------------------------------------- |
| _1_ | _19.09.2025_ | Fertigstellung und Abgabe des Diplomarbeitsantrags. |
| _2_ | _30.10.2025_ | Server-Setup mit SSH-Zugriff, CMS-Grundkonfiguration (Oqtane) im SZU-Design, Implementierung der Eingabemaske und API für das Anmeldetool sowie Erstellung der DSGVO-Richtlinien und Backupstrategie. |
| _3_ | _27.11.2025_ | Entwicklung grafischer Auswertungen für Anmeldedaten und Integration der OAuth-Authentifizierung zum automatisierten Abruf von Profildaten. |
| _4_ | _18.12.2025_ | Realisierung des Schwarzen Bretts inkl. Sperrfunktion für Administratoren, Entwicklung des Hall of Fame Moduls mit PDF-Generierung sowie Aufbau der Premiumkunden-Verwaltung. |
| _5_ | _21.01.2026_ | Erstellung der technischen Systemdokumentation, Durchführung von Modultests und Implementierung der Premium-Serviceverwaltung. |
| _6_ | _08.02.2026_ | Projektabschluss der Infrastruktur-Tasks, Übergabe der Disaster-Recovery-Skripte und Finalisierung der gesamten Projektdokumentation. |
| _7_ | _12.03.2026_ | Finale Abgabe des Diplomarbeitsbuchs. |
| _8_ | _22.04.2026_ | Defensio (Projektabschluss). |
Table: Meilensteine
@@ -299,17 +301,17 @@ Table: Projektumfelder und deren Bewertung
## Risikoanalyse
| # | 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 |
| 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 |
| 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 |
| 6 | Performance | [cite_start]Beeinträchtigung der Systemleistung bei steigenden Zugriffszahlen in Phase 2[cite: 44, 46]. | 40 | 40 | 1600 |
| 7 | Wieder-herstellung | [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 |
| 9 | Dokumentation | [cite_start]Lückenhafte technische Dokumentation erschwert die Wartung durch den Absolventenverein[cite: 155]. | 20 | 30 | 600 |
| # | Bezeichnung | Beschreibung | Warsch. (%) | Ausw. (%) | Risikowert |
| :-- | :----------------- | :-------------------------------------------------------- | :-------: | :-------: | :-----: |
| 1 | Infrastruktur | Instabilität oder Fehlkonfiguration der Cloud-Server (Hetzner CX22), die den Live-Betrieb unterbrechen. | 60 | 90 | 5400 |
| 2 | Datenverlust | Kritischer Ausfall der Datenbank ohne erfolgreiche Wiederherstellung durch automatisierte Backups. | 20 | 92 | 1425 |
| 3 | DSGVO-Verstoß | Fehlende Konformität bei der Speicherung personenbezogener Daten oder beim Opt-In-Verfahren. | 10 | 89 | 1000 |
| 4 | Sicherheitslücke | Unbefugter Zugriff auf das System durch Schwachstellen in der VPN- oder SSH-Verbindung. | 15 | 85 | 1275 |
| 5 | API-Schnittstellen | Ausfall oder Inkompatibilität externer Dienste wie LinkedIn OAuth oder Brevo Mailservice. | 30 | 50 | 1500 |
| 6 | Performance | Beeinträchtigung der Systemleistung bei steigenden Zugriffszahlen in Phase 2. | 40 | 40 | 1600 |
| 7 | Wieder-herstellung | Überschreitung des geplanten Disaster-Recovery-Zeitraums von 24 Stunden. | 25 | 70 | 1750 |
| 8 | Oqtane-Integration | Komplexität bei der Entwicklung und Einbindung benutzerdefinierter CMS-Module. | 55 | 45 | 1350 |
| 9 | Dokumentation | Lückenhafte technische Dokumentation erschwert die Wartung durch den Absolventenverein. | 20 | 30 | 600 |
Table: Risikoanalyse und Bewertung
@@ -325,13 +327,13 @@ quadrantChart
quadrant-3 Akzeptabel
quadrant-4 Handlungsbedarf
Infrastruktur: [0.9, 0.6]
Datenverlust: [0.95, 0.15]
DSGVO_Verstoss: [0.99, 0.1]
Datenverlust: [0.92, 0.2]
DSGVO_Verstoss: [0.89, 0.1]
Sicherheitsluecke: [0.85, 0.15]
API_Schnittstellen: [0.5, 0.3]
Performance: [0.4, 0.4]
Wiederherstellung: [0.7, 0.25]
Oqtane_Integration: [0.45, 0.3]
Oqtane_Integration: [0.55, 0.45]
Dokumentation: [0.3, 0.2]
```

View File

@@ -390,7 +390,7 @@ Der Fremdschlüssel zu `SZUAbsolventenvereinHallOfFame` ist mit kaskadierendem L
Die Datenbankstruktur wird über Entity Framework Core Migrationen versioniert verwaltet [@ef_core_migrations].
| Migration | Versionsnummer | Inhalt |
|--------------------|----------------|--------|
| ------- | ------ | ------------ |
| `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` |
| `AddReportTable` | `01.00.00.03` | Erstellt die eigenständige Report-Tabelle mit Fremdschlüssel zur Haupttabelle |

View File

@@ -731,10 +731,14 @@ public class PremiumAreaContext : DBContextBase, ITransientService, IMultiDataba
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"));
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"));
}
}
```

View File

@@ -219,6 +219,8 @@ Oqtane selbst läuft als Systemd-Service im Kestrel-Backend. Kestrel ist ein kle
```mermaid
sequenceDiagram
%%| filename: sequence-diagram-system-architecture
%%| fig-cap: Schematische Darstellung der Systemarchitektur
participant browser as Client
participant nginx as NginX
participant oqtane as Oqtane
@@ -310,7 +312,8 @@ Der folgende Ablauf zeigt die Kommunikation bei einer typischen Datenabfrage in
```mermaid
sequenceDiagram
%
%%| filename: sequence-diagram-data-query
%%| fig-cap: Schematische Darstellung der Systemarchitektur
participant C as Blazor Client (Razor)
participant S as Oqtane Server (Controller)
participant R as Repository (EntityFramework)
@@ -349,6 +352,8 @@ Ausgangslage ist eine Softwarearchitektur im Direct-Dependency-Graph-Modell.
```mermaid
architecture-beta
%%| filename: architecture-beta
%%| fig-cap: DIP: Direct Dependency Graph
service a(mdi:package-variant-closed)[Klasse A]
service b(mdi:package-variant-closed)[Klasse B]
@@ -360,6 +365,8 @@ Das Problem dabei: Die einzelnen Klassen sind eng gekoppelt, was das Austauschen
```mermaid
architecture-beta
%%| filename: architecture-beta
%%| fig-cap: DIP: Dependency Inversion Principle
service a(mdi:package-variant-closed)[Klasse A]
service b(mdi:package-variant-closed)[Klasse B]
service ib(mdi:car-clutch)[Interface B]
@@ -427,6 +434,7 @@ Mit dem Aufruf von `builder.Build()` wird intern ein Dependency Graph erstellt u
So sieht der Abhängigkeitsgraph bei diesem Beispiel aus.
```mermaid
%%| fig-cap: DIP: Dependency Inversion Principle Beispiel
architecture-beta
service a(mdi:package-variant-closed)[Worker]
service b(mdi:package-variant-closed)[MessageWriter]
@@ -655,6 +663,7 @@ Eine weitere Anforderung der Diplomarbeit war es Einträge in Modulen wie der `H
Angestrebt wurde folgender Ablauf für das Melden eines Eintrags:
```mermaid
%%| fig-cap: Reporting System: Ablaufdiagramm
sequenceDiagram
participant Module
actor User
@@ -714,10 +723,10 @@ Die Kommunikation zwischen dem Client und dem Server erfolgt über einen REST-AP
\
``` {.mermaid width=50%}
%%| filename: erd-event-registration
%%| fig-cap: ER Diagramm des Event Registration Moduls
erDiagram
direction LR
%%| filename: erd-event-registration
%%| fig-cap: ER Diagramm des Event Registration Moduls
EVENT ||--o{ RESPONSE : "has"
EVENT {
int EventId PK

View File

@@ -564,6 +564,7 @@ local function code_to_figure (conf)
-- Check if a converter exists for this block. If not, return the block
-- unchanged.
local diagram_type = block.classes[1]
print("Diagram type: ", diagram_type)
if not diagram_type then
return nil
end

26
pandoc-tex.sh Normal file
View File

@@ -0,0 +1,26 @@
#!/bin/bash
pandoc \
00-praemble.md \
01-toc.md \
02-Allgemein.md \
03-Diplomarbeitsbuch-individueller-teil-Adam-Gaiswinkler.md \
04-Diplomarbeitsbuch-individueller-teil-Florian-Edlmayer.md \
05-Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md \
97-tabellenverzeichnis.md \
98-abbildungsverzeichnis.md \
99-bibliographie.md \
--number-sections \
--lua-filter _extensions/diagram/diagram.lua \
--syntax-definition _extensions/razor/razor.xml \
--syntax-definition _extensions/nginx/nginx.xml \
--citeproc \
--bibliography sources.bib \
--csl _extensions/sources/tgm.csl \
--include-before-body 00_preamble.tex \
-H _extensions/header/header.tex \
-V geometry:"top=2.5cm, bottom=2cm, left=3cm, right=2cm, a4paper" \
-V toc-title="Inhaltsverzeichnis" \
-V classoption=twoside \
-V fontsize=12pt \
-V linestretch=1.5 \
-o diplomarbeitsbuch.tex