diff --git a/mobile/lib/interfaces/asset.interface.dart b/mobile/lib/interfaces/asset.interface.dart deleted file mode 100644 index ca9e9d64fb..0000000000 --- a/mobile/lib/interfaces/asset.interface.dart +++ /dev/null @@ -1,68 +0,0 @@ -import 'package:immich_mobile/entities/album.entity.dart'; -import 'package:immich_mobile/entities/asset.entity.dart'; -import 'package:immich_mobile/interfaces/database.interface.dart'; - -abstract interface class IAssetRepository implements IDatabaseRepository { - Future getByRemoteId(String id); - - Future getByOwnerIdChecksum(int ownerId, String checksum); - - Future> getAllByRemoteId( - Iterable ids, { - AssetState? state, - }); - - Future> getAllByOwnerIdChecksum( - List ids, - List checksums, - ); - - Future> getAll({ - required String ownerId, - AssetState? state, - AssetSort? sortBy, - int? limit, - }); - - Future> getAllLocal(); - - Future> getByAlbum( - Album album, { - Iterable notOwnedBy = const [], - String? ownerId, - AssetState? state, - AssetSort? sortBy, - }); - - Future update(Asset asset); - - Future> updateAll(List assets); - - Future deleteAllByRemoteId(List ids, {AssetState? state}); - - Future deleteByIds(List ids); - - Future> getMatches({ - required List assets, - required String ownerId, - AssetState? state, - int limit = 100, - }); - - Future upsertDuplicatedAssets(Iterable duplicatedAssets); - - Future> getAllDuplicatedAssetIds(); - - Future> getStackAssets(String stackId); - - Future clearTable(); - - Stream watchAsset(int id, {bool fireImmediately = false}); - - Future> getTrashAssets(String userId); - - Future> getRecentlyTakenAssets(String userId); - Future> getMotionAssets(String userId); -} - -enum AssetSort { checksum, ownerIdChecksum } diff --git a/mobile/lib/repositories/asset.repository.dart b/mobile/lib/repositories/asset.repository.dart index c6f8539167..4437ddfcff 100644 --- a/mobile/lib/repositories/asset.repository.dart +++ b/mobile/lib/repositories/asset.repository.dart @@ -4,19 +4,19 @@ import 'package:immich_mobile/entities/album.entity.dart'; import 'package:immich_mobile/entities/asset.entity.dart'; import 'package:immich_mobile/entities/duplicated_asset.entity.dart'; import 'package:immich_mobile/infrastructure/entities/exif.entity.dart'; -import 'package:immich_mobile/interfaces/asset.interface.dart'; import 'package:immich_mobile/providers/db.provider.dart'; import 'package:immich_mobile/repositories/database.repository.dart'; import 'package:immich_mobile/utils/hash.dart'; import 'package:isar/isar.dart'; +enum AssetSort { checksum, ownerIdChecksum } + final assetRepositoryProvider = Provider((ref) => AssetRepository(ref.watch(dbProvider))); -class AssetRepository extends DatabaseRepository implements IAssetRepository { +class AssetRepository extends DatabaseRepository { AssetRepository(super.db); - @override Future> getByAlbum( Album album, { Iterable notOwnedBy = const [], @@ -54,16 +54,13 @@ class AssetRepository extends DatabaseRepository implements IAssetRepository { return sortedQuery.findAll(); } - @override Future deleteByIds(List ids) => txn(() async { await db.assets.deleteAll(ids); await db.exifInfos.deleteAll(ids); }); - @override Future getByRemoteId(String id) => db.assets.getByRemoteId(id); - @override Future> getAllByRemoteId( Iterable ids, { AssetState? state, @@ -88,7 +85,6 @@ class AssetRepository extends DatabaseRepository implements IAssetRepository { }; } - @override Future> getAll({ required String ownerId, AssetState? state, @@ -127,13 +123,11 @@ class AssetRepository extends DatabaseRepository implements IAssetRepository { return limit == null ? query.findAll() : query.limit(limit).findAll(); } - @override Future> updateAll(List assets) async { await txn(() => db.assets.putAll(assets)); return assets; } - @override Future> getMatches({ required List assets, required String ownerId, @@ -154,42 +148,34 @@ class AssetRepository extends DatabaseRepository implements IAssetRepository { return _getMatchesImpl(query, fastHash(ownerId), assets, limit); } - @override Future update(Asset asset) async { await txn(() => asset.put(db)); return asset; } - @override Future upsertDuplicatedAssets(Iterable duplicatedAssets) => txn( () => db.duplicatedAssets .putAll(duplicatedAssets.map(DuplicatedAsset.new).toList()), ); - @override Future> getAllDuplicatedAssetIds() => db.duplicatedAssets.where().idProperty().findAll(); - @override Future getByOwnerIdChecksum(int ownerId, String checksum) => db.assets.getByOwnerIdChecksum(ownerId, checksum); - @override Future> getAllByOwnerIdChecksum( List ownerIds, List checksums, ) => db.assets.getAllByOwnerIdChecksum(ownerIds, checksums); - @override Future> getAllLocal() => db.assets.where().localIdIsNotNull().findAll(); - @override Future deleteAllByRemoteId(List ids, {AssetState? state}) => txn(() => _getAllByRemoteIdImpl(ids, state).deleteAll()); - @override Future> getStackAssets(String stackId) { return db.assets .filter() @@ -202,19 +188,16 @@ class AssetRepository extends DatabaseRepository implements IAssetRepository { .findAll(); } - @override Future clearTable() async { await txn(() async { await db.assets.clear(); }); } - @override Stream watchAsset(int id, {bool fireImmediately = false}) { return db.assets.watchObject(id, fireImmediately: fireImmediately); } - @override Future> getTrashAssets(String userId) { return db.assets .where() @@ -225,7 +208,6 @@ class AssetRepository extends DatabaseRepository implements IAssetRepository { .findAll(); } - @override Future> getRecentlyTakenAssets(String userId) { return db.assets .where() @@ -236,7 +218,6 @@ class AssetRepository extends DatabaseRepository implements IAssetRepository { .findAll(); } - @override Future> getMotionAssets(String userId) { return db.assets .where() diff --git a/mobile/lib/services/album.service.dart b/mobile/lib/services/album.service.dart index 9fc578fcff..beeb21aa96 100644 --- a/mobile/lib/services/album.service.dart +++ b/mobile/lib/services/album.service.dart @@ -14,7 +14,6 @@ import 'package:immich_mobile/entities/backup_album.entity.dart'; import 'package:immich_mobile/infrastructure/entities/user.entity.dart' as entity; import 'package:immich_mobile/interfaces/album.interface.dart'; -import 'package:immich_mobile/interfaces/asset.interface.dart'; import 'package:immich_mobile/models/albums/album_add_asset_response.model.dart'; import 'package:immich_mobile/models/albums/album_search.model.dart'; import 'package:immich_mobile/providers/infrastructure/user.provider.dart'; @@ -46,7 +45,7 @@ class AlbumService { final UserService _userService; final EntityService _entityService; final IAlbumRepository _albumRepository; - final IAssetRepository _assetRepository; + final AssetRepository _assetRepository; final BackupAlbumRepository _backupAlbumRepository; final AlbumMediaRepository _albumMediaRepository; final AlbumApiRepository _albumApiRepository; diff --git a/mobile/lib/services/asset.service.dart b/mobile/lib/services/asset.service.dart index c4cb884ed4..0500fb8924 100644 --- a/mobile/lib/services/asset.service.dart +++ b/mobile/lib/services/asset.service.dart @@ -10,7 +10,6 @@ import 'package:immich_mobile/domain/services/user.service.dart'; import 'package:immich_mobile/entities/asset.entity.dart'; import 'package:immich_mobile/entities/backup_album.entity.dart'; import 'package:immich_mobile/infrastructure/repositories/user.repository.dart'; -import 'package:immich_mobile/interfaces/asset.interface.dart'; import 'package:immich_mobile/interfaces/asset_api.interface.dart'; import 'package:immich_mobile/interfaces/asset_media.interface.dart'; import 'package:immich_mobile/models/backup/backup_candidate.model.dart'; @@ -49,7 +48,7 @@ final assetServiceProvider = Provider( class AssetService { final IAssetApiRepository _assetApiRepository; - final IAssetRepository _assetRepository; + final AssetRepository _assetRepository; final IExifInfoRepository _exifInfoRepository; final IsarUserRepository _isarUserRepository; final ETagRepository _etagRepository; diff --git a/mobile/lib/services/backup.service.dart b/mobile/lib/services/backup.service.dart index 50add6cdb2..e07f9b4580 100644 --- a/mobile/lib/services/backup.service.dart +++ b/mobile/lib/services/backup.service.dart @@ -11,7 +11,6 @@ import 'package:immich_mobile/entities/album.entity.dart'; import 'package:immich_mobile/entities/asset.entity.dart'; import 'package:immich_mobile/entities/backup_album.entity.dart'; import 'package:immich_mobile/entities/store.entity.dart'; -import 'package:immich_mobile/interfaces/asset.interface.dart'; import 'package:immich_mobile/interfaces/asset_media.interface.dart'; import 'package:immich_mobile/models/backup/backup_candidate.model.dart'; import 'package:immich_mobile/models/backup/current_upload_asset.model.dart'; @@ -52,7 +51,7 @@ class BackupService { final AlbumService _albumService; final AlbumMediaRepository _albumMediaRepository; final FileMediaRepository _fileMediaRepository; - final IAssetRepository _assetRepository; + final AssetRepository _assetRepository; final IAssetMediaRepository _assetMediaRepository; BackupService( diff --git a/mobile/lib/services/backup_verification.service.dart b/mobile/lib/services/backup_verification.service.dart index 4de5b127b6..5e3ec667da 100644 --- a/mobile/lib/services/backup_verification.service.dart +++ b/mobile/lib/services/backup_verification.service.dart @@ -12,7 +12,6 @@ import 'package:immich_mobile/domain/services/user.service.dart'; import 'package:immich_mobile/entities/asset.entity.dart'; import 'package:immich_mobile/entities/store.entity.dart'; import 'package:immich_mobile/infrastructure/utils/exif.converter.dart'; -import 'package:immich_mobile/interfaces/asset.interface.dart'; import 'package:immich_mobile/providers/infrastructure/exif.provider.dart'; import 'package:immich_mobile/providers/infrastructure/user.provider.dart'; import 'package:immich_mobile/repositories/asset.repository.dart'; @@ -25,7 +24,7 @@ import 'package:immich_mobile/utils/diff.dart'; class BackupVerificationService { final UserService _userService; final FileMediaRepository _fileMediaRepository; - final IAssetRepository _assetRepository; + final AssetRepository _assetRepository; final IExifInfoRepository _exifInfoRepository; const BackupVerificationService( diff --git a/mobile/lib/services/entity.service.dart b/mobile/lib/services/entity.service.dart index 5837a6853c..91598dcd13 100644 --- a/mobile/lib/services/entity.service.dart +++ b/mobile/lib/services/entity.service.dart @@ -2,12 +2,11 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/entities/album.entity.dart'; import 'package:immich_mobile/infrastructure/entities/user.entity.dart'; import 'package:immich_mobile/infrastructure/repositories/user.repository.dart'; -import 'package:immich_mobile/interfaces/asset.interface.dart'; import 'package:immich_mobile/providers/infrastructure/user.provider.dart'; import 'package:immich_mobile/repositories/asset.repository.dart'; class EntityService { - final IAssetRepository _assetRepository; + final AssetRepository _assetRepository; final IsarUserRepository _isarUserRepository; EntityService( this._assetRepository, diff --git a/mobile/lib/services/memory.service.dart b/mobile/lib/services/memory.service.dart index ab0e685778..6e9d017c7a 100644 --- a/mobile/lib/services/memory.service.dart +++ b/mobile/lib/services/memory.service.dart @@ -1,6 +1,5 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/extensions/translate_extensions.dart'; -import 'package:immich_mobile/interfaces/asset.interface.dart'; import 'package:immich_mobile/models/memories/memory.model.dart'; import 'package:immich_mobile/providers/api.provider.dart'; import 'package:immich_mobile/repositories/asset.repository.dart'; @@ -18,7 +17,7 @@ class MemoryService { final log = Logger("MemoryService"); final ApiService _apiService; - final IAssetRepository _assetRepository; + final AssetRepository _assetRepository; MemoryService(this._apiService, this._assetRepository); diff --git a/mobile/lib/services/person.service.dart b/mobile/lib/services/person.service.dart index c329187241..62bf101505 100644 --- a/mobile/lib/services/person.service.dart +++ b/mobile/lib/services/person.service.dart @@ -1,7 +1,6 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/domain/models/person.model.dart'; import 'package:immich_mobile/entities/asset.entity.dart'; -import 'package:immich_mobile/interfaces/asset.interface.dart'; import 'package:immich_mobile/interfaces/asset_api.interface.dart'; import 'package:immich_mobile/repositories/asset.repository.dart'; import 'package:immich_mobile/repositories/asset_api.repository.dart'; @@ -22,7 +21,7 @@ class PersonService { final Logger _log = Logger("PersonService"); final PersonApiRepository _personApiRepository; final IAssetApiRepository _assetApiRepository; - final IAssetRepository _assetRepository; + final AssetRepository _assetRepository; PersonService( this._personApiRepository, diff --git a/mobile/lib/services/search.service.dart b/mobile/lib/services/search.service.dart index bcf67889c0..5d3b08aaed 100644 --- a/mobile/lib/services/search.service.dart +++ b/mobile/lib/services/search.service.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/extensions/string_extensions.dart'; -import 'package:immich_mobile/interfaces/asset.interface.dart'; import 'package:immich_mobile/models/search/search_filter.model.dart'; import 'package:immich_mobile/entities/asset.entity.dart'; import 'package:immich_mobile/models/search/search_result.model.dart'; @@ -20,7 +19,7 @@ final searchServiceProvider = Provider( class SearchService { final ApiService _apiService; - final IAssetRepository _assetRepository; + final AssetRepository _assetRepository; final _log = Logger("SearchService"); SearchService(this._apiService, this._assetRepository); diff --git a/mobile/lib/services/stack.service.dart b/mobile/lib/services/stack.service.dart index 1ca56ff279..963169411e 100644 --- a/mobile/lib/services/stack.service.dart +++ b/mobile/lib/services/stack.service.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/entities/asset.entity.dart'; -import 'package:immich_mobile/interfaces/asset.interface.dart'; import 'package:immich_mobile/providers/api.provider.dart'; import 'package:immich_mobile/repositories/asset.repository.dart'; import 'package:immich_mobile/services/api.service.dart'; @@ -11,7 +10,7 @@ class StackService { StackService(this._api, this._assetRepository); final ApiService _api; - final IAssetRepository _assetRepository; + final AssetRepository _assetRepository; Future getStack(String stackId) async { try { diff --git a/mobile/lib/services/sync.service.dart b/mobile/lib/services/sync.service.dart index 4f8910c609..ac780817d3 100644 --- a/mobile/lib/services/sync.service.dart +++ b/mobile/lib/services/sync.service.dart @@ -14,7 +14,6 @@ import 'package:immich_mobile/extensions/collection_extensions.dart'; import 'package:immich_mobile/infrastructure/repositories/user.repository.dart'; import 'package:immich_mobile/infrastructure/repositories/user_api.repository.dart'; import 'package:immich_mobile/interfaces/album.interface.dart'; -import 'package:immich_mobile/interfaces/asset.interface.dart'; import 'package:immich_mobile/providers/app_settings.provider.dart'; import 'package:immich_mobile/providers/infrastructure/exif.provider.dart'; import 'package:immich_mobile/providers/infrastructure/user.provider.dart'; @@ -61,7 +60,7 @@ class SyncService { final AlbumMediaRepository _albumMediaRepository; final AlbumApiRepository _albumApiRepository; final IAlbumRepository _albumRepository; - final IAssetRepository _assetRepository; + final AssetRepository _assetRepository; final IExifInfoRepository _exifInfoRepository; final IsarUserRepository _isarUserRepository; final UserService _userService; diff --git a/mobile/lib/services/trash.service.dart b/mobile/lib/services/trash.service.dart index 478ad65db0..6cd7dfc641 100644 --- a/mobile/lib/services/trash.service.dart +++ b/mobile/lib/services/trash.service.dart @@ -1,7 +1,6 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/domain/services/user.service.dart'; import 'package:immich_mobile/entities/asset.entity.dart'; -import 'package:immich_mobile/interfaces/asset.interface.dart'; import 'package:immich_mobile/providers/api.provider.dart'; import 'package:immich_mobile/providers/infrastructure/user.provider.dart'; import 'package:immich_mobile/repositories/asset.repository.dart'; @@ -18,7 +17,7 @@ final trashServiceProvider = Provider((ref) { class TrashService { final ApiService _apiService; - final IAssetRepository _assetRepository; + final AssetRepository _assetRepository; final UserService _userService; const TrashService( diff --git a/mobile/test/modules/shared/sync_service_test.dart b/mobile/test/modules/shared/sync_service_test.dart index f2da3ff4fc..a78f65af67 100644 --- a/mobile/test/modules/shared/sync_service_test.dart +++ b/mobile/test/modules/shared/sync_service_test.dart @@ -10,8 +10,8 @@ import 'package:immich_mobile/entities/etag.entity.dart'; import 'package:immich_mobile/entities/store.entity.dart'; import 'package:immich_mobile/infrastructure/repositories/log.repository.dart'; import 'package:immich_mobile/infrastructure/repositories/store.repository.dart'; -import 'package:immich_mobile/interfaces/asset.interface.dart'; import 'package:immich_mobile/repositories/partner_api.repository.dart'; +import 'package:immich_mobile/repositories/asset.repository.dart'; import 'package:immich_mobile/services/sync.service.dart'; import 'package:mocktail/mocktail.dart'; @@ -240,7 +240,9 @@ void main() { [initialAssets[1].remoteId!, initialAssets[2].remoteId!], state: AssetState.remote, ), - ).thenAnswer((_) async {}); + ).thenAnswer((_) async { + return; + }); when( () => assetRepository .getAllByRemoteId(["2-1", "1-1"], state: AssetState.merged), diff --git a/mobile/test/repository.mocks.dart b/mobile/test/repository.mocks.dart index 70876d8a3b..752fd3de6d 100644 --- a/mobile/test/repository.mocks.dart +++ b/mobile/test/repository.mocks.dart @@ -1,6 +1,5 @@ import 'package:immich_mobile/domain/interfaces/exif.interface.dart'; import 'package:immich_mobile/interfaces/album.interface.dart'; -import 'package:immich_mobile/interfaces/asset.interface.dart'; import 'package:immich_mobile/interfaces/asset_api.interface.dart'; import 'package:immich_mobile/interfaces/asset_media.interface.dart'; import 'package:immich_mobile/repositories/partner_api.repository.dart'; @@ -13,11 +12,12 @@ import 'package:immich_mobile/repositories/file_media.repository.dart'; import 'package:immich_mobile/repositories/backup.repository.dart'; import 'package:immich_mobile/repositories/auth.repository.dart'; import 'package:immich_mobile/repositories/auth_api.repository.dart'; +import 'package:immich_mobile/repositories/asset.repository.dart'; import 'package:mocktail/mocktail.dart'; class MockAlbumRepository extends Mock implements IAlbumRepository {} -class MockAssetRepository extends Mock implements IAssetRepository {} +class MockAssetRepository extends Mock implements AssetRepository {} class MockBackupRepository extends Mock implements BackupAlbumRepository {}