import 'package:injectable/injectable.dart'; import 'package:unionflow_mobile_apps/core/network/api_client.dart'; import '../../domain/entities/feed_item.dart'; @lazySingleton class FeedRepository { final ApiClient _apiClient; FeedRepository(this._apiClient); /// Récupère le flux d'actualité depuis le backend Quarkus. /// Vérifier la route backend (ex. /api/feed ou /api/posts) et adapter _feedPath si besoin. static const String _feedPath = '/api/feed'; Future> getFeed({int page = 0, int size = 10}) async { try { final response = await _apiClient.get( _feedPath, queryParameters: {'page': page, 'size': size}, ); final List data = response.data['content'] ?? response.data; // Gère la pagination Spring/Quarkus return data.map((json) { // Mapping manuel basique depuis le JSON API vers l'entité locale // À ajuster selon la structure JSON exacte renvoyée par l'API return FeedItem( id: json['id']?.toString() ?? '', type: FeedItemType.post, // Par défaut, ou selon json['type'] authorName: json['authorName'] ?? json['author']?['name'] ?? 'Auteur inconnu', authorAvatarUrl: json['authorAvatarUrl'] ?? json['author']?['avatarUrl'], createdAt: json['createdAt'] != null ? DateTime.parse(json['createdAt']) : DateTime.now(), content: json['content'] ?? '', likesCount: json['likesCount'] ?? 0, commentsCount: json['commentsCount'] ?? 0, isLikedByMe: json['isLikedByMe'] ?? false, ); }).toList(); } catch (e) { // Propagation de l'erreur pour la gestion globale throw Exception('Erreur lors de la récupération du flux externe: $e'); } } }