77 lines
2.4 KiB
Dart
77 lines
2.4 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:http/http.dart' as http;
|
|
import 'package:p_tits_pas/models/couple_garde.dart';
|
|
import 'package:p_tits_pas/services/api/api_config.dart';
|
|
import 'package:p_tits_pas/services/api/tokenService.dart';
|
|
|
|
/// Accès API aux couples de garde du parent connecté — tickets #167 / #168.
|
|
/// - GET /parents/me/couples-garde
|
|
/// - PUT /parents/me/couples-garde/courant { couple_id }
|
|
class CoupleGardeService {
|
|
static Future<Map<String, String>> _headers() async {
|
|
final token = await TokenService.getToken();
|
|
return token != null
|
|
? ApiConfig.authHeaders(token)
|
|
: Map<String, String>.from(ApiConfig.headers);
|
|
}
|
|
|
|
static String _extractError(String body, String fallback) {
|
|
try {
|
|
final decoded = jsonDecode(body);
|
|
if (decoded is Map<String, dynamic>) {
|
|
final message = decoded['message'];
|
|
if (message is String && message.trim().isNotEmpty) {
|
|
return message;
|
|
}
|
|
if (message is Map && message['message'] is String) {
|
|
return message['message'] as String;
|
|
}
|
|
}
|
|
} catch (_) {}
|
|
return fallback;
|
|
}
|
|
|
|
/// Liste les couples de garde et le couple courant du parent connecté.
|
|
static Future<CouplesGardeResponse> getCouplesGarde() async {
|
|
final response = await http.get(
|
|
Uri.parse('${ApiConfig.baseUrl}${ApiConfig.parentsCouplesGarde}'),
|
|
headers: await _headers(),
|
|
);
|
|
|
|
if (response.statusCode != 200) {
|
|
throw Exception(
|
|
_extractError(response.body, 'Erreur chargement des couples de garde'),
|
|
);
|
|
}
|
|
|
|
final decoded = jsonDecode(response.body);
|
|
return CouplesGardeResponse.fromJson(
|
|
Map<String, dynamic>.from(decoded as Map),
|
|
);
|
|
}
|
|
|
|
/// Persiste le couple courant (préférence utilisateur) et renvoie la liste
|
|
/// à jour.
|
|
static Future<CouplesGardeResponse> definirCoupleCourant(
|
|
String coupleId,
|
|
) async {
|
|
final response = await http.put(
|
|
Uri.parse('${ApiConfig.baseUrl}${ApiConfig.parentsCoupleGardeCourant}'),
|
|
headers: await _headers(),
|
|
body: jsonEncode({'couple_id': coupleId}),
|
|
);
|
|
|
|
if (response.statusCode != 200) {
|
|
throw Exception(
|
|
_extractError(response.body, 'Erreur sélection du couple de garde'),
|
|
);
|
|
}
|
|
|
|
final decoded = jsonDecode(response.body);
|
|
return CouplesGardeResponse.fromJson(
|
|
Map<String, dynamic>.from(decoded as Map),
|
|
);
|
|
}
|
|
}
|