5.0 KiB
Projektanalyse: Meldestelle
Projektübersicht
Dieses Projekt ist eine Kotlin Multiplatform-Anwendung, die aus drei Hauptmodulen besteht:
- shared - Gemeinsam genutzte Klassen und Funktionen für alle Plattformen
- server - Ktor-basierter Backend-Server mit PostgreSQL-Datenbankanbindung
- 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
- Eigenschaften:
-
Greeting (Klasse)
- Methoden:
greet(): String - Zweck: Einfache Beispielklasse, die eine plattformspezifische Begrüßung zurückgibt
- Methoden:
-
Constants (Klasse)
- Aktuell leer, vermutlich für zukünftige Konstanten vorgesehen
Datenmodelle
-
Turnier (Data Class)
- Eigenschaften:
id: String- Eindeutige ID für das Turniername: String- Name des Turniersdatum: String- Datum oder Zeitraum als TextlogoUrl: String?- Optionaler Link zum LogoausschreibungUrl: String?- Optionaler Link zur Ausschreibungs-PDF
- Annotationen:
@Serializablefür JSON-Serialisierung
- Eigenschaften:
-
Nennung (Data Class)
- Eigenschaften:
turnierId: String- Referenz zum zugehörigen TurnierriderName: String- Name des ReitershorseName: String- Name des Pferdesemail: String- E-Mail-Adressecomments: String?- Optionale Kommentare
- Annotationen:
@Serializablefür JSON-Serialisierung
- Eigenschaften:
Plattformspezifische Implementierungen
-
JVMPlatform (Klasse, JVM-spezifisch)
- Implementiert:
Platform - Eigenschaften:
name = "Java ${System.getProperty("java.version")}"
- Implementiert:
-
WasmPlatform (Klasse, WASM/JS-spezifisch)
- Implementiert:
Platform - Eigenschaften:
name = "Web with Kotlin/Wasm"
- Implementiert:
-
getPlatform() (Expect/Actual Funktion)
- Rückgabetyp:
Platform - Implementierungen für JVM und WASM/JS
- Rückgabetyp:
Server Modul
Hauptanwendung
-
main (Funktion)
- Parameter:
args: Array<String> - Zweck: Startet den Ktor-Server mit Netty-Engine
- Parameter:
-
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üsselname: Column<String>- Name des Turniersdatum: Column<String>- Datum als TextlogoUrl: Column<String?>- Optionaler Logo-URLausschreibungUrl: 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
- Testmethoden:
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
- Multiplatform-Architektur: Effektive Codewiederverwendung zwischen Plattformen
- Datenbankintegration: Solide Implementierung mit Connection Pooling und ORM
- Modularisierung: Klare Trennung zwischen Shared, Server und UI-Code
- Serialisierung: Konsistente Datenmodelle mit kotlinx.serialization
Verbesserungspotenzial
- Testabdeckung: Bisher nur grundlegende Tests für den Server
- Fehlerbehandlung: Minimale Fehlerbehandlung in Datenbankoperationen
- Dokumentation: Begrenzte Inline-Dokumentation
- 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.