Volle Mindflux-App ins Deploy-Repo übernehmen

Ersetzt das Hello-World-Gerüst durch die vollständige Anwendung
(com.example.mindflux: 64 Klassen, Thymeleaf-Templates, Static-Assets,
Flyway V1–V6). Deploy-Infrastruktur (.gitea, Dockerfile) bleibt erhalten.

- pom: volle Abhängigkeiten (Security, Thymeleaf, JPA, Flyway), Spring Boot 3.4.4 / Java 17
- docker-compose: SPRING_DATASOURCE_* unverändert; App lauscht auf 8080
  (nginx -> mindflux:8080); Uploads-Volume; Admin-Passwörter via Gitea-Secrets
- Workflow: Deploy-Step injiziert MINDFLUX_ADMIN*_PASSWORD aus Secrets
- .dockerignore ergänzt; Hello-World (com.mindflux) und Test-Datei 'main' entfernt

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
AliceDarkest
2026-06-26 14:51:30 +02:00
parent f3309c1574
commit 9022961762
185 changed files with 22772 additions and 142 deletions
@@ -16,5 +16,4 @@ CREATE TABLE achievements (
date_achieved TIMESTAMP
);
CREATE INDEX idx_achievements_username
ON achievements (username);
CREATE INDEX idx_achievements_username ON achievements (username);
@@ -0,0 +1,14 @@
-- Generische Spiel-Ergebnistabelle für alle Mindflux-Spiele
-- (MindMatch ist das erste Spiel, das hier schreibt – die übrigen docken später an).
CREATE TABLE game_scores (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
username VARCHAR(100) NOT NULL,
game VARCHAR(50) NOT NULL,
deck VARCHAR(100),
score INT NOT NULL,
moves INT,
duration_seconds INT,
played_at TIMESTAMP NOT NULL
);
CREATE INDEX idx_game_scores_user_game ON game_scores (username, game);
@@ -0,0 +1,68 @@
-- MindMatch-Inhalte in die DB verlagern, damit Admins Decks (Kategorien) und
-- Paare jederzeit zur Laufzeit erweitern können (vorher statische JSON-Dateien).
CREATE TABLE mindmatch_decks (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
slug VARCHAR(100) NOT NULL UNIQUE,
title VARCHAR(150) NOT NULL,
sort_order INT NOT NULL DEFAULT 0,
active BOOLEAN NOT NULL DEFAULT TRUE
);
CREATE TABLE mindmatch_pairs (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
deck_id BIGINT NOT NULL REFERENCES mindmatch_decks (id) ON DELETE CASCADE,
term VARCHAR(255) NOT NULL,
match_text VARCHAR(255) NOT NULL
);
CREATE INDEX idx_mindmatch_pairs_deck ON mindmatch_pairs (deck_id);
-- Seed: die bisherigen 3 Decks plus das neue SQL-Befehle-Deck.
INSERT INTO mindmatch_decks (slug, title, sort_order, active) VALUES
('netzwerk', 'Netzwerk-Grundlagen', 1, TRUE),
('hardware', 'Hardware & Komponenten', 2, TRUE),
('it-sicherheit', 'IT-Sicherheit', 3, TRUE),
('sql-befehle', 'SQL-Befehle', 4, TRUE);
INSERT INTO mindmatch_pairs (deck_id, term, match_text)
SELECT d.id, v.term, v.match_text
FROM mindmatch_decks d
JOIN (
VALUES
('netzwerk', 'DNS', 'Löst Namen in IP-Adressen auf'),
('netzwerk', 'DHCP', 'Vergibt IP-Adressen automatisch'),
('netzwerk', 'Router', 'Verbindet verschiedene Netze'),
('netzwerk', 'Switch', 'Verbindet Geräte im LAN'),
('netzwerk', 'Gateway', 'Übergang in ein anderes Netz'),
('netzwerk', 'Firewall', 'Filtert den Netzwerkverkehr'),
('netzwerk', 'MAC-Adresse', 'Physische Hardware-Adresse'),
('netzwerk', 'Subnetzmaske', 'Trennt Netz- und Hostanteil'),
('hardware', 'CPU', 'Zentrale Recheneinheit'),
('hardware', 'RAM', 'Flüchtiger Arbeitsspeicher'),
('hardware', 'SSD', 'Schneller Flash-Speicher'),
('hardware', 'GPU', 'Grafikprozessor'),
('hardware', 'Mainboard', 'Hauptplatine des Rechners'),
('hardware', 'BIOS', 'Startet die Hardware'),
('hardware', 'Netzteil', 'Wandelt die Netzspannung um'),
('hardware', 'Cache', 'Schneller Zwischenspeicher der CPU'),
('it-sicherheit', 'Phishing', 'Täuschung zum Datenklau'),
('it-sicherheit', 'Verschlüsselung', 'Macht Daten unlesbar'),
('it-sicherheit', 'Backup', 'Sicherungskopie von Daten'),
('it-sicherheit', 'VPN', 'Verschlüsselter Tunnel'),
('it-sicherheit', '2FA', 'Zwei-Faktor-Anmeldung'),
('it-sicherheit', 'Malware', 'Schädliche Software'),
('it-sicherheit', 'Patch', 'Schließt Sicherheitslücken'),
('it-sicherheit', 'Brute Force', 'Systematisches Passwortraten'),
('sql-befehle', 'SELECT', 'Daten abfragen'),
('sql-befehle', 'INSERT', 'Datensatz einfügen'),
('sql-befehle', 'UPDATE', 'Datensatz ändern'),
('sql-befehle', 'DELETE', 'Datensatz löschen'),
('sql-befehle', 'WHERE', 'Zeilen filtern'),
('sql-befehle', 'JOIN', 'Tabellen verknüpfen'),
('sql-befehle', 'GROUP BY', 'Zeilen gruppieren'),
('sql-befehle', 'ORDER BY', 'Ergebnis sortieren')
) AS v(slug, term, match_text) ON v.slug = d.slug;
@@ -0,0 +1,152 @@
-- Weitere MindMatch-Decks aus dem Dokument "Memory-Kategorien – Fachinformatiker".
-- 5 Themen-Decks + die Oberkategorie "Abkürzungen" als 6 eigene Decks (Deck-Modell ist flach).
INSERT INTO mindmatch_decks (slug, title, sort_order, active) VALUES
('betriebssysteme', 'Betriebssysteme', 5, TRUE),
('programmierung', 'Programmierung', 6, TRUE),
('webentwicklung', 'Webentwicklung', 7, TRUE),
('softwareentwicklung', 'Softwareentwicklung', 8, TRUE),
('cloud-devops', 'Cloud & DevOps', 9, TRUE),
('abk-netzwerk', 'Abkürzungen: Netzwerk', 10, TRUE),
('abk-hardware', 'Abkürzungen: Hardware', 11, TRUE),
('abk-programmierung-datenformate','Abkürzungen: Programmierung & Datenformate', 12, TRUE),
('abk-web', 'Abkürzungen: Web', 13, TRUE),
('abk-it-sicherheit', 'Abkürzungen: IT-Sicherheit', 14, TRUE),
('abk-betriebssysteme-devops', 'Abkürzungen: Betriebssysteme & DevOps', 15, TRUE);
INSERT INTO mindmatch_pairs (deck_id, term, match_text)
SELECT d.id, v.term, v.match_text
FROM mindmatch_decks d
JOIN (
VALUES
-- Betriebssysteme
('betriebssysteme', 'Windows', 'Microsoft'),
('betriebssysteme', 'Linux', 'Open Source'),
('betriebssysteme', 'Kernel', 'Betriebssystemkern'),
('betriebssysteme', 'Prozess', 'Laufendes Programm'),
('betriebssysteme', 'Thread', 'Ausführungsstrang'),
('betriebssysteme', 'Dateisystem', 'Datenorganisation'),
('betriebssysteme', 'NTFS', 'Windows-Dateisystem'),
('betriebssysteme', 'ext4', 'Linux-Dateisystem'),
('betriebssysteme', 'Shell', 'Kommandozeile'),
('betriebssysteme', 'Terminal', 'Konsolenzugriff'),
('betriebssysteme', 'Dienst', 'Hintergrundprozess'),
('betriebssysteme', 'Rechte', 'Zugriffskontrolle'),
-- Programmierung
('programmierung', 'Variable', 'Speicherplatz'),
('programmierung', 'Schleife', 'Wiederholung'),
('programmierung', 'Array', 'Feld'),
('programmierung', 'Objekt', 'Instanz'),
('programmierung', 'Klasse', 'Bauplan'),
('programmierung', 'Methode', 'Funktion'),
('programmierung', 'Interface', 'Vertrag'),
('programmierung', 'Vererbung', 'OOP-Konzept'),
('programmierung', 'Exception', 'Fehlerbehandlung'),
('programmierung', 'Compiler', 'Übersetzer'),
('programmierung', 'Debugger', 'Fehlersuche'),
('programmierung', 'Git', 'Versionsverwaltung'),
-- Webentwicklung
('webentwicklung', 'HTML', 'Struktur'),
('webentwicklung', 'CSS', 'Gestaltung'),
('webentwicklung', 'JavaScript', 'Interaktivität'),
('webentwicklung', 'DOM', 'Dokumentenmodell'),
('webentwicklung', 'API', 'Programmierschnittstelle'),
('webentwicklung', 'JSON', 'Datenaustausch'),
('webentwicklung', 'REST', 'Architekturstil'),
('webentwicklung', 'HTTP', 'Übertragungsprotokoll'),
('webentwicklung', 'Cookie', 'Browserdaten'),
('webentwicklung', 'Session', 'Benutzersitzung'),
('webentwicklung', 'Backend', 'Serverlogik'),
('webentwicklung', 'Frontend', 'Benutzeroberfläche'),
-- Softwareentwicklung
('softwareentwicklung', 'Scrum', 'Agiles Vorgehen'),
('softwareentwicklung', 'Sprint', 'Entwicklungszyklus'),
('softwareentwicklung', 'Product Owner', 'Produktverantwortung'),
('softwareentwicklung', 'Kanban', 'Aufgabenfluss'),
('softwareentwicklung', 'UML', 'Modellierung'),
('softwareentwicklung', 'Use Case', 'Anwendungsfall'),
('softwareentwicklung', 'ER-Modell', 'Datenmodell'),
('softwareentwicklung', 'Testfall', 'Prüfung'),
('softwareentwicklung', 'CI/CD', 'Automatisierte Auslieferung'),
('softwareentwicklung', 'Refactoring', 'Codeverbesserung'),
('softwareentwicklung', 'Repository', 'Quellcodeablage'),
('softwareentwicklung', 'Merge', 'Zusammenführen'),
-- Cloud & DevOps
('cloud-devops', 'Docker', 'Container'),
('cloud-devops', 'Kubernetes', 'Container-Orchestrierung'),
('cloud-devops', 'VM', 'Virtuelle Maschine'),
('cloud-devops', 'Cloud', 'Ressourcen aus dem Internet'),
('cloud-devops', 'Azure', 'Microsoft Cloud'),
('cloud-devops', 'AWS', 'Amazon Web Services'),
('cloud-devops', 'GitHub', 'Codehosting'),
('cloud-devops', 'Jenkins', 'CI-Server'),
('cloud-devops', 'Pipeline', 'Automatisierung'),
('cloud-devops', 'YAML', 'Konfigurationsdatei'),
('cloud-devops', 'Deployment', 'Bereitstellung'),
('cloud-devops', 'Monitoring', 'Überwachung'),
-- Abkürzungen: Netzwerk
('abk-netzwerk', 'DNS', 'Domain Name System'),
('abk-netzwerk', 'DHCP', 'Dynamic Host Configuration Protocol'),
('abk-netzwerk', 'IP', 'Internet Protocol'),
('abk-netzwerk', 'TCP', 'Transmission Control Protocol'),
('abk-netzwerk', 'UDP', 'User Datagram Protocol'),
('abk-netzwerk', 'FTP', 'File Transfer Protocol'),
('abk-netzwerk', 'SSH', 'Secure Shell'),
('abk-netzwerk', 'VPN', 'Virtual Private Network'),
-- Abkürzungen: Hardware
('abk-hardware', 'CPU', 'Central Processing Unit'),
('abk-hardware', 'GPU', 'Graphics Processing Unit'),
('abk-hardware', 'RAM', 'Random Access Memory'),
('abk-hardware', 'ROM', 'Read Only Memory'),
('abk-hardware', 'SSD', 'Solid State Drive'),
('abk-hardware', 'HDD', 'Hard Disk Drive'),
('abk-hardware', 'PSU', 'Power Supply Unit'),
('abk-hardware', 'BIOS', 'Basic Input/Output System'),
('abk-hardware', 'UEFI', 'Unified Extensible Firmware Interface'),
('abk-hardware', 'PCIe', 'Peripheral Component Interconnect Express'),
-- Abkürzungen: Programmierung & Datenformate
('abk-programmierung-datenformate', 'SQL', 'Structured Query Language'),
('abk-programmierung-datenformate', 'IDE', 'Integrated Development Environment'),
('abk-programmierung-datenformate', 'SDK', 'Software Development Kit'),
('abk-programmierung-datenformate', 'OOP', 'Object Oriented Programming'),
('abk-programmierung-datenformate', 'CRUD', 'Create Read Update Delete'),
('abk-programmierung-datenformate', 'MVC', 'Model View Controller'),
('abk-programmierung-datenformate', 'ORM', 'Object Relational Mapping'),
('abk-programmierung-datenformate', 'XML', 'Extensible Markup Language'),
-- Abkürzungen: Web
('abk-web', 'URL', 'Uniform Resource Locator'),
('abk-web', 'URI', 'Uniform Resource Identifier'),
('abk-web', 'CDN', 'Content Delivery Network'),
('abk-web', 'SOAP', 'Simple Object Access Protocol'),
('abk-web', 'JWT', 'JSON Web Token'),
('abk-web', 'CORS', 'Cross Origin Resource Sharing'),
-- Abkürzungen: IT-Sicherheit
('abk-it-sicherheit', 'MFA', 'Multi Factor Authentication'),
('abk-it-sicherheit', '2FA', 'Two Factor Authentication'),
('abk-it-sicherheit', 'TLS', 'Transport Layer Security'),
('abk-it-sicherheit', 'AES', 'Advanced Encryption Standard'),
('abk-it-sicherheit', 'RSA', 'Rivest Shamir Adleman'),
('abk-it-sicherheit', 'PKI', 'Public Key Infrastructure'),
('abk-it-sicherheit', 'IDS', 'Intrusion Detection System'),
('abk-it-sicherheit', 'IPS', 'Intrusion Prevention System'),
('abk-it-sicherheit', 'SIEM', 'Security Information and Event Management'),
('abk-it-sicherheit', 'CVE', 'Common Vulnerabilities and Exposures'),
-- Abkürzungen: Betriebssysteme & DevOps
('abk-betriebssysteme-devops', 'CLI', 'Command Line Interface'),
('abk-betriebssysteme-devops', 'GUI', 'Graphical User Interface'),
('abk-betriebssysteme-devops', 'VM', 'Virtual Machine'),
('abk-betriebssysteme-devops', 'CI', 'Continuous Integration'),
('abk-betriebssysteme-devops', 'CD', 'Continuous Delivery'),
('abk-betriebssysteme-devops', 'LTS', 'Long Term Support'),
('abk-betriebssysteme-devops', 'FQDN', 'Fully Qualified Domain Name')
) AS v(slug, term, match_text) ON v.slug = d.slug;
@@ -0,0 +1,30 @@
-- TechTacular: IT-Quizduell im Jeopardy-Stil. Inhalte DB-basiert und Admin-pflegbar.
-- Kategorie -> Fragen -> Antworten (genau eine korrekt). Gefüllt wird per Seeder
-- aus den vorhandenen FinalFlux-Fragenkatalogen (siehe TechtacularSeeder).
CREATE TABLE techtacular_categories (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
slug VARCHAR(150) NOT NULL UNIQUE,
title VARCHAR(200) NOT NULL,
sort_order INT NOT NULL DEFAULT 0,
active BOOLEAN NOT NULL DEFAULT TRUE
);
CREATE TABLE techtacular_questions (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
category_id BIGINT NOT NULL REFERENCES techtacular_categories (id) ON DELETE CASCADE,
question_text VARCHAR(1000) NOT NULL,
explanation VARCHAR(1000),
points INT NOT NULL DEFAULT 100
);
CREATE TABLE techtacular_answers (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
question_id BIGINT NOT NULL REFERENCES techtacular_questions (id) ON DELETE CASCADE,
answer_text VARCHAR(500) NOT NULL,
correct BOOLEAN NOT NULL DEFAULT FALSE,
sort_order INT NOT NULL DEFAULT 0
);
CREATE INDEX idx_techtacular_questions_cat ON techtacular_questions (category_id);
CREATE INDEX idx_techtacular_answers_q ON techtacular_answers (question_id);
@@ -0,0 +1,4 @@
-- Umstellung auf das echte Jeopardy-Format (umgekehrt) mit kuratierten Inhalten.
-- Der bisherige (templatehafte) FinalFlux-Import wird geleert; der TechtacularSeeder
-- befüllt anschließend neu aus techtacular/content.json.
TRUNCATE TABLE techtacular_categories RESTART IDENTITY CASCADE;