Refactor UploadToShelfService to delegate database operations to Repositories#11634
Refactor UploadToShelfService to delegate database operations to Repositories#11634
Conversation
…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>
|
👋 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 New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
❌ 1 blocking issue (1 total)
|
Okuro3499
left a comment
There was a problem hiding this comment.
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>
Refactors
UploadToShelfServiceto reduce direct tight-coupling with theRealmdatabase. Data manipulation concerns withinUploadToShelfServiceare now correctly pushed towards the repository layer by defining specific boundary interfaces inUserRepositoryandHealthRepository.PR created automatically by Jules for task 15800194467336342895 started by @dogi