news page
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
/// Repository Implementation: News Repository
|
||||
///
|
||||
/// Concrete implementation of the NewsRepository interface.
|
||||
/// Coordinates between local and remote data sources.
|
||||
library;
|
||||
|
||||
import 'package:worker/features/news/data/datasources/news_local_datasource.dart';
|
||||
import 'package:worker/features/news/domain/entities/news_article.dart';
|
||||
import 'package:worker/features/news/domain/repositories/news_repository.dart';
|
||||
|
||||
/// News Repository Implementation
|
||||
class NewsRepositoryImpl implements NewsRepository {
|
||||
/// Local data source
|
||||
final NewsLocalDataSource localDataSource;
|
||||
|
||||
/// Constructor
|
||||
NewsRepositoryImpl({required this.localDataSource});
|
||||
|
||||
@override
|
||||
Future<List<NewsArticle>> getAllArticles() async {
|
||||
try {
|
||||
final models = await localDataSource.getAllArticles();
|
||||
final entities = models.map((model) => model.toEntity()).toList();
|
||||
|
||||
// Sort by published date (newest first)
|
||||
entities.sort((a, b) => b.publishedDate.compareTo(a.publishedDate));
|
||||
|
||||
return entities;
|
||||
} catch (e) {
|
||||
print('[NewsRepository] Error getting articles: $e');
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<NewsArticle?> getFeaturedArticle() async {
|
||||
try {
|
||||
final model = await localDataSource.getFeaturedArticle();
|
||||
return model?.toEntity();
|
||||
} catch (e) {
|
||||
print('[NewsRepository] Error getting featured article: $e');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<NewsArticle>> getArticlesByCategory(NewsCategory category) async {
|
||||
try {
|
||||
final categoryString = category.filterName;
|
||||
final models = await localDataSource.getArticlesByCategory(
|
||||
categoryString,
|
||||
);
|
||||
|
||||
final entities = models.map((model) => model.toEntity()).toList();
|
||||
|
||||
// Sort by published date (newest first)
|
||||
entities.sort((a, b) => b.publishedDate.compareTo(a.publishedDate));
|
||||
|
||||
return entities;
|
||||
} catch (e) {
|
||||
print('[NewsRepository] Error getting articles by category: $e');
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<NewsArticle?> getArticleById(String articleId) async {
|
||||
try {
|
||||
final model = await localDataSource.getArticleById(articleId);
|
||||
return model?.toEntity();
|
||||
} catch (e) {
|
||||
print('[NewsRepository] Error getting article by id: $e');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<NewsArticle>> refreshArticles() async {
|
||||
try {
|
||||
await localDataSource.clearCache();
|
||||
return getAllArticles();
|
||||
} catch (e) {
|
||||
print('[NewsRepository] Error refreshing articles: $e');
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user