Migrate user request bodies (partialUpdateUser, getGuestUser, updateUsers) to generated models - #6613
Conversation
PR checklist ✅All required conditions are satisfied:
🎉 Great job! This PR is ready for review. |
WalkthroughUser update and guest creation flows now use network request models. User mapping includes privacy settings and custom data. A Moshi adapter flattens custom fields during serialization. Tests cover the updated request payloads. ChangesUser request migration
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
Suggested labels: Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
🧹 Nitpick comments (2)
stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UserRequest.kt (1)
17-22: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winDocument or remove the file-level suppressions.
The suppression block disables four independent diagnostics without stating which generated construct requires each one. Keep only required suppressions and document each reason.
stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UserRequest.kt#L17-L22: remove unused rules or document each required rule.stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UpdateUserPartialRequest.kt#L17-L22: remove unused rules or document each required rule.stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/PrivacySettingsResponse.kt#L17-L22: remove unused rules or document each required rule.stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/ReadReceiptsResponse.kt#L17-L22: remove unused rules or document each required rule.stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/TypingIndicatorsResponse.kt#L17-L22: remove unused rules or document each required rule.stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/DeliveryReceiptsResponse.kt#L17-L22: remove unused rules or document each required rule.As per coding guidelines, avoid suppressions unless documented.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UserRequest.kt` around lines 17 - 22, Review the file-level suppression blocks in UserRequest.kt, UpdateUserPartialRequest.kt, PrivacySettingsResponse.kt, ReadReceiptsResponse.kt, TypingIndicatorsResponse.kt, and DeliveryReceiptsResponse.kt at lines 17-22: remove any unused rules and add concise documentation explaining each suppression that remains, including why the generated model requires it.Source: Coding guidelines
stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UpdateUsersPartialRequest.kt (1)
17-22: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winDocument or remove the file-level suppressions.
The shared suppression block hides lint findings for each generated request model. Document each required suppression in the generator template. Remove suppression IDs that are not required.
stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UpdateUsersPartialRequest.kt#L17-L22: document or remove each suppression.stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UpdateUsersRequest.kt#L17-L22: document or remove each suppression.stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/CreateGuestRequest.kt#L17-L22: document or remove each suppression.As per coding guidelines, “avoid suppressions unless documented.”
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UpdateUsersPartialRequest.kt` around lines 17 - 22, Update the generator template producing the file-level suppression block for stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UpdateUsersPartialRequest.kt lines 17-22, UpdateUsersRequest.kt lines 17-22, and CreateGuestRequest.kt lines 17-22: document every suppression that remains necessary and remove any unused suppression IDs, including ArrayInDataClass, EnumEntryName, RemoveRedundantQualifierName, and UnusedImport. Ensure the generated models consistently emit only justified, documented suppressions.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In
`@stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UpdateUsersPartialRequest.kt`:
- Around line 17-22: Update the generator template producing the file-level
suppression block for
stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UpdateUsersPartialRequest.kt
lines 17-22, UpdateUsersRequest.kt lines 17-22, and CreateGuestRequest.kt lines
17-22: document every suppression that remains necessary and remove any unused
suppression IDs, including ArrayInDataClass, EnumEntryName,
RemoveRedundantQualifierName, and UnusedImport. Ensure the generated models
consistently emit only justified, documented suppressions.
In
`@stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UserRequest.kt`:
- Around line 17-22: Review the file-level suppression blocks in UserRequest.kt,
UpdateUserPartialRequest.kt, PrivacySettingsResponse.kt,
ReadReceiptsResponse.kt, TypingIndicatorsResponse.kt, and
DeliveryReceiptsResponse.kt at lines 17-22: remove any unused rules and add
concise documentation explaining each suppression that remains, including why
the generated model requires it.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 19b03979-5648-45b1-ae4b-e4d48ef09a71
📒 Files selected for processing (19)
stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/MoshiChatApi.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/endpoint/GuestApi.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/endpoint/UserApi.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/mapping/DtoMapping.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/dto/UserDtos.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/client/parser2/MoshiChatParser.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/client/parser2/adapters/UserRequestAdapter.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/CreateGuestRequest.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/DeliveryReceiptsResponse.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/PrivacySettingsResponse.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/ReadReceiptsResponse.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/TypingIndicatorsResponse.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UpdateUserPartialRequest.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UpdateUsersPartialRequest.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UpdateUsersRequest.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UserRequest.ktstream-chat-android-client/src/test/java/io/getstream/chat/android/client/api2/MoshiChatApiTest.ktstream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/UserRequestsAdapterTest.ktstream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/testdata/UserRequestsTestData.kt
💤 Files with no reviewable changes (1)
- stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/dto/UserDtos.kt
SDK Size Comparison 📏
|
838e6ce to
d720cf3
Compare
|
|
🚀 Available in v7.8.0 |



Goal
Migrate the
partialUpdateUser,getGuestUser, andupdateUsersrequest bodies to the generatedUpdateUsersPartialRequest/UpdateUserPartialRequest,CreateGuestRequest,UpdateUsersRequest, andUserRequestnetwork models.Part of AND-1291
Implementation
partialUpdateUser->UpdateUsersPartialRequest(UpdateUserPartialRequest(id/set/unset)).getGuestUser->CreateGuestRequest(UserRequest(id, name)); the generatedUserRequestflattenscustomto the wire root via a newUserRequestAdapter.updateUsers->UpdateUsersRequest(Map<String, UserRequest>)via a newUser.toUserRequest()mapper.PartialUpdateUsersRequest,GuestUserRequest,PartialUpdateUserDto, andUpdateUsersRequest.Note on
updateUsers: the generatedUserRequestis leaner than the oldUpstreamUserDto— it omitsrole/teams/teams_role/banned/devices. That's intentional and safe: the backend marksrole/teams/teams_roleasignore_if_client_side(stripped for client-token requests) and doesn't bindbanned/deviceson this endpoint, so the old DTO was shipping fields the server already discarded. Verified on the wire — anupdateUsersupsert returns200androle/teamsare preserved server-side even though the client no longer sends them.Testing
UserRequestsAdapterTest+ testdata lock the wire shape (incl.UserRequestcustom flatten andprivacy_settings).MoshiChatApiTestmapper assertions updated.spotlessApply,apiDump(no public-API change),detekt, and the full clienttestDebugUnitTestsuite pass.partialUpdateUser(set + unset paths) andupdateUsers(custom sentinel round-trips;role/teamspreserved) confirmed.Summary by CodeRabbit
Improvements
Reliability