import 'package:isar/isar.dart'; import '../../core/database/app_database.dart'; import '../../core/database/database_service.dart'; import '../../core/utils/result.dart'; import '../models/viewed_post.dart'; class ViewedPostRepository { ViewedPostRepository(this._databaseService); final DatabaseService _databaseService; Future> markViewed(String providerId, String postId) { return _databaseService.safeWrite((isar) async { final key = ViewedPost.keyFor(providerId, postId); await isar.viewedPostEntitys.put( ViewedPostEntity.fromModel( ViewedPost( viewedKey: key, providerId: providerId, postId: postId, viewedAt: DateTime.now(), ), ), ); }); } Future> exists(String providerId, String postId) { return _databaseService.safeRead((isar) async { final entity = await isar.viewedPostEntitys .filter() .viewedKeyEqualTo(ViewedPost.keyFor(providerId, postId)) .findFirst(); return entity != null; }); } Future>> keys() { return _databaseService.safeRead((isar) async { final items = await isar.viewedPostEntitys.where().findAll(); return items.map((item) => item.viewedKey).toSet(); }); } Future>> recent() { return _databaseService.safeRead((isar) async { final items = await isar.viewedPostEntitys.where().findAll(); items.sort((a, b) => b.viewedAt.compareTo(a.viewedAt)); return items.map((item) => item.toModel()).toList(); }); } Future> deleteItem(String providerId, String postId) { return _databaseService.safeWrite((isar) async { await isar.viewedPostEntitys.deleteByViewedKey( ViewedPost.keyFor(providerId, postId), ); }); } Future> clear() { return _databaseService.safeWrite((isar) async { await isar.viewedPostEntitys.clear(); }); } }