Skip to content

Multi-tenant web application for managing KJFP funding workflows for canoe clubs and associations (Spring Boot, PostgreSQL, Keycloak)

License

Notifications You must be signed in to change notification settings

cschog/KanuControl

Repository files navigation

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

  • Spring Boot 3 Basis
  • Multi-Tenant (Schema-per-Tenant)
  • Keycloak Integration
  • Liquibase Migration
  • Hibernate Runtime Schema Switching

Domäne

  • Verein CRUD
  • Person CRUD
  • Mitglied (Join Entity)
  • Hauptverein-Logik
  • Fachliche Validierungen

Frontend

  • Vereinsverwaltung
  • Personenverwaltung
  • Mitgliedszuordnung

Import

  • CSV Import Personen
  • Mapping-Datei
  • Dry-Run
  • Fehleranzeige
  • Upload-Infrastruktur

Phase 1 – Frontend & Nutzung → Release 0.2.x 🟡

Ziel: komfortable Bedienung

UI

  • Navigation
  • Pagination
  • Sortierung
  • 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

  • Upload
  • 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

  • CRUD
  • Aktiv-Status
  • Leiter Domain-Regel

Teilnehmer

  • Join-Entity
  • Rollen (L / M)
  • Bulk Add / Remove
  • Leiter immer Teilnehmer
  • Sortierung (Leiter zuerst)

UI

  • Teilnehmerverwaltung
  • Dual-List Auswahl
  • Multi-Select stabil
  • SelectAll stabil
  • Filter Reset

Teilnehmerliste PDF

  • Mehrseitig
  • Editierbares Formular
  • Alter zum Veranstaltungsbeginn
  • Header / Footer / Zeitraum
  • Checkbox Mapping (JEM/FM/BM)
  • Sortierung (Leiter → Verein → Name)
  • Dynamischer Dateiname
  • 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

  • Formular-basierte PDFs
  • Mehrseitig
  • Editierbar
  • Template-System

Dokumente

  • 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 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.

About

Multi-tenant web application for managing KJFP funding workflows for canoe clubs and associations (Spring Boot, PostgreSQL, Keycloak)

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors