diff --git a/mobile/lib/interfaces/album.interface.dart b/mobile/lib/interfaces/album.interface.dart deleted file mode 100644 index c1696eda80..0000000000 --- a/mobile/lib/interfaces/album.interface.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:immich_mobile/domain/models/user.model.dart'; -import 'package:immich_mobile/entities/album.entity.dart'; -import 'package:immich_mobile/entities/asset.entity.dart'; -import 'package:immich_mobile/interfaces/database.interface.dart'; -import 'package:immich_mobile/models/albums/album_search.model.dart'; - -abstract interface class IAlbumRepository implements IDatabaseRepository { - Future create(Album album); - - Future get(int id); - - Future getByName( - String name, { - bool? shared, - bool? remote, - bool? owner, - }); - - Future> getAll({ - bool? shared, - bool? remote, - int? ownerId, - AlbumSort? sortBy, - }); - - Future update(Album album); - - Future delete(int albumId); - - Future deleteAllLocal(); - - Future count({bool? local}); - - Future addUsers(Album album, List users); - - Future removeUsers(Album album, List users); - - Future addAssets(Album album, List assets); - - Future removeAssets(Album album, List assets); - - Future recalculateMetadata(Album album); - - Future> search(String searchTerm, QuickFilterMode filterMode); - - Stream> watchRemoteAlbums(); - - Stream> watchLocalAlbums(); - - Stream watchAlbum(int id); - - Future clearTable(); -} - -enum AlbumSort { remoteId, localId } diff --git a/mobile/lib/repositories/album.repository.dart b/mobile/lib/repositories/album.repository.dart index 8c50c54382..b555f918b4 100644 --- a/mobile/lib/repositories/album.repository.dart +++ b/mobile/lib/repositories/album.repository.dart @@ -6,20 +6,20 @@ import 'package:immich_mobile/entities/asset.entity.dart'; import 'package:immich_mobile/entities/store.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/models/albums/album_search.model.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 AlbumSort { remoteId, localId } + final albumRepositoryProvider = Provider((ref) => AlbumRepository(ref.watch(dbProvider))); -class AlbumRepository extends DatabaseRepository implements IAlbumRepository { +class AlbumRepository extends DatabaseRepository { AlbumRepository(super.db); - @override Future count({bool? local}) { final baseQuery = db.albums.where(); final QueryBuilder query = switch (local) { @@ -30,10 +30,8 @@ class AlbumRepository extends DatabaseRepository implements IAlbumRepository { return query.count(); } - @override Future create(Album album) => txn(() => db.albums.store(album)); - @override Future getByName( String name, { bool? shared, @@ -58,13 +56,10 @@ class AlbumRepository extends DatabaseRepository implements IAlbumRepository { return query.findFirst(); } - @override Future update(Album album) => txn(() => db.albums.store(album)); - @override Future delete(int albumId) => txn(() => db.albums.delete(albumId)); - @override Future> getAll({ bool? shared, bool? remote, @@ -96,23 +91,18 @@ class AlbumRepository extends DatabaseRepository implements IAlbumRepository { return query.findAll(); } - @override Future get(int id) => db.albums.get(id); - @override Future removeUsers(Album album, List users) => txn( () => album.sharedUsers.update(unlink: users.map(entity.User.fromDto)), ); - @override Future addAssets(Album album, List assets) => txn(() => album.assets.update(link: assets)); - @override Future removeAssets(Album album, List assets) => txn(() => album.assets.update(unlink: assets)); - @override Future recalculateMetadata(Album album) async { album.startDate = await album.assets.filter().fileCreatedAtProperty().min(); album.endDate = await album.assets.filter().fileCreatedAtProperty().max(); @@ -121,15 +111,12 @@ class AlbumRepository extends DatabaseRepository implements IAlbumRepository { return album; } - @override Future addUsers(Album album, List users) => txn(() => album.sharedUsers.update(link: users.map(entity.User.fromDto))); - @override Future deleteAllLocal() => txn(() => db.albums.where().localIdIsNotNull().deleteAll()); - @override Future> search( String searchTerm, QuickFilterMode filterMode, @@ -152,24 +139,20 @@ class AlbumRepository extends DatabaseRepository implements IAlbumRepository { return await query.findAll(); } - @override Future clearTable() async { await txn(() async { await db.albums.clear(); }); } - @override Stream> watchRemoteAlbums() { return db.albums.where().remoteIdIsNotNull().watch(); } - @override Stream> watchLocalAlbums() { return db.albums.where().localIdIsNotNull().watch(); } - @override Stream watchAlbum(int id) { return db.albums.watchObject(id, fireImmediately: true); } diff --git a/mobile/lib/services/album.service.dart b/mobile/lib/services/album.service.dart index beeb21aa96..cc1f56f579 100644 --- a/mobile/lib/services/album.service.dart +++ b/mobile/lib/services/album.service.dart @@ -13,7 +13,6 @@ import 'package:immich_mobile/entities/asset.entity.dart'; 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/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'; @@ -44,7 +43,7 @@ class AlbumService { final SyncService _syncService; final UserService _userService; final EntityService _entityService; - final IAlbumRepository _albumRepository; + final AlbumRepository _albumRepository; final AssetRepository _assetRepository; final BackupAlbumRepository _backupAlbumRepository; final AlbumMediaRepository _albumMediaRepository; diff --git a/mobile/lib/services/sync.service.dart b/mobile/lib/services/sync.service.dart index ac780817d3..cdf7340958 100644 --- a/mobile/lib/services/sync.service.dart +++ b/mobile/lib/services/sync.service.dart @@ -13,7 +13,6 @@ import 'package:immich_mobile/entities/etag.entity.dart'; 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/providers/app_settings.provider.dart'; import 'package:immich_mobile/providers/infrastructure/exif.provider.dart'; import 'package:immich_mobile/providers/infrastructure/user.provider.dart'; @@ -59,7 +58,7 @@ class SyncService { final EntityService _entityService; final AlbumMediaRepository _albumMediaRepository; final AlbumApiRepository _albumApiRepository; - final IAlbumRepository _albumRepository; + final AlbumRepository _albumRepository; final AssetRepository _assetRepository; final IExifInfoRepository _exifInfoRepository; final IsarUserRepository _isarUserRepository; diff --git a/mobile/test/repository.mocks.dart b/mobile/test/repository.mocks.dart index 6ab8bb2836..e0a12e97cf 100644 --- a/mobile/test/repository.mocks.dart +++ b/mobile/test/repository.mocks.dart @@ -1,5 +1,4 @@ import 'package:immich_mobile/domain/interfaces/exif.interface.dart'; -import 'package:immich_mobile/interfaces/album.interface.dart'; import 'package:immich_mobile/repositories/partner_api.repository.dart'; import 'package:immich_mobile/repositories/album_media.repository.dart'; import 'package:immich_mobile/repositories/album_api.repository.dart'; @@ -12,10 +11,11 @@ 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:immich_mobile/repositories/asset_media.repository.dart'; +import 'package:immich_mobile/repositories/album.repository.dart'; import 'package:immich_mobile/repositories/asset_api.repository.dart'; import 'package:mocktail/mocktail.dart'; -class MockAlbumRepository extends Mock implements IAlbumRepository {} +class MockAlbumRepository extends Mock implements AlbumRepository {} class MockAssetRepository extends Mock implements AssetRepository {}