diff --git a/mobile/lib/constants/enums.dart b/mobile/lib/constants/enums.dart index a691263a1e..4999c48660 100644 --- a/mobile/lib/constants/enums.dart +++ b/mobile/lib/constants/enums.dart @@ -10,3 +10,5 @@ enum TextSearchType { } enum AssetVisibilityEnum { timeline, hidden, archive, locked } + +enum SortUserBy { id } diff --git a/mobile/lib/domain/interfaces/sync_stream.interface.dart b/mobile/lib/domain/interfaces/sync_stream.interface.dart deleted file mode 100644 index 5f61d6b52f..0000000000 --- a/mobile/lib/domain/interfaces/sync_stream.interface.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:immich_mobile/domain/interfaces/db.interface.dart'; -import 'package:openapi/api.dart'; - -abstract interface class ISyncStreamRepository implements IDatabaseRepository { - Future updateUsersV1(Iterable data); - Future deleteUsersV1(Iterable data); - - Future updatePartnerV1(Iterable data); - Future deletePartnerV1(Iterable data); - - Future updateAssetsV1(Iterable data); - Future deleteAssetsV1(Iterable data); - Future updateAssetsExifV1(Iterable data); - - Future updatePartnerAssetsV1(Iterable data); - Future deletePartnerAssetsV1(Iterable data); - Future updatePartnerAssetsExifV1(Iterable data); -} diff --git a/mobile/lib/domain/interfaces/user.interface.dart b/mobile/lib/domain/interfaces/user.interface.dart deleted file mode 100644 index 05176731fd..0000000000 --- a/mobile/lib/domain/interfaces/user.interface.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:immich_mobile/domain/interfaces/db.interface.dart'; -import 'package:immich_mobile/domain/models/user.model.dart'; - -abstract interface class IUserRepository implements IDatabaseRepository { - Future insert(UserDto user); - - Future getByUserId(String id); - - Future> getByUserIds(List ids); - - Future> getAll({SortUserBy? sortBy}); - - Future updateAll(List users); - - Future update(UserDto user); - - Future delete(List ids); - - Future deleteAll(); -} - -enum SortUserBy { id } diff --git a/mobile/lib/domain/interfaces/user_api.interface.dart b/mobile/lib/domain/interfaces/user_api.interface.dart deleted file mode 100644 index 9889654a52..0000000000 --- a/mobile/lib/domain/interfaces/user_api.interface.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'dart:typed_data'; - -import 'package:immich_mobile/domain/models/user.model.dart'; - -abstract interface class IUserApiRepository { - Future getMyUser(); - - Future> getAll(); - - /// Saves the [data] in the server and uses it as the current users profile image - Future createProfileImage({ - required String name, - required Uint8List data, - }); -} diff --git a/mobile/lib/domain/services/sync_stream.service.dart b/mobile/lib/domain/services/sync_stream.service.dart index 99d7de6cc5..f8c76b9543 100644 --- a/mobile/lib/domain/services/sync_stream.service.dart +++ b/mobile/lib/domain/services/sync_stream.service.dart @@ -1,8 +1,8 @@ import 'dart:async'; import 'package:immich_mobile/domain/interfaces/sync_api.interface.dart'; -import 'package:immich_mobile/domain/interfaces/sync_stream.interface.dart'; import 'package:immich_mobile/domain/models/sync_event.model.dart'; +import 'package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart'; import 'package:logging/logging.dart'; import 'package:openapi/api.dart'; @@ -10,12 +10,12 @@ class SyncStreamService { final Logger _logger = Logger('SyncStreamService'); final ISyncApiRepository _syncApiRepository; - final ISyncStreamRepository _syncStreamRepository; + final SyncStreamRepository _syncStreamRepository; final bool Function()? _cancelChecker; SyncStreamService({ required ISyncApiRepository syncApiRepository, - required ISyncStreamRepository syncStreamRepository, + required SyncStreamRepository syncStreamRepository, bool Function()? cancelChecker, }) : _syncApiRepository = syncApiRepository, _syncStreamRepository = syncStreamRepository, diff --git a/mobile/lib/domain/services/user.service.dart b/mobile/lib/domain/services/user.service.dart index 6410d4ef5f..14fed9fb93 100644 --- a/mobile/lib/domain/services/user.service.dart +++ b/mobile/lib/domain/services/user.service.dart @@ -1,24 +1,24 @@ import 'dart:async'; import 'dart:typed_data'; -import 'package:immich_mobile/domain/interfaces/user.interface.dart'; -import 'package:immich_mobile/domain/interfaces/user_api.interface.dart'; import 'package:immich_mobile/domain/models/store.model.dart'; import 'package:immich_mobile/domain/models/user.model.dart'; import 'package:immich_mobile/domain/services/store.service.dart'; +import 'package:immich_mobile/infrastructure/repositories/user.repository.dart'; +import 'package:immich_mobile/infrastructure/repositories/user_api.repository.dart'; import 'package:logging/logging.dart'; class UserService { final Logger _log = Logger("UserService"); - final IUserRepository _userRepository; - final IUserApiRepository _userApiRepository; + final IsarUserRepository _isarUserRepository; + final UserApiRepository _userApiRepository; final StoreService _storeService; UserService({ - required IUserRepository userRepository, - required IUserApiRepository userApiRepository, + required IsarUserRepository isarUserRepository, + required UserApiRepository userApiRepository, required StoreService storeService, - }) : _userRepository = userRepository, + }) : _isarUserRepository = isarUserRepository, _userApiRepository = userApiRepository, _storeService = storeService; @@ -38,7 +38,7 @@ class UserService { final user = await _userApiRepository.getMyUser(); if (user == null) return null; await _storeService.put(StoreKey.currentUser, user); - await _userRepository.update(user); + await _isarUserRepository.update(user); return user; } @@ -50,7 +50,7 @@ class UserService { ); final updatedUser = getMyUser().copyWith(profileImagePath: path); await _storeService.put(StoreKey.currentUser, updatedUser); - await _userRepository.update(updatedUser); + await _isarUserRepository.update(updatedUser); return path; } catch (e) { _log.warning("Failed to upload profile image", e); @@ -59,10 +59,10 @@ class UserService { } Future> getAll() async { - return await _userRepository.getAll(); + return await _isarUserRepository.getAll(); } Future deleteAll() { - return _userRepository.deleteAll(); + return _isarUserRepository.deleteAll(); } } diff --git a/mobile/lib/infrastructure/repositories/sync_stream.repository.dart b/mobile/lib/infrastructure/repositories/sync_stream.repository.dart index 067140d44b..56f1631ee6 100644 --- a/mobile/lib/infrastructure/repositories/sync_stream.repository.dart +++ b/mobile/lib/infrastructure/repositories/sync_stream.repository.dart @@ -1,5 +1,4 @@ import 'package:drift/drift.dart'; -import 'package:immich_mobile/domain/interfaces/sync_stream.interface.dart'; import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; import 'package:immich_mobile/infrastructure/entities/exif.entity.drift.dart'; import 'package:immich_mobile/infrastructure/entities/partner.entity.drift.dart'; @@ -10,14 +9,12 @@ import 'package:logging/logging.dart'; import 'package:openapi/api.dart' as api show AssetVisibility; import 'package:openapi/api.dart' hide AssetVisibility; -class DriftSyncStreamRepository extends DriftDatabaseRepository - implements ISyncStreamRepository { +class SyncStreamRepository extends DriftDatabaseRepository { final Logger _logger = Logger('DriftSyncStreamRepository'); final Drift _db; - DriftSyncStreamRepository(super.db) : _db = db; + SyncStreamRepository(super.db) : _db = db; - @override Future deleteUsersV1(Iterable data) async { try { await _db.batch((batch) { @@ -34,7 +31,6 @@ class DriftSyncStreamRepository extends DriftDatabaseRepository } } - @override Future updateUsersV1(Iterable data) async { try { await _db.batch((batch) { @@ -57,7 +53,6 @@ class DriftSyncStreamRepository extends DriftDatabaseRepository } } - @override Future deletePartnerV1(Iterable data) async { try { await _db.batch((batch) { @@ -77,7 +72,6 @@ class DriftSyncStreamRepository extends DriftDatabaseRepository } } - @override Future updatePartnerV1(Iterable data) async { try { await _db.batch((batch) { @@ -101,7 +95,6 @@ class DriftSyncStreamRepository extends DriftDatabaseRepository } } - @override Future deleteAssetsV1(Iterable data) async { try { await _deleteAssetsV1(data); @@ -111,7 +104,6 @@ class DriftSyncStreamRepository extends DriftDatabaseRepository } } - @override Future updateAssetsV1(Iterable data) async { try { await _updateAssetsV1(data); @@ -121,7 +113,6 @@ class DriftSyncStreamRepository extends DriftDatabaseRepository } } - @override Future deletePartnerAssetsV1(Iterable data) async { try { await _deleteAssetsV1(data); @@ -131,7 +122,6 @@ class DriftSyncStreamRepository extends DriftDatabaseRepository } } - @override Future updatePartnerAssetsV1(Iterable data) async { try { await _updateAssetsV1(data); @@ -141,7 +131,6 @@ class DriftSyncStreamRepository extends DriftDatabaseRepository } } - @override Future updateAssetsExifV1(Iterable data) async { try { await _updateAssetExifV1(data); @@ -151,7 +140,6 @@ class DriftSyncStreamRepository extends DriftDatabaseRepository } } - @override Future updatePartnerAssetsExifV1(Iterable data) async { try { await _updateAssetExifV1(data); diff --git a/mobile/lib/infrastructure/repositories/user.repository.dart b/mobile/lib/infrastructure/repositories/user.repository.dart index f12b95f64b..4ccfccbdcc 100644 --- a/mobile/lib/infrastructure/repositories/user.repository.dart +++ b/mobile/lib/infrastructure/repositories/user.repository.dart @@ -1,30 +1,26 @@ -import 'package:immich_mobile/domain/interfaces/user.interface.dart'; +import 'package:immich_mobile/constants/enums.dart'; import 'package:immich_mobile/domain/models/user.model.dart'; import 'package:immich_mobile/infrastructure/entities/user.entity.dart' as entity; import 'package:immich_mobile/infrastructure/repositories/db.repository.dart'; import 'package:isar/isar.dart'; -class IsarUserRepository extends IsarDatabaseRepository - implements IUserRepository { +class IsarUserRepository extends IsarDatabaseRepository { final Isar _db; const IsarUserRepository(super.db) : _db = db; - @override Future delete(List ids) async { await transaction(() async { await _db.users.deleteAllById(ids); }); } - @override Future deleteAll() async { await transaction(() async { await _db.users.clear(); }); } - @override Future> getAll({SortUserBy? sortBy}) async { return (await _db.users .where() @@ -39,17 +35,14 @@ class IsarUserRepository extends IsarDatabaseRepository .toList(); } - @override Future getByUserId(String id) async { return (await _db.users.getById(id))?.toDto(); } - @override Future> getByUserIds(List ids) async { return (await _db.users.getAllById(ids)).map((u) => u?.toDto()).toList(); } - @override Future insert(UserDto user) async { await transaction(() async { await _db.users.put(entity.User.fromDto(user)); @@ -57,7 +50,6 @@ class IsarUserRepository extends IsarDatabaseRepository return true; } - @override Future update(UserDto user) async { await transaction(() async { await _db.users.put(entity.User.fromDto(user)); @@ -65,7 +57,6 @@ class IsarUserRepository extends IsarDatabaseRepository return user; } - @override Future updateAll(List users) async { await transaction(() async { await _db.users.putAll(users.map(entity.User.fromDto).toList()); diff --git a/mobile/lib/infrastructure/repositories/user_api.repository.dart b/mobile/lib/infrastructure/repositories/user_api.repository.dart index b922f93ca5..e990b9d8d1 100644 --- a/mobile/lib/infrastructure/repositories/user_api.repository.dart +++ b/mobile/lib/infrastructure/repositories/user_api.repository.dart @@ -1,17 +1,15 @@ import 'dart:typed_data'; import 'package:http/http.dart'; -import 'package:immich_mobile/domain/interfaces/user_api.interface.dart'; import 'package:immich_mobile/domain/models/user.model.dart'; import 'package:immich_mobile/infrastructure/repositories/api.repository.dart'; import 'package:immich_mobile/infrastructure/utils/user.converter.dart'; import 'package:openapi/api.dart'; -class UserApiRepository extends ApiRepository implements IUserApiRepository { +class UserApiRepository extends ApiRepository { final UsersApi _api; const UserApiRepository(this._api); - @override Future getMyUser() async { final (adminDto, preferenceDto) = await (_api.getMyUser(), _api.getMyPreferences()).wait; @@ -20,7 +18,6 @@ class UserApiRepository extends ApiRepository implements IUserApiRepository { return UserConverter.fromAdminDto(adminDto, preferenceDto); } - @override Future createProfileImage({ required String name, required Uint8List data, @@ -33,7 +30,6 @@ class UserApiRepository extends ApiRepository implements IUserApiRepository { return res.profileImagePath; } - @override Future> getAll() async { final dto = await checkNull(_api.searchUsers()); return dto.map(UserConverter.fromSimpleUserDto).toList(); diff --git a/mobile/lib/providers/infrastructure/sync.provider.dart b/mobile/lib/providers/infrastructure/sync.provider.dart index 359af63232..706deacb04 100644 --- a/mobile/lib/providers/infrastructure/sync.provider.dart +++ b/mobile/lib/providers/infrastructure/sync.provider.dart @@ -26,7 +26,7 @@ final syncApiRepositoryProvider = Provider( ); final syncStreamRepositoryProvider = Provider( - (ref) => DriftSyncStreamRepository(ref.watch(driftProvider)), + (ref) => SyncStreamRepository(ref.watch(driftProvider)), ); final localSyncServiceProvider = Provider( diff --git a/mobile/lib/providers/infrastructure/user.provider.dart b/mobile/lib/providers/infrastructure/user.provider.dart index 504fe28cab..ca65f8be14 100644 --- a/mobile/lib/providers/infrastructure/user.provider.dart +++ b/mobile/lib/providers/infrastructure/user.provider.dart @@ -1,6 +1,4 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:immich_mobile/domain/interfaces/user.interface.dart'; -import 'package:immich_mobile/domain/interfaces/user_api.interface.dart'; import 'package:immich_mobile/domain/services/user.service.dart'; import 'package:immich_mobile/infrastructure/repositories/user.repository.dart'; import 'package:immich_mobile/infrastructure/repositories/user_api.repository.dart'; @@ -12,16 +10,16 @@ import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'user.provider.g.dart'; @Riverpod(keepAlive: true) -IUserRepository userRepository(Ref ref) => +IsarUserRepository userRepository(Ref ref) => IsarUserRepository(ref.watch(isarProvider)); @Riverpod(keepAlive: true) -IUserApiRepository userApiRepository(Ref ref) => +UserApiRepository userApiRepository(Ref ref) => UserApiRepository(ref.watch(apiServiceProvider).usersApi); @Riverpod(keepAlive: true) UserService userService(Ref ref) => UserService( - userRepository: ref.watch(userRepositoryProvider), + isarUserRepository: ref.watch(userRepositoryProvider), userApiRepository: ref.watch(userApiRepositoryProvider), storeService: ref.watch(storeServiceProvider), ); diff --git a/mobile/lib/providers/infrastructure/user.provider.g.dart b/mobile/lib/providers/infrastructure/user.provider.g.dart index fdb4223ee8..7664b15fd5 100644 --- a/mobile/lib/providers/infrastructure/user.provider.g.dart +++ b/mobile/lib/providers/infrastructure/user.provider.g.dart @@ -6,11 +6,11 @@ part of 'user.provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$userRepositoryHash() => r'1a2ac726bcc44397dcaecf449084fefd336696d4'; +String _$userRepositoryHash() => r'538791a4ad126ed086c9db682c67fc5c654d54f3'; /// See also [userRepository]. @ProviderFor(userRepository) -final userRepositoryProvider = Provider.internal( +final userRepositoryProvider = Provider.internal( userRepository, name: r'userRepositoryProvider', debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') @@ -22,12 +22,12 @@ final userRepositoryProvider = Provider.internal( @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element -typedef UserRepositoryRef = ProviderRef; -String _$userApiRepositoryHash() => r'6b19f2c99fb83162a5ceb91adb8589eaae01bc92'; +typedef UserRepositoryRef = ProviderRef; +String _$userApiRepositoryHash() => r'8a7340ca4544c8c6b20225c65bff2abb9e96baa2'; /// See also [userApiRepository]. @ProviderFor(userApiRepository) -final userApiRepositoryProvider = Provider.internal( +final userApiRepositoryProvider = Provider.internal( userApiRepository, name: r'userApiRepositoryProvider', debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') @@ -39,8 +39,8 @@ final userApiRepositoryProvider = Provider.internal( @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element -typedef UserApiRepositoryRef = ProviderRef; -String _$userServiceHash() => r'4a0873357b7115b4d6bfa8e89b847c0b74ce0d93'; +typedef UserApiRepositoryRef = ProviderRef; +String _$userServiceHash() => r'181414dddc7891be6237e13d568c287a804228d1'; /// See also [userService]. @ProviderFor(userService) diff --git a/mobile/lib/services/asset.service.dart b/mobile/lib/services/asset.service.dart index a52d6e6368..e57edde55e 100644 --- a/mobile/lib/services/asset.service.dart +++ b/mobile/lib/services/asset.service.dart @@ -5,11 +5,11 @@ import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/constants/enums.dart'; import 'package:immich_mobile/domain/interfaces/exif.interface.dart'; -import 'package:immich_mobile/domain/interfaces/user.interface.dart'; import 'package:immich_mobile/domain/models/user.model.dart'; 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'; @@ -53,7 +53,7 @@ class AssetService { final IAssetApiRepository _assetApiRepository; final IAssetRepository _assetRepository; final IExifInfoRepository _exifInfoRepository; - final IUserRepository _userRepository; + final IsarUserRepository _isarUserRepository; final IETagRepository _etagRepository; final IBackupAlbumRepository _backupRepository; final ApiService _apiService; @@ -68,7 +68,7 @@ class AssetService { this._assetApiRepository, this._assetRepository, this._exifInfoRepository, - this._userRepository, + this._isarUserRepository, this._etagRepository, this._backupRepository, this._apiService, @@ -85,7 +85,9 @@ class AssetService { final syncedUserIds = await _etagRepository.getAllIds(); final List syncedUsers = syncedUserIds.isEmpty ? [] - : (await _userRepository.getByUserIds(syncedUserIds)).nonNulls.toList(); + : (await _isarUserRepository.getByUserIds(syncedUserIds)) + .nonNulls + .toList(); final Stopwatch sw = Stopwatch()..start(); final bool changes = await _syncService.syncRemoteAssetsToDb( users: syncedUsers, diff --git a/mobile/lib/services/entity.service.dart b/mobile/lib/services/entity.service.dart index 9e61366b94..5837a6853c 100644 --- a/mobile/lib/services/entity.service.dart +++ b/mobile/lib/services/entity.service.dart @@ -1,24 +1,24 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:immich_mobile/domain/interfaces/user.interface.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 IUserRepository _userRepository; + final IsarUserRepository _isarUserRepository; EntityService( this._assetRepository, - this._userRepository, + this._isarUserRepository, ); Future fillAlbumWithDatabaseEntities(Album album) async { final ownerId = album.ownerId; if (ownerId != null) { // replace owner with user from database - final user = await _userRepository.getByUserId(ownerId); + final user = await _isarUserRepository.getByUserId(ownerId); album.owner.value = user == null ? null : User.fromDto(user); } final thumbnailAssetId = @@ -30,7 +30,7 @@ class EntityService { } if (album.remoteUsers.isNotEmpty) { // replace all users with users from database - final users = await _userRepository + final users = await _isarUserRepository .getByUserIds(album.remoteUsers.map((user) => user.id).toList()); album.sharedUsers.clear(); album.sharedUsers.addAll(users.nonNulls.map(User.fromDto)); diff --git a/mobile/lib/services/partner.service.dart b/mobile/lib/services/partner.service.dart index 78d4d71e99..edddca8beb 100644 --- a/mobile/lib/services/partner.service.dart +++ b/mobile/lib/services/partner.service.dart @@ -1,6 +1,6 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:immich_mobile/domain/interfaces/user.interface.dart'; import 'package:immich_mobile/domain/models/user.model.dart'; +import 'package:immich_mobile/infrastructure/repositories/user.repository.dart'; import 'package:immich_mobile/interfaces/partner.interface.dart'; import 'package:immich_mobile/interfaces/partner_api.interface.dart'; import 'package:immich_mobile/providers/infrastructure/user.provider.dart'; @@ -19,12 +19,12 @@ final partnerServiceProvider = Provider( class PartnerService { final IPartnerApiRepository _partnerApiRepository; final IPartnerRepository _partnerRepository; - final IUserRepository _userRepository; + final IsarUserRepository _isarUserRepository; final Logger _log = Logger("PartnerService"); PartnerService( this._partnerApiRepository, - this._userRepository, + this._isarUserRepository, this._partnerRepository, ); @@ -47,7 +47,8 @@ class PartnerService { Future removePartner(UserDto partner) async { try { await _partnerApiRepository.delete(partner.id); - await _userRepository.update(partner.copyWith(isPartnerSharedBy: false)); + await _isarUserRepository + .update(partner.copyWith(isPartnerSharedBy: false)); } catch (e) { _log.warning("Failed to remove partner ${partner.id}", e); return false; @@ -58,7 +59,8 @@ class PartnerService { Future addPartner(UserDto partner) async { try { await _partnerApiRepository.create(partner.id); - await _userRepository.update(partner.copyWith(isPartnerSharedBy: true)); + await _isarUserRepository + .update(partner.copyWith(isPartnerSharedBy: true)); return true; } catch (e) { _log.warning("Failed to add partner ${partner.id}", e); @@ -75,7 +77,7 @@ class PartnerService { partner.id, inTimeline: inTimeline, ); - await _userRepository + await _isarUserRepository .update(partner.copyWith(inTimeline: dto.inTimeline)); return true; } catch (e) { diff --git a/mobile/lib/services/sync.service.dart b/mobile/lib/services/sync.service.dart index e08d7de8b9..5dbacf84fd 100644 --- a/mobile/lib/services/sync.service.dart +++ b/mobile/lib/services/sync.service.dart @@ -3,15 +3,16 @@ import 'dart:io'; import 'package:collection/collection.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:immich_mobile/constants/enums.dart'; import 'package:immich_mobile/domain/interfaces/exif.interface.dart'; -import 'package:immich_mobile/domain/interfaces/user.interface.dart'; -import 'package:immich_mobile/domain/interfaces/user_api.interface.dart'; import 'package:immich_mobile/domain/models/user.model.dart'; import 'package:immich_mobile/domain/services/user.service.dart'; import 'package:immich_mobile/entities/album.entity.dart'; import 'package:immich_mobile/entities/asset.entity.dart'; 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/interfaces/album_api.interface.dart'; import 'package:immich_mobile/interfaces/album_media.interface.dart'; @@ -68,12 +69,12 @@ class SyncService { final IAlbumRepository _albumRepository; final IAssetRepository _assetRepository; final IExifInfoRepository _exifInfoRepository; - final IUserRepository _userRepository; + final IsarUserRepository _isarUserRepository; final UserService _userService; final IPartnerRepository _partnerRepository; final IETagRepository _eTagRepository; final IPartnerApiRepository _partnerApiRepository; - final IUserApiRepository _userApiRepository; + final UserApiRepository _userApiRepository; final AsyncMutex _lock = AsyncMutex(); final Logger _log = Logger('SyncService'); final AppSettingsService _appSettingsService; @@ -88,7 +89,7 @@ class SyncService { this._assetRepository, this._exifInfoRepository, this._partnerRepository, - this._userRepository, + this._isarUserRepository, this._userService, this._eTagRepository, this._appSettingsService, @@ -165,7 +166,7 @@ class SyncService { /// Returns `true`if there were any changes Future _syncUsersFromServer(List users) async { users.sortBy((u) => u.id); - final dbUsers = await _userRepository.getAll(sortBy: SortUserBy.id); + final dbUsers = await _isarUserRepository.getAll(sortBy: SortUserBy.id); final List toDelete = []; final List toUpsert = []; final changes = diffSortedListsSync( @@ -186,9 +187,9 @@ class SyncService { onlySecond: (UserDto b) => toDelete.add(b.id), ); if (changes) { - await _userRepository.transaction(() async { - await _userRepository.delete(toDelete); - await _userRepository.updateAll(toUpsert); + await _isarUserRepository.transaction(() async { + await _isarUserRepository.delete(toDelete); + await _isarUserRepository.updateAll(toUpsert); }); } return changes; @@ -448,7 +449,7 @@ class SyncService { final (existingInDb, updated) = await _linkWithExistingFromDb(toAdd); await upsertAssetsWithExif(updated); final assetsToLink = existingInDb + updated; - final usersToLink = await _userRepository.getByUserIds(userIdsToAdd); + final usersToLink = await _isarUserRepository.getByUserIds(userIdsToAdd); album.name = dto.name; album.description = dto.description; diff --git a/mobile/test/domain/services/sync_stream_service_test.dart b/mobile/test/domain/services/sync_stream_service_test.dart index b78a44342b..3e19306bdb 100644 --- a/mobile/test/domain/services/sync_stream_service_test.dart +++ b/mobile/test/domain/services/sync_stream_service_test.dart @@ -4,9 +4,9 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; import 'package:immich_mobile/domain/interfaces/sync_api.interface.dart'; -import 'package:immich_mobile/domain/interfaces/sync_stream.interface.dart'; import 'package:immich_mobile/domain/models/sync_event.model.dart'; import 'package:immich_mobile/domain/services/sync_stream.service.dart'; +import 'package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart'; import 'package:mocktail/mocktail.dart'; import '../../fixtures/sync_stream.stub.dart'; @@ -30,7 +30,7 @@ class _MockCancellationWrapper extends Mock implements _CancellationWrapper {} void main() { late SyncStreamService sut; - late ISyncStreamRepository mockSyncStreamRepo; + late SyncStreamRepository mockSyncStreamRepo; late ISyncApiRepository mockSyncApiRepo; late Function(List, Function()) handleEventsCallback; late _MockAbortCallbackWrapper mockAbortCallbackWrapper; diff --git a/mobile/test/domain/services/user_service_test.dart b/mobile/test/domain/services/user_service_test.dart index 8e2d160fd5..5cce565477 100644 --- a/mobile/test/domain/services/user_service_test.dart +++ b/mobile/test/domain/services/user_service_test.dart @@ -1,11 +1,11 @@ import 'dart:typed_data'; import 'package:flutter_test/flutter_test.dart'; -import 'package:immich_mobile/domain/interfaces/user.interface.dart'; -import 'package:immich_mobile/domain/interfaces/user_api.interface.dart'; import 'package:immich_mobile/domain/models/store.model.dart'; import 'package:immich_mobile/domain/services/store.service.dart'; import 'package:immich_mobile/domain/services/user.service.dart'; +import 'package:immich_mobile/infrastructure/repositories/user.repository.dart'; +import 'package:immich_mobile/infrastructure/repositories/user_api.repository.dart'; import 'package:mocktail/mocktail.dart'; import '../../fixtures/user.stub.dart'; @@ -14,16 +14,16 @@ import '../service.mock.dart'; void main() { late UserService sut; - late IUserRepository mockUserRepo; - late IUserApiRepository mockUserApiRepo; + late IsarUserRepository mockUserRepo; + late UserApiRepository mockUserApiRepo; late StoreService mockStoreService; setUp(() { - mockUserRepo = MockUserRepository(); + mockUserRepo = MockIsarUserRepository(); mockUserApiRepo = MockUserApiRepository(); mockStoreService = MockStoreService(); sut = UserService( - userRepository: mockUserRepo, + isarUserRepository: mockUserRepo, userApiRepository: mockUserApiRepo, storeService: mockStoreService, ); diff --git a/mobile/test/infrastructure/repository.mock.dart b/mobile/test/infrastructure/repository.mock.dart index 0dc241ca94..e41b89f16a 100644 --- a/mobile/test/infrastructure/repository.mock.dart +++ b/mobile/test/infrastructure/repository.mock.dart @@ -5,21 +5,21 @@ import 'package:immich_mobile/domain/interfaces/log.interface.dart'; import 'package:immich_mobile/domain/interfaces/storage.interface.dart'; import 'package:immich_mobile/domain/interfaces/store.interface.dart'; import 'package:immich_mobile/domain/interfaces/sync_api.interface.dart'; -import 'package:immich_mobile/domain/interfaces/sync_stream.interface.dart'; -import 'package:immich_mobile/domain/interfaces/user.interface.dart'; -import 'package:immich_mobile/domain/interfaces/user_api.interface.dart'; +import 'package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart'; +import 'package:immich_mobile/infrastructure/repositories/user.repository.dart'; +import 'package:immich_mobile/infrastructure/repositories/user_api.repository.dart'; import 'package:mocktail/mocktail.dart'; class MockStoreRepository extends Mock implements IStoreRepository {} class MockLogRepository extends Mock implements ILogRepository {} -class MockUserRepository extends Mock implements IUserRepository {} +class MockIsarUserRepository extends Mock implements IsarUserRepository {} class MockDeviceAssetRepository extends Mock implements IDeviceAssetRepository {} -class MockSyncStreamRepository extends Mock implements ISyncStreamRepository {} +class MockSyncStreamRepository extends Mock implements SyncStreamRepository {} class MockLocalAlbumRepository extends Mock implements ILocalAlbumRepository {} @@ -28,6 +28,6 @@ class MockLocalAssetRepository extends Mock implements ILocalAssetRepository {} class MockStorageRepository extends Mock implements IStorageRepository {} // API Repos -class MockUserApiRepository extends Mock implements IUserApiRepository {} +class MockUserApiRepository extends Mock implements UserApiRepository {} class MockSyncApiRepository extends Mock implements ISyncApiRepository {} diff --git a/mobile/test/modules/shared/sync_service_test.dart b/mobile/test/modules/shared/sync_service_test.dart index 2029ade018..3a0a9f5a7e 100644 --- a/mobile/test/modules/shared/sync_service_test.dart +++ b/mobile/test/modules/shared/sync_service_test.dart @@ -1,6 +1,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:immich_mobile/domain/interfaces/user.interface.dart'; +import 'package:immich_mobile/constants/enums.dart'; import 'package:immich_mobile/domain/models/store.model.dart'; import 'package:immich_mobile/domain/models/user.model.dart'; import 'package:immich_mobile/domain/services/log.service.dart'; @@ -55,7 +55,7 @@ void main() { final MockAlbumRepository albumRepository = MockAlbumRepository(); final MockAssetRepository assetRepository = MockAssetRepository(); final MockExifInfoRepository exifInfoRepository = MockExifInfoRepository(); - final MockUserRepository userRepository = MockUserRepository(); + final MockIsarUserRepository userRepository = MockIsarUserRepository(); final MockETagRepository eTagRepository = MockETagRepository(); final MockAlbumMediaRepository albumMediaRepository = MockAlbumMediaRepository(); diff --git a/mobile/test/services/asset.service_test.dart b/mobile/test/services/asset.service_test.dart index 63546e39f1..293e5ec76b 100644 --- a/mobile/test/services/asset.service_test.dart +++ b/mobile/test/services/asset.service_test.dart @@ -22,7 +22,7 @@ void main() { late MockExifInfoRepository exifInfoRepository; late MockETagRepository eTagRepository; late MockBackupAlbumRepository backupAlbumRepository; - late MockUserRepository userRepository; + late MockIsarUserRepository userRepository; late MockAssetMediaRepository assetMediaRepository; late MockApiService apiService; @@ -35,7 +35,7 @@ void main() { assetRepository = MockAssetRepository(); assetApiRepository = MockAssetApiRepository(); exifInfoRepository = MockExifInfoRepository(); - userRepository = MockUserRepository(); + userRepository = MockIsarUserRepository(); eTagRepository = MockETagRepository(); backupAlbumRepository = MockBackupAlbumRepository(); apiService = MockApiService(); diff --git a/mobile/test/services/entity.service_test.dart b/mobile/test/services/entity.service_test.dart index 190b2bc2b5..1642be7fb3 100644 --- a/mobile/test/services/entity.service_test.dart +++ b/mobile/test/services/entity.service_test.dart @@ -12,11 +12,11 @@ import '../repository.mocks.dart'; void main() { late EntityService sut; late MockAssetRepository assetRepository; - late MockUserRepository userRepository; + late MockIsarUserRepository userRepository; setUp(() { assetRepository = MockAssetRepository(); - userRepository = MockUserRepository(); + userRepository = MockIsarUserRepository(); sut = EntityService(assetRepository, userRepository); });