https://github.com/cschog/kanucontrol
Multi-tenant web application for managing KJFP funding workflows for canoe clubs and associations (Spring Boot, PostgreSQL, Keycloak)
https://github.com/cschog/kanucontrol
club-management java keycloak liquibase multi-tenancy-application open-source postgresql-database react schema-per-tenant sports-management spring-boot-3 typescript vite
Last synced: 3 months ago
JSON representation
Multi-tenant web application for managing KJFP funding workflows for canoe clubs and associations (Spring Boot, PostgreSQL, Keycloak)
- Host: GitHub
- URL: https://github.com/cschog/kanucontrol
- Owner: cschog
- License: apache-2.0
- Created: 2024-01-29T12:40:35.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2026-02-17T13:28:23.000Z (4 months ago)
- Last Synced: 2026-02-17T18:51:06.826Z (4 months ago)
- Topics: club-management, java, keycloak, liquibase, multi-tenancy-application, open-source, postgresql-database, react, schema-per-tenant, sports-management, spring-boot-3, typescript, vite
- Language: Java
- Homepage:
- Size: 99.8 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Notice: NOTICE.md
Awesome Lists containing this project
README
# KanuControl
> ⚠️ Hinweis:
> KanuControl befindet sich aktuell in aktiver Entwicklung und ist noch nicht produktiv einsetzbar.
---
## 🎯 Ziel von KanuControl
KanuControl ist eine Webanwendung zur Beantragung, Verwaltung und Abrechnung von Zuschüssen
aus dem Kinder-, Jugend- und Freizeitplan (KJFP) des Landessportbundes NRW (LSB NRW).
Die Anwendung richtet sich an:
- Kanuvereine
- Kanuverbände (z. B. KVNRW)
- Geschäftsstellen, die Förderanträge prüfen und abrechnen
Ziel ist es, die heute oft manuellen, fehleranfälligen und papierbasierten Prozesse
durch eine strukturierte, digitale Lösung zu ersetzen.
---
## 🧭 Fachlicher Ablauf
### Grunddaten
- Anlegen eines Vereins (falls noch nicht vorhanden)
- Anlegen von Personen
- Zuordnung von Personen zu Vereinen (Mitgliedschaften)
---
### Antragstellung
- Anlegen einer Jugend-Veranstaltung
- Erfassen der relevanten Eckdaten
- Erzeugung von Antragsformularen (später als PDF)
---
### Durchführung der Veranstaltung
- Erfassen der Teilnehmer
- Personen werden bei Bedarf automatisch angelegt
- Zuordnung zur Veranstaltung erfolgt direkt
- Pflege von Teilnehmerlisten
---
### Abrechnung
- Erfassen von:
- Einnahmen
- Ausgaben
- optional Reisekosten
- Automatische Berechnung relevanter Summen
- Ausgabe der Abrechnungsunterlagen als PDF:
- Deckblatt
- Erhebungsbogen
- Teilnehmerliste
- ggf. Reisekostenübersicht
Hinweis:
PDF-Erzeugung ist ein späterer Ausbauschritt.
Fokus liegt zunächst auf stabilen Datenmodellen und Prozessen.
---
## 🧱 Technische Architektur
KanuControl ist eine Client-Server-Webanwendung.
### Überblick
```
Browser (React)
|
v
Spring Boot REST API
|
Service Layer
|
Mapper (DTO <-> Entity)
|
Repository (JPA)
|
PostgreSQL (Schema-per-Tenant)
```
---
## 🌐 Mandantenfähigkeit
KanuControl ist mandantenfähig (Multi-Tenant) aufgebaut.
- Jeder Verein sieht ausschließlich seine eigenen Daten
- Trennung erfolgt strikt über Schema-per-Tenant
- Tenant-Ermittlung erfolgt über:
- JWT (Keycloak)
- HTTP-Header
- Ein neutrales Default-Schema (kanu) wird ausschließlich für Systemzwecke genutzt
Schemas werden lazy erzeugt.
- Das Baseline-Schema (`kanu`) wird ausschließlich über Liquibase verwaltet
- Neue Tenant-Schemas werden zur Laufzeit aus dieser Baseline abgeleitet
- Die Struktur der Tenant-Schemas ist damit garantiert identisch
- Schema-Initialisierung erfolgt kontrolliert und idempotent
---
## 🗄️ Datenbankstruktur (PostgreSQL)
```
Database: kanu
├── kanu (System / Default-Schema)
├── ekc_test
│ ├── person
│ ├── verein
│ ├── mitglied
│ └── …
├── tenant_verein_2
│ ├── person
│ ├── verein
│ ├── mitglied
│ └── …
```
- Das Schema `kanu` dient als technisches Baseline- und System-Schema
- Tenant-Schemas enthalten ausschließlich fachliche Daten
- Änderungen an der Struktur erfolgen immer zuerst im Baseline-Schema
---
## 🔐 Authentifizierung & Autorisierung
Zur Benutzerverwaltung wird Keycloak eingesetzt.
- Open-Source IAM
- OAuth2 / OpenID Connect
- Rollen- & Rechteverwaltung
- Saubere Trennung von Authentifizierung und Fachlogik
- Mandantenzuordnung über Gruppen / Claims
---
## 🧪 Qualität & Tests
- Controller-Tests (@WebMvcTest)
- Integrationstests für:
- REST-Endpunkte
- Mandanten-Initialisierung
- Liquibase-Migrationen
- Smoke-Tests für Systemstart & Grundfunktionen
### Besonderer Fokus liegt auf der Absicherung der Mandantenarchitektur:
- Baseline-Migrationstests (Liquibase)
- Smoke-Tests für Tenant-Schema-Provisionierung
- Verifikation der Schema-Isolation
---
## 📦 Backend
### Technologien
- Java 21
- Spring Boot 3.5.10
- Spring Data JPA (Hibernate 6)
- Liquibase
- PostgreSQL
- Maven
- Apache pdfbox V3.02
### Architekturprinzipien
- Kein Business-Code im Controller
- Kein Datenbankzugriff im Controller
- DTO <-> Entity strikt getrennt
- Zentrale Fehlerbehandlung (@RestControllerAdvice)
- Mandantenlogik strikt außerhalb der Fachlogik
---
## 🎨 Frontend
### Technologien
- React
- Vite
- node v22.x
- TypeScript
- Material UI ab V7.x
- VS Code
Das Frontend kommuniziert ausschließlich über die REST-API
und enthält keine Businesslogik.
---
# 🗺️ KanuControl – Roadmap
Stand: **Release v0.4.0**
Status: **Core-System funktionsfähig – Übergang zu Business-Features**
---
# 📊 Gesamtfortschritt
**≈ 70 % bis v1.0**
- 🟢 Architektur stabil
- 🟢 Stammdaten vollständig
- 🟢 Veranstaltungen & Teilnehmer nahezu komplett
- 🟡 Import & Datenqualität teilweise
- 🟡 Abrechnung begonnen
- ⚪ Stabilisierung & Produktion offen
---
# Phase 0 – Fundament → Release 0.1.x ✅
**Ziel:** stabile Architektur & Stammdaten
**Status:** abgeschlossen
## Backend
- [x] Spring Boot 3 Basis
- [x] Multi-Tenant (Schema-per-Tenant)
- [x] Keycloak Integration
- [x] Liquibase Migration
- [x] Hibernate Runtime Schema Switching
## Domäne
- [x] Verein CRUD
- [x] Person CRUD
- [x] Mitglied (Join Entity)
- [x] Hauptverein-Logik
- [x] Fachliche Validierungen
## Frontend
- [x] Vereinsverwaltung
- [x] Personenverwaltung
- [x] Mitgliedszuordnung
## Import
- [x] CSV Import Personen
- [x] Mapping-Datei
- [x] Dry-Run
- [x] Fehleranzeige
- [x] Upload-Infrastruktur
---
# Phase 1 – Frontend & Nutzung → Release 0.2.x 🟡
**Ziel:** komfortable Bedienung
## UI
- [x] Navigation
- [x] Pagination
- [x] Sortierung
- [x] Filter
- [ ] Keycloak UX verbessern
## Technik
- [ ] Multipart Handling finalisieren
- [ ] Upload Limits
- [ ] Global Error Handling verbessern
---
# Phase 2 – Import & Datenqualität → Release 0.3.x 🟡
**Ziel:** robuste Massendaten
## CSV Import Mitglieder
- [x] Upload
- [x] Dry-Run
- [ ] Pflichtfeld Validierung
- [ ] Fachliche Regeln
- [ ] Dublettenprüfung
- [ ] Fehlerreport (Zeile + Ursache)
## Mapping
- [ ] Person ↔ Mitglied ↔ Verein
## Stabilität
- [ ] Idempotenter Import
---
# Phase 3 – Veranstaltungen & Teilnehmer → Release 0.4.x 🟢
**Ziel:** Veranstaltungsmanagement vollständig
## Veranstaltung
- [x] CRUD
- [x] Aktiv-Status
- [x] Leiter Domain-Regel
## Teilnehmer
- [x] Join-Entity
- [x] Rollen (L / M)
- [x] Bulk Add / Remove
- [x] Leiter immer Teilnehmer
- [x] Sortierung (Leiter zuerst)
## UI
- [x] Teilnehmerverwaltung
- [x] Dual-List Auswahl
- [x] Multi-Select stabil
- [x] SelectAll stabil
- [x] Filter Reset
## Teilnehmerliste PDF
- [x] Mehrseitig
- [x] Editierbares Formular
- [x] Alter zum Veranstaltungsbeginn
- [x] Header / Footer / Zeitraum
- [x] Checkbox Mapping (JEM/FM/BM)
- [x] Sortierung (Leiter → Verein → Name)
- [x] Dynamischer Dateiname
- [x] Download im FE
## Offen
- [ ] Anmeldeformular PDF
- [ ] Abrechnungsdeckblatt PDF
- [ ] Erhebungsbogen PDF
---
# Phase 4 – Abrechnung → Release 0.5.x 🟡
**Ziel:** finanzielle Abwicklung
## Finanzen
- [ ] Einnahmen
- [ ] Ausgaben
- [ ] Teilnehmergebühren
- [ ] Reisekosten
## Logik
- [ ] Plausibilitätsprüfungen
- [ ] Summen & Reports
- [ ] Abschlusslogik Veranstaltung
---
# Phase 5 – Dokumente & Formulare → Release 0.6.x 🟡
**Ziel:** vollständige Verwaltungsdokumente
## PDF Engine
- [x] Formular-basierte PDFs
- [x] Mehrseitig
- [x] Editierbar
- [ ] Template-System
## Dokumente
- [x] Teilnehmerliste
- [ ] Anmeldung
- [ ] Erhebungsbogen
- [ ] Abrechnung
- [ ] Reisekosten
---
# Phase 6 – Stabilisierung → Release 1.0.0 ⚪
## Qualität
- [ ] Performance
- [ ] Memory / PDF Optimierung
- [ ] Query Optimierung
## Sicherheit
- [ ] Rollen & Rechte
- [ ] Audit Logging
## Betrieb
- [ ] Monitoring
- [ ] Backup & Restore
- [ ] Deployment
- [ ] Dokumentation
---
# 🎯 Nächste Meilensteine
## → v0.5 Fokus
- Abrechnung starten
- Anmeldung PDF
- Erhebungsbogen PDF
- Import Validierung
- Fehlerreport CSV
## → v0.6 Fokus
- Alle Dokumente fertig
- Template System
- PDF Engine stabilisieren
## → v1.0 Fokus
- Stabilität
- Performance
- Security
- Produktivbetrieb
---
# 🧭 Projektstatus
**KanuControl ist jetzt ein funktionsfähiges Fachsystem.**
Die nächsten Releases bringen Vollständigkeit, Stabilität und Produktionsreife.
---
## 🌍 Open-Source & Contributions
KanuControl ist von Beginn an als Open-Source-Projekt gedacht.
Ziele:
- Nachvollziehbarer Code
- Klare Struktur
- Einsteigerfreundlich
- Fachlich verständlich (auch für Nicht-Informatiker)
Contributions sind willkommen:
- Bugfixes
- Refactorings
- Tests
- Dokumentation
- Feature-Vorschläge
Contribution-Guidelines folgen in einer späteren Version.
---
## License
This project is licensed under the **Apache License 2.0** – see the [LICENSE](LICENSE) file for details.
### Trademark and Branding
The name **KanuControl**, the KanuControl logo, and the KanuControl icon are **not covered by the Apache License** and remain the exclusive property of the project owner.
You may use, modify, and distribute the software under the terms of the Apache 2.0 license, but you may **not use the KanuControl name, logo, or icon** in redistributed or modified versions without explicit permission.
If you distribute a modified version of this software, you must remove all KanuControl branding.
For trademark permission requests contact:
**chris.schog@ekc-home.de**
---
## ❤️ Motivation
KanuControl entsteht aus der Praxis für die Praxis –
mit dem Ziel, ehrenamtliche Arbeit zu entlasten
und Verwaltungsprozesse einfacher, transparenter und sicherer zu machen.