diff --git a/mobile/analysis_options.yaml b/mobile/analysis_options.yaml
index 52d0d11162..5f8b899469 100644
--- a/mobile/analysis_options.yaml
+++ b/mobile/analysis_options.yaml
@@ -65,7 +65,7 @@ custom_lint:
       allowed:
         # required / wanted
         - lib/entities/*.entity.dart
-        - lib/repositories/{album,asset,backup,database,etag,exif_info,user,timeline}.repository.dart
+        - lib/repositories/{album,asset,backup,database,etag,exif_info,user,timeline,partner}.repository.dart
         - lib/infrastructure/entities/*.entity.dart
         - lib/infrastructure/repositories/{store,db}.repository.dart
         - lib/providers/infrastructure/db.provider.dart
@@ -79,7 +79,7 @@ custom_lint:
         - lib/widgets/asset_grid/asset_grid_data_structure.dart
         - test/**.dart
         # refactor the remaining providers
-        - lib/providers/{asset,authentication,db,partner,user}.provider.dart
+        - lib/providers/{asset,authentication,db,user}.provider.dart
         - lib/providers/{asset_viewer/render_list,backup/backup,search/all_motion_photos,search/recently_added_asset}.provider.dart
 
     - import_rule_openapi:
diff --git a/mobile/lib/interfaces/partner.interface.dart b/mobile/lib/interfaces/partner.interface.dart
new file mode 100644
index 0000000000..995e07c392
--- /dev/null
+++ b/mobile/lib/interfaces/partner.interface.dart
@@ -0,0 +1,8 @@
+import 'package:immich_mobile/entities/user.entity.dart';
+
+abstract class IPartnerRepository {
+  Future<List<User>> getSharedWith();
+  Future<List<User>> getSharedBy();
+  Stream<List<User>> watchSharedWith();
+  Stream<List<User>> watchSharedBy();
+}
diff --git a/mobile/lib/providers/partner.provider.dart b/mobile/lib/providers/partner.provider.dart
index bf638ae355..38b449e96a 100644
--- a/mobile/lib/providers/partner.provider.dart
+++ b/mobile/lib/providers/partner.provider.dart
@@ -5,19 +5,18 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/providers/album/suggested_shared_users.provider.dart';
 import 'package:immich_mobile/services/partner.service.dart';
 import 'package:immich_mobile/entities/user.entity.dart';
-import 'package:immich_mobile/providers/db.provider.dart';
-import 'package:isar/isar.dart';
 
 class PartnerSharedWithNotifier extends StateNotifier<List<User>> {
-  PartnerSharedWithNotifier(Isar db, this._ps) : super([]) {
+  final PartnerService _partnerService;
+
+  PartnerSharedWithNotifier(this._partnerService) : super([]) {
     Function eq = const ListEquality<User>().equals;
-    final query = db.users.filter().isPartnerSharedWithEqualTo(true).sortById();
-    query.findAll().then((partners) {
+    _partnerService.getSharedWith().then((partners) {
       if (!eq(state, partners)) {
         state = partners;
       }
     }).then((_) {
-      query.watch().listen((partners) {
+      _partnerService.watchSharedWith().listen((partners) {
         if (!eq(state, partners)) {
           state = partners;
         }
@@ -26,30 +25,28 @@ class PartnerSharedWithNotifier extends StateNotifier<List<User>> {
   }
 
   Future<bool> updatePartner(User partner, {required bool inTimeline}) {
-    return _ps.updatePartner(partner, inTimeline: inTimeline);
+    return _partnerService.updatePartner(partner, inTimeline: inTimeline);
   }
-
-  final PartnerService _ps;
 }
 
 final partnerSharedWithProvider =
     StateNotifierProvider<PartnerSharedWithNotifier, List<User>>((ref) {
   return PartnerSharedWithNotifier(
-    ref.watch(dbProvider),
     ref.watch(partnerServiceProvider),
   );
 });
 
 class PartnerSharedByNotifier extends StateNotifier<List<User>> {
-  PartnerSharedByNotifier(Isar db) : super([]) {
+  final PartnerService _partnerService;
+
+  PartnerSharedByNotifier(this._partnerService) : super([]) {
     Function eq = const ListEquality<User>().equals;
-    final query = db.users.filter().isPartnerSharedByEqualTo(true).sortById();
-    query.findAll().then((partners) {
+    _partnerService.getSharedBy().then((partners) {
       if (!eq(state, partners)) {
         state = partners;
       }
     }).then((_) {
-      streamSub = query.watch().listen((partners) {
+      streamSub = _partnerService.watchSharedBy().listen((partners) {
         if (!eq(state, partners)) {
           state = partners;
         }
@@ -68,7 +65,7 @@ class PartnerSharedByNotifier extends StateNotifier<List<User>> {
 
 final partnerSharedByProvider =
     StateNotifierProvider<PartnerSharedByNotifier, List<User>>((ref) {
-  return PartnerSharedByNotifier(ref.watch(dbProvider));
+  return PartnerSharedByNotifier(ref.watch(partnerServiceProvider));
 });
 
 final partnerAvailableProvider =
diff --git a/mobile/lib/repositories/partner.repository.dart b/mobile/lib/repositories/partner.repository.dart
new file mode 100644
index 0000000000..cae49fee39
--- /dev/null
+++ b/mobile/lib/repositories/partner.repository.dart
@@ -0,0 +1,47 @@
+import 'package:hooks_riverpod/hooks_riverpod.dart';
+import 'package:immich_mobile/entities/user.entity.dart';
+import 'package:immich_mobile/interfaces/partner.interface.dart';
+import 'package:immich_mobile/providers/db.provider.dart';
+import 'package:immich_mobile/repositories/database.repository.dart';
+import 'package:isar/isar.dart';
+
+final partnerRepositoryProvider = Provider(
+  (ref) => PartnerRepository(ref.watch(dbProvider)),
+);
+
+class PartnerRepository extends DatabaseRepository
+    implements IPartnerRepository {
+  PartnerRepository(super.db);
+
+  @override
+  Future<List<User>> getSharedBy() {
+    return db.users
+        .filter()
+        .isPartnerSharedByEqualTo(true)
+        .sortById()
+        .findAll();
+  }
+
+  @override
+  Future<List<User>> getSharedWith() {
+    return db.users
+        .filter()
+        .isPartnerSharedWithEqualTo(true)
+        .sortById()
+        .findAll();
+  }
+
+  @override
+  Stream<List<User>> watchSharedBy() {
+    return db.users.filter().isPartnerSharedByEqualTo(true).sortById().watch();
+  }
+
+  @override
+  Stream<List<User>> watchSharedWith() {
+    return db.users
+        .filter()
+        .isPartnerSharedWithEqualTo(true)
+        .sortById()
+        .watch();
+  }
+}
diff --git a/mobile/lib/services/partner.service.dart b/mobile/lib/services/partner.service.dart
index 67d7f4e1d1..6bd429b51d 100644
--- a/mobile/lib/services/partner.service.dart
+++ b/mobile/lib/services/partner.service.dart
@@ -1,7 +1,9 @@
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/entities/user.entity.dart';
+import 'package:immich_mobile/interfaces/partner.interface.dart';
 import 'package:immich_mobile/interfaces/partner_api.interface.dart';
 import 'package:immich_mobile/interfaces/user.interface.dart';
+import 'package:immich_mobile/repositories/partner.repository.dart';
 import 'package:immich_mobile/repositories/partner_api.repository.dart';
 import 'package:immich_mobile/repositories/user.repository.dart';
 import 'package:logging/logging.dart';
@@ -10,19 +12,38 @@ final partnerServiceProvider = Provider(
   (ref) => PartnerService(
     ref.watch(partnerApiRepositoryProvider),
     ref.watch(userRepositoryProvider),
+    ref.watch(partnerRepositoryProvider),
   ),
 );
 
 class PartnerService {
   final IPartnerApiRepository _partnerApiRepository;
+  final IPartnerRepository _partnerRepository;
   final IUserRepository _userRepository;
   final Logger _log = Logger("PartnerService");
 
   PartnerService(
     this._partnerApiRepository,
     this._userRepository,
+    this._partnerRepository,
   );
 
+  Future<List<User>> getSharedWith() async {
+    return _partnerRepository.getSharedWith();
+  }
+
+  Future<List<User>> getSharedBy() async {
+    return _partnerRepository.getSharedBy();
+  }
+
+  Stream<List<User>> watchSharedWith() {
+    return _partnerRepository.watchSharedWith();
+  }
+
+  Stream<List<User>> watchSharedBy() {
+    return _partnerRepository.watchSharedBy();
+  }
+
   Future<bool> removePartner(User partner) async {
     try {
       await _partnerApiRepository.delete(partner.id);