import 'dart:convert'; import 'package:afterwork/data/datasources/user_remote_data_source.dart'; import 'package:afterwork/data/models/user_model.dart'; import 'package:afterwork/domain/entities/user.dart'; import 'package:afterwork/domain/repositories/user_repository.dart'; import 'package:http/http.dart' as http; import '../../core/constants/urls.dart'; /// Implémentation du repository des utilisateurs. /// Cette classe fait le lien entre les appels de l'application et les services distants pour les opérations sur les utilisateurs. class UserRepositoryImpl implements UserRepository { final UserRemoteDataSource remoteDataSource; /// Constructeur avec injection de la source de données distante. UserRepositoryImpl({required this.remoteDataSource}); /// Récupère un utilisateur par son ID depuis la source de données distante. @override Future getUser(String id) async { UserModel userModel = await remoteDataSource.getUser(id); return userModel; // Retourne un UserModel qui est un sous-type de User. } /// Authentifie un utilisateur par email et mot de passe (en clair, temporairement). Future authenticateUser(String email, String password) async { print("Tentative d'authentification pour l'email : $email"); try { // Requête POST avec les identifiants utilisateur pour l'authentification final response = await http.post( Uri.parse('${Urls.baseUrl}/users/authenticate'), headers: {'Content-Type': 'application/json'}, body: jsonEncode({'email': email, 'motDePasse': password}), ); print("Réponse du serveur pour l'authentification : ${response.statusCode} - ${response.body}"); if (response.statusCode == 200) { return UserModel.fromJson(jsonDecode(response.body)); } else { throw Exception("Erreur lors de l'authentification : ${response.statusCode}"); } } catch (e) { print("Erreur d'authentification : $e"); throw Exception("Erreur lors de l'authentification : $e"); } } }