Skip to content

Refactor UploadToShelfService to delegate database operations to Repositories#11634

Closed
dogi wants to merge 2 commits intomasterfrom
upload-to-shelf-service-repository-refactor-15800194467336342895
Closed

Refactor UploadToShelfService to delegate database operations to Repositories#11634
dogi wants to merge 2 commits intomasterfrom
upload-to-shelf-service-repository-refactor-15800194467336342895

Conversation

@dogi
Copy link
Member

@dogi dogi commented Mar 2, 2026

Refactors UploadToShelfService to reduce direct tight-coupling with the Realm database. Data manipulation concerns within UploadToShelfService are now correctly pushed towards the repository layer by defining specific boundary interfaces in UserRepository and HealthRepository.


PR created automatically by Jules for task 15800194467336342895 started by @dogi

…sitories

- Extract direct Realm operations in `saveKeyIv`, `processUserAfterCreation`, and `updateExistingUser` to repository boundaries.
- Add `updateUserEncryption` and `updateUserRev` to `UserRepository` to manage `RealmUser` properties.
- Add `updateHealthData` to `HealthRepository` to handle updates on `RealmHealthExamination` associated with a specific user.
- Add `@Inject` `HealthRepository` dependency into `UploadToShelfService` and `ServiceModule`.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
@google-labs-jules
Copy link
Contributor

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@dogi dogi added the triage Further information is requested label Mar 2, 2026
@qltysh
Copy link

qltysh bot commented Mar 2, 2026

❌ 1 blocking issue (1 total)

Tool Category Rule Count
qlty Structure Function with many parameters (count = 7): provideUploadToShelfService 1

coursesRepository: org.ole.planet.myplanet.repository.CoursesRepository,
userRepository: org.ole.planet.myplanet.repository.UserRepository
userRepository: org.ole.planet.myplanet.repository.UserRepository,
healthRepository: org.ole.planet.myplanet.repository.HealthRepository
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Function with many parameters (count = 7): provideUploadToShelfService [qlty:function-parameters]

Copy link
Collaborator

@Okuro3499 Okuro3499 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1. Null→empty-string coercion for key/iv (UploadToShelfService.kt:262)

  // Before
  managedModel?.key = keyString   // null stays null
  managedModel?.iv = iv           // null stays null

  // After
  model.id?.let { userRepository.updateUserEncryption(it, Pair(keyString ?: "", iv ?: "")) }

  keyString and iv are nullable. The original code wrote null to the Realm fields when those values were absent. The new code writes "". Downstream decryption code in
  AndroidDecrypter is likely to check for null before attempting to use the key; an empty string instead of null could cause a silent decrypt failure rather than a handled null
  branch. The fix is to pass the nullable values directly and handle nullability inside updateUserEncryption.

  2. updateHealthData bypasses RealmRepository.executeTransaction (HealthRepositoryImpl.kt:18)

  // New method in HealthRepositoryImpl (a RealmRepository subclass)
  override suspend fun updateHealthData(userId: String) {
      databaseService.executeTransactionAsync { realm -> ... }  // bypasses parent wrapper
  }

  // All other new methods use the inherited helper
  override suspend fun updateUserEncryption(...) {
      update(RealmUser::class.java, "id", userId) { ... }      // goes through executeTransaction
  }

…sitories

- Extract direct Realm operations in `saveKeyIv`, `processUserAfterCreation`, and `updateExistingUser` to repository boundaries.
- Add `updateUserEncryption` and `updateUserRev` to `UserRepository` to manage `RealmUser` properties while properly handling nullable fields.
- Add `updateHealthData` to `HealthRepository` using the `executeTransaction` Realm wrapper helper to handle updates on `RealmHealthExamination` associated with a specific user.
- Add `@Inject` `HealthRepository` dependency into `UploadToShelfService` constructor and `ServiceModule`.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
@dogi dogi requested a review from Okuro3499 March 3, 2026 17:56
@dogi dogi closed this Mar 3, 2026
@dogi dogi deleted the upload-to-shelf-service-repository-refactor-15800194467336342895 branch March 18, 2026 01:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

close? triage Further information is requested

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants