# FeatureRatingSystem ## Übersicht Das FeatureRatingSystem enthält Komponenten zur detaillierten Anzeige von gemeldeten Straßenschäden. Es ermöglicht Nutzern, Informationen und Fotos zu einem Schaden einzusehen und diesen über ein Community-Rating-System zu validieren. --- ## Methoden ## 1. FeatureInfoDialog `Composable Function` Ein modaler UI-Dialog, der zur Anzeige von Objektdaten eines `ArcGISFeature` dient. ### Zweck Visualisierung von Sachdaten (Attribute), das asynchrone Laden von Bildanhängen und die Bereitstellung einer Schnittstelle für Nutzerinteraktionen (Bewertungen). ### Parameter | Parameter | Typ | Beschreibung | | :--- | :--- | :--- | | `feature` | `ArcGISFeature?` | Das ArcGIS-Objekt, dessen Daten angezeigt werden. | | `onDismiss` | `() -> Unit` | Callback zum Schließen des Dialogs. | | `onRate` | `(ArcGISFeature, Boolean) -> Unit` | Callback, der ausgelöst wird, wenn ein Nutzer eine Bewertung abgibt. | ### Interne Zustandsvariablen (State) * **`photoBitmaps`** (`List`): Speichert die dekodierten Bilder, die aus den Feature-Attachments geladen wurden. * **`isLoadingPhotos`** (`Boolean`): Statusindikator, der den Ladevorgang der Anhänge steuert. ### Funktionsweise 1. **Initialisierung**: Beim Start (`LaunchedEffect`) wird geprüft, ob das Feature vollständig geladen ist. 2. **Attachment-Download**: Die Funktion ruft `fetchAttachments()` auf. Für jeden Anhang werden die Rohdaten (`fetchData`) geladen. 3. **Bildverarbeitung**: Die Byte-Arrays werden mittels `BitmapFactory` dekodiert und in `ImageBitmap` konvertiert, um sie in Compose anzuzeigen. 4. **UI-Rendering**: Die Attribute `Typ` und `Beschreibung` werden zusammen mit den Bildern in einer scrollbaren `Card` dargestellt. --- ## 2. updateFeatureRating `Extension Function (suspend)` Eine Erweiterungsfunktion für das `MapViewModel`, die die Geschäftslogik für das Bewertungssystem kapselt. ### Zweck Persistente Aktualisierung des Community-Zählers eines Schadens in der ArcGIS Online Feature Layer Table. ### Parameter | Parameter | Typ | Beschreibung | | :--- | :--- | :--- | | `feature` | `ArcGISFeature` | Das zu bewertende Feature-Objekt. | | `isPositive` | `Boolean` | `true` für eine Bestätigung (+1), `false` für eine Abmilderung (-1). | | `context` | `Context` | Erforderlich für die Anzeige von UI-Feedback (Toasts). | ### Logik-Ablauf 1. **Wertberechnung**: Extrahiert das Attribut `communitycounter`. Erhöht oder verringert den Wert, wobei ein Minimum von `0` sichergestellt wird. 2. **Lokale Aktualisierung**: Setzt den neuen Wert im Attribut-Dictionary des Features und ruft `updateFeature()` auf der `ServiceFeatureTable` auf. 3. **Remote-Synchronisation**: Mittels `applyEdits()` werden die Änderungen an den ArcGIS-Server gesendet. 4. **Feedback**: Informiert den Nutzer via `Toast` und `SnackBar` über den Erfolg oder Fehler der Operation. ### Datenbank-Attribute (ArcGIS Schema) * **`Typ`**: Identifikator für die Schadensart. * **`Beschreibung`**: Optionaler Freitext des Erstellers. * **`communitycounter`**: Ganzzahliger Wert zur Speicherung der Community-Validierungen. --- ## Fehlerbehandlung * **Bild-Dekodierung**: Schlägt das Laden eines Bildes fehl, wird der Fehler geloggt, aber der Dialog bleibt funktionsfähig. * **Netzwerk-Synchronisation**: Bei Fehlern während `applyEdits` wird eine Fehlermeldung ausgegeben, um den Nutzer über mangelnde Konnektivität zu informieren.