Integration fonctionnalités V1 ( resas + gestion machines
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import 'package:dio/dio.dart';
|
||||
|
||||
/// Helpers pour parser les réponses JSON de l'API Laverie (`success` + `data`).
|
||||
abstract final class ApiResponse { static Map<String, dynamic> payload(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');
|
||||
}
|
||||
|
||||
static List<dynamic> list(dynamic data, String key) {
|
||||
final value = payload(data)[key];
|
||||
if (value is List<dynamic>) {
|
||||
return value;
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
static Map<String, dynamic> object(dynamic data, String key) {
|
||||
final value = payload(data)[key];
|
||||
if (value is Map<String, dynamic>) {
|
||||
return value;
|
||||
}
|
||||
throw StateError('Champ API "$key" introuvable ou invalide');
|
||||
}
|
||||
|
||||
static String errorMessage(DioException error, {String fallback = 'Erreur réseau'}) {
|
||||
final response = error.response;
|
||||
if (response?.data is Map<String, dynamic>) {
|
||||
final data = response!.data as Map<String, dynamic>;
|
||||
final message = data['message'];
|
||||
if (message is String && message.isNotEmpty) {
|
||||
return _sanitize(message);
|
||||
}
|
||||
}
|
||||
|
||||
return switch (error.type) {
|
||||
DioExceptionType.connectionTimeout ||
|
||||
DioExceptionType.sendTimeout ||
|
||||
DioExceptionType.receiveTimeout =>
|
||||
'Délai d\'attente dépassé',
|
||||
DioExceptionType.connectionError =>
|
||||
'Connexion impossible',
|
||||
_ => fallback,
|
||||
};
|
||||
}
|
||||
|
||||
/// Masque les détails SQL techniques pour l'utilisateur.
|
||||
static String _sanitize(String message) {
|
||||
if (message.contains('SQLSTATE') || message.contains('SQL:') || message.contains('must be of type')) {
|
||||
return 'Erreur serveur — réessayez dans un instant';
|
||||
}
|
||||
return message;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user