diff --git a/mobile/lib/interfaces/archive.interface.dart b/mobile/lib/interfaces/archive.interface.dart new file mode 100644 index 0000000000..5b3bc8907a --- /dev/null +++ b/mobile/lib/interfaces/archive.interface.dart @@ -0,0 +1,7 @@ +import 'package:immich_mobile/entities/asset.entity.dart'; +import 'package:immich_mobile/interfaces/database.interface.dart'; +import 'package:isar/isar.dart'; + +abstract interface class IArchiveRepository implements IDatabaseRepository { + QueryBuilder getTimelineQuery(int userIsarId); +} diff --git a/mobile/lib/repositories/archive.repository.dart b/mobile/lib/repositories/archive.repository.dart new file mode 100644 index 0000000000..fe3e3e0bd2 --- /dev/null +++ b/mobile/lib/repositories/archive.repository.dart @@ -0,0 +1,25 @@ +import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:immich_mobile/entities/asset.entity.dart'; +import 'package:immich_mobile/interfaces/archive.interface.dart'; +import 'package:immich_mobile/providers/db.provider.dart'; +import 'package:immich_mobile/repositories/database.repository.dart'; +import 'package:isar/isar.dart'; + +final archiveRepositoryProvider = + Provider((ref) => ArchiveRepository(ref.watch(dbProvider))); + +class ArchiveRepository extends DatabaseRepository + implements IArchiveRepository { + ArchiveRepository(super.db); + + @override + QueryBuilder getTimelineQuery(int userIsarId) { + return db.assets + .where() + .ownerIdEqualToAnyChecksum(userIsarId) + .filter() + .isArchivedEqualTo(true) + .isTrashedEqualTo(false) + .sortByFileCreatedAtDesc(); + } +} diff --git a/mobile/lib/services/archive.service.dart b/mobile/lib/services/archive.service.dart new file mode 100644 index 0000000000..b5bcc3b071 --- /dev/null +++ b/mobile/lib/services/archive.service.dart @@ -0,0 +1,15 @@ +import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:immich_mobile/repositories/archive.repository.dart'; + +final archiveServiceProvider = Provider((ref) { + return ArchiveService(ref.watch(archiveRepositoryProvider)); +}); + +class ArchiveService { + final ArchiveRepository repository; + ArchiveService(this.repository); + + getTimelineQuery(int userIsarId) { + return repository.getTimelineQuery(userIsarId); + } +}