import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../core/api/api_client.dart'; import '../../../core/api/api_endpoints.dart'; import '../domain/establishment.dart'; /// Dépôt de données pour les établissements et machines. class EstablishmentRepository { EstablishmentRepository(this._apiClient); final ApiClient _apiClient; Future> fetchEstablishments() async { final response = await _apiClient.get(ApiEndpoints.establishments); final data = _extractList(response.data); return data .map((json) => Establishment.fromJson(json as Map)) .toList(); } Future fetchEstablishment(String uuid) async { final response = await _apiClient.get(ApiEndpoints.establishment(uuid)); final json = _extractObject(response.data); return Establishment.fromJson(json); } List _extractList(dynamic data) { if (data is List) return data; if (data is Map && data['data'] is List) { return data['data'] as List; } return []; } Map _extractObject(dynamic data) { if (data is Map) { if (data['data'] is Map) { return data['data'] as Map; } return data; } throw StateError('Réponse API inattendue'); } } final establishmentRepositoryProvider = Provider((ref) { return EstablishmentRepository(ref.watch(apiClientProvider)); }); final establishmentsProvider = FutureProvider>((ref) async { return ref.watch(establishmentRepositoryProvider).fetchEstablishments(); }); final establishmentDetailProvider = FutureProvider.family((ref, uuid) async { return ref.watch(establishmentRepositoryProvider).fetchEstablishment(uuid); });