Files
afterwork/lib/data/repositories/user_repository_impl.dart
2024-09-24 00:32:20 +00:00

50 lines
2.0 KiB
Dart

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<User> 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<UserModel> 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");
}
}
}