135 lines
5.0 KiB
Markdown
135 lines
5.0 KiB
Markdown
# Projektanalyse: Meldestelle
|
|
|
|
## Projektübersicht
|
|
Dieses Projekt ist eine Kotlin Multiplatform-Anwendung, die aus drei Hauptmodulen besteht:
|
|
1. **shared** - Gemeinsam genutzte Klassen und Funktionen für alle Plattformen
|
|
2. **server** - Ktor-basierter Backend-Server mit PostgreSQL-Datenbankanbindung
|
|
3. **composeApp** - Compose Multiplatform UI-Anwendung für Desktop und Web (WASM/JS)
|
|
|
|
## Shared Modul
|
|
|
|
### Gemeinsame Klassen und Interfaces
|
|
- **Platform** (Interface)
|
|
- Eigenschaften: `name: String`
|
|
- Zweck: Abstraktion für plattformspezifische Implementierungen
|
|
|
|
- **Greeting** (Klasse)
|
|
- Methoden: `greet(): String`
|
|
- Zweck: Einfache Beispielklasse, die eine plattformspezifische Begrüßung zurückgibt
|
|
|
|
- **Constants** (Klasse)
|
|
- Aktuell leer, vermutlich für zukünftige Konstanten vorgesehen
|
|
|
|
### Datenmodelle
|
|
- **Turnier** (Data Class)
|
|
- Eigenschaften:
|
|
- `id: String` - Eindeutige ID für das Turnier
|
|
- `name: String` - Name des Turniers
|
|
- `datum: String` - Datum oder Zeitraum als Text
|
|
- `logoUrl: String?` - Optionaler Link zum Logo
|
|
- `ausschreibungUrl: String?` - Optionaler Link zur Ausschreibungs-PDF
|
|
- Annotationen: `@Serializable` für JSON-Serialisierung
|
|
|
|
- **Nennung** (Data Class)
|
|
- Eigenschaften:
|
|
- `turnierId: String` - Referenz zum zugehörigen Turnier
|
|
- `riderName: String` - Name des Reiters
|
|
- `horseName: String` - Name des Pferdes
|
|
- `email: String` - E-Mail-Adresse
|
|
- `comments: String?` - Optionale Kommentare
|
|
- Annotationen: `@Serializable` für JSON-Serialisierung
|
|
|
|
### Plattformspezifische Implementierungen
|
|
- **JVMPlatform** (Klasse, JVM-spezifisch)
|
|
- Implementiert: `Platform`
|
|
- Eigenschaften: `name = "Java ${System.getProperty("java.version")}"`
|
|
|
|
- **WasmPlatform** (Klasse, WASM/JS-spezifisch)
|
|
- Implementiert: `Platform`
|
|
- Eigenschaften: `name = "Web with Kotlin/Wasm"`
|
|
|
|
- **getPlatform()** (Expect/Actual Funktion)
|
|
- Rückgabetyp: `Platform`
|
|
- Implementierungen für JVM und WASM/JS
|
|
|
|
## Server Modul
|
|
|
|
### Hauptanwendung
|
|
- **main** (Funktion)
|
|
- Parameter: `args: Array<String>`
|
|
- Zweck: Startet den Ktor-Server mit Netty-Engine
|
|
|
|
- **module** (Erweiterungsfunktion für Application)
|
|
- Konfiguriert die Datenbank
|
|
- Definiert Routing:
|
|
- GET "/" - Zeigt eine HTML-Seite mit Turnieren aus der Datenbank
|
|
|
|
### Plugins
|
|
- **configureDatabase** (Funktion)
|
|
- Konfiguriert die Datenbankverbindung mit HikariCP
|
|
- Liest Konfiguration aus Umgebungsvariablen
|
|
- Initialisiert das Datenbankschema
|
|
|
|
### Datenbanktabellen
|
|
- **TurniereTable** (Object, erbt von Table)
|
|
- Tabellenname: "turniere"
|
|
- Spalten:
|
|
- `id: Column<String>` - Primärschlüssel
|
|
- `name: Column<String>` - Name des Turniers
|
|
- `datum: Column<String>` - Datum als Text
|
|
- `logoUrl: Column<String?>` - Optionaler Logo-URL
|
|
- `ausschreibungUrl: Column<String?>` - Optionaler Ausschreibungs-URL
|
|
|
|
### Tests
|
|
- **ApplicationTest** (Klasse)
|
|
- Testmethoden:
|
|
- `testRootRouteShowsTournamentList()` - Testet die Root-Route und Datenbankinteraktion
|
|
- Prüft HTTP-Status, HTML-Inhalt und Anzeige von Turnierdaten
|
|
|
|
## ComposeApp Modul
|
|
|
|
### UI-Komponenten
|
|
- **App** (Composable Funktion)
|
|
- Einfache UI mit Button, der bei Klick einen Begrüßungstext und das Compose-Logo anzeigt
|
|
- Verwendet die Greeting-Klasse aus dem Shared-Modul
|
|
|
|
### Plattformspezifische Implementierungen
|
|
- **Desktop** (JVM)
|
|
- Verwendet Compose for Desktop's Window API
|
|
- Setzt Fenstertitel auf "Meldestelle"
|
|
|
|
- **Web** (WASM/JS)
|
|
- Verwendet Compose für Web
|
|
- Generiert composeApp.js für Browser-Ausführung
|
|
|
|
## Datenbankintegration
|
|
- **PostgreSQL** mit **Exposed ORM**
|
|
- Verbindungspooling mit HikariCP
|
|
- Transaktionsbasierte Datenbankoperationen
|
|
- Schema-Initialisierung mit SchemaUtils
|
|
|
|
## Stärken und Verbesserungspotenzial
|
|
|
|
### Stärken
|
|
1. **Multiplatform-Architektur**: Effektive Codewiederverwendung zwischen Plattformen
|
|
2. **Datenbankintegration**: Solide Implementierung mit Connection Pooling und ORM
|
|
3. **Modularisierung**: Klare Trennung zwischen Shared, Server und UI-Code
|
|
4. **Serialisierung**: Konsistente Datenmodelle mit kotlinx.serialization
|
|
|
|
### Verbesserungspotenzial
|
|
1. **Testabdeckung**: Bisher nur grundlegende Tests für den Server
|
|
2. **Fehlerbehandlung**: Minimale Fehlerbehandlung in Datenbankoperationen
|
|
3. **Dokumentation**: Begrenzte Inline-Dokumentation
|
|
4. **Client-Server-Kommunikation**: Noch keine API-Endpunkte für CRUD-Operationen
|
|
|
|
## Zusammenfassung
|
|
Das Projekt implementiert eine Multiplatform-Anwendung für die Verwaltung von Turnieren und Nennungen. Es besteht aus:
|
|
|
|
- **5 Klassen**: Greeting, JVMPlatform, WasmPlatform, Turnier, Nennung
|
|
- **1 Interface**: Platform
|
|
- **1 Datenbanktabelle**: TurniereTable
|
|
- **4 Hauptfunktionen**: main, module, configureDatabase, App
|
|
- **1 Testklasse** mit 1 Testmethode
|
|
|
|
Die Anwendung befindet sich in einem frühen Entwicklungsstadium mit grundlegender Funktionalität für die Anzeige von Turnieren aus einer Datenbank. Die Modellklassen und Datenbankstruktur sind für zukünftige Erweiterungen vorbereitet, wie in den Kommentaren im Code angedeutet.
|