whereNotNull('longitude') ->whereHas('sources.releves') ->with([ 'sources' => function ($q) { $q->withCount('releves') ->select('id', 'nom', 'lieu_id', 'status', 'annee_debut', 'annee_fin') ->orderBy('nom'); }, ]) ->get() ->map(function (Lieu $lieu) { $relevesTotal = $lieu->sources->sum('releves_count'); return [ 'id' => $lieu->id, 'nom' => $lieu->nom_long ?? $lieu->nom, 'lat' => (float) $lieu->latitude, 'lng' => (float) $lieu->longitude, 'sources_count' => $lieu->sources->count(), 'releves_count' => $relevesTotal, 'sources' => $lieu->sources->map(fn ($s) => [ 'id' => $s->id, 'nom' => $s->nom, 'releves_count' => $s->releves_count, 'status' => $s->status->label(), 'status_value' => $s->status->value, 'annees' => $s->annee_debut ? ($s->annee_debut === $s->annee_fin || ! $s->annee_fin ? (string) $s->annee_debut : "{$s->annee_debut}–{$s->annee_fin}") : null, ]), ]; }); return response()->json($lieux); } }