meldestelle/analysis.md

5.0 KiB

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.