initial commit

This commit is contained in:
bastien
2026-06-28 12:29:06 +02:00
parent 79d5b012a9
commit 20f383dd62
93 changed files with 4269 additions and 1 deletions
@@ -0,0 +1,58 @@
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<List<Establishment>> fetchEstablishments() async {
final response = await _apiClient.get(ApiEndpoints.establishments);
final data = _extractList(response.data);
return data
.map((json) => Establishment.fromJson(json as Map<String, dynamic>))
.toList();
}
Future<Establishment> fetchEstablishment(String uuid) async {
final response = await _apiClient.get(ApiEndpoints.establishment(uuid));
final json = _extractObject(response.data);
return Establishment.fromJson(json);
}
List<dynamic> _extractList(dynamic data) {
if (data is List<dynamic>) return data;
if (data is Map<String, dynamic> && data['data'] is List<dynamic>) {
return data['data'] as List<dynamic>;
}
return [];
}
Map<String, dynamic> _extractObject(dynamic data) {
if (data is Map<String, dynamic>) {
if (data['data'] is Map<String, dynamic>) {
return data['data'] as Map<String, dynamic>;
}
return data;
}
throw StateError('Réponse API inattendue');
}
}
final establishmentRepositoryProvider = Provider<EstablishmentRepository>((ref) {
return EstablishmentRepository(ref.watch(apiClientProvider));
});
final establishmentsProvider = FutureProvider<List<Establishment>>((ref) async {
return ref.watch(establishmentRepositoryProvider).fetchEstablishments();
});
final establishmentDetailProvider =
FutureProvider.family<Establishment, String>((ref, uuid) async {
return ref.watch(establishmentRepositoryProvider).fetchEstablishment(uuid);
});