Skip to content

[Niedrig] Code-Qualität: N+1-Abfragen, stille Fehlerunterdrückung, Wert-Validierung, toter Code #528

Description

@maltehuebner

Schweregrad: Niedrig (Code-Qualität / Performance)

Sammelissue für kleinere, nicht sicherheitskritische Verbesserungen.

1. N+1-Abfragen beim Rendern einer Stadt-Seite

CityController::showActionAbstractController::createViewModelListForStationList ruft pro Station einzeln PollutionDataFactory::createDecoratedPollutantList() auf, was je Station eine eigene Native-Query (findCurrentDataForStation, DISTINCT ON … LIMIT 10) absetzt. Bei Städten mit vielen aktiven Stationen entstehen entsprechend viele DB-Round-Trips pro Seitenaufruf.
→ Empfehlung: Aktuelldaten aller Stationen einer Stadt in einer Abfrage laden (station_id IN (...), DISTINCT ON (station_id, pollutant)) und im PHP gruppieren.

2. Stille Fehlerunterdrückung in PostgisPersister::persistValues

Der Flush fängt UniqueConstraintViolationException und verschluckt sie kommentarlos; die API-Antwort bleibt 200. Bei Batch-Inserts wird nach dem ersten Konflikt der EntityManager geschlossen und der Rest des Batches nicht mehr persistiert, ohne dass der Client das erfährt.
→ Empfehlung: Flush-Konflikte kontrolliert behandeln (z. B. Upsert oder Einzel-Inserts mit clear()), statt die Exception stumm zu schlucken.

3. Fehlende Wert-Validierung in PUT /api/value

value (keine Plausibilitätsgrenzen), date_time (beliebig, auch weit in Zukunft) und tag (nur DB-seitig auf 32 Zeichen begrenzt → längere Werte erzeugen eine DBAL-Exception) werden ungeprüft übernommen. pollutant wird immerhin gegen eine Allowlist geprüft.
→ Empfehlung: Wertebereiche/Datum serverseitig validieren, tag-Länge vor dem Persistieren prüfen.

4. Toter/unerreichbarer Code

  • assets/js/limit-violation.js referenziert eine globale exceedanceData, die nirgends definiert/eingebunden wird (kein Webpack-Entry, in keinem Template gerendert).
  • StationRepository::findIndexedByProvider (mit sprintf('s.%s', $indexedField)) ist nicht HTTP-erreichbar/ungenutzt.
    → Empfehlung: aufräumen oder dokumentieren.

Erstellt im Rahmen eines automatisierten Sicherheits-/Qualitäts-Reviews. Bitte vor Umsetzung gegenprüfen.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions