Migrate user groups to generated models - #6595
Conversation
PR checklist ✅All required conditions are satisfied:
🎉 Great job! This PR is ready for review. |
SDK Size Comparison 📏
|
78136d5 to
089ceea
Compare
089ceea to
a7e5361
Compare
WalkthroughUser-group API operations now use dedicated network request/response models, extractor-based response mapping, domain conversions, and updated API2 contract tests. ChangesUser-group model 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.
Actionable comments posted: 2
🧹 Nitpick comments (1)
stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/AddUserGroupMembersRequest.kt (1)
17-22: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winNarrow or document the repeated file-level suppressions.
The same blanket suppression set is repeated across the generated models without explaining which rules are required. Remove unnecessary suppressions per file, or document the generator-level rationale and retain only the minimal set.
stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/AddUserGroupMembersRequest.kt#L17-L22: narrow or document the suppression block.stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/CreateUserGroupRequest.kt#L17-L22: narrow or document the suppression block.stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UpdateUserGroupRequest.kt#L17-L22: narrow or document the suppression block.stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/RemoveUserGroupMembersRequest.kt#L17-L22: narrow or document the suppression block.stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UserGroupMember.kt#L17-L22: narrow or document the suppression block.stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UserGroupResponse.kt#L17-L22: narrow or document the suppression block.stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/AddUserGroupMembersResponse.kt#L17-L22: narrow or document the suppression block.stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/CreateUserGroupResponse.kt#L17-L22: narrow or document the suppression block.stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/GetUserGroupResponse.kt#L17-L22: narrow or document the suppression block.As per coding guidelines, suppressions should be avoided 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/AddUserGroupMembersRequest.kt` around lines 17 - 22, The repeated blanket file-level suppressions are undocumented and may include unnecessary rules. In AddUserGroupMembersRequest.kt, CreateUserGroupRequest.kt, UpdateUserGroupRequest.kt, RemoveUserGroupMembersRequest.kt, UserGroupMember.kt, UserGroupResponse.kt, AddUserGroupMembersResponse.kt, CreateUserGroupResponse.kt, and GetUserGroupResponse.kt, remove suppressions that are not required; retain only the minimal necessary rules and document the generator-level rationale when shared suppressions must remain.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.
Inline comments:
In
`@stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/ListUserGroupsResponse.kt`:
- Around line 17-22: Document the rationale for each required entry in the
file-wide suppression block, or remove entries that are unnecessary, in
ListUserGroupsResponse.kt lines 17-22, RemoveUserGroupMembersResponse.kt lines
17-22, SearchUserGroupsResponse.kt lines 17-22, and UpdateUserGroupResponse.kt
lines 17-22. Keep only suppressions required by the generated response model
declarations and ensure each retained suppression has a clear explanation.
In
`@stream-chat-android-client/src/test/java/io/getstream/chat/android/client/api2/MoshiChatApiTest.kt`:
- Line 3157: Rename the tests in
stream-chat-android-client/src/test/java/io/getstream/chat/android/client/api2/MoshiChatApiTest.kt
at lines 3157, 3189, 3223, 3258, 3273, 3313, and 3338—testCreateUserGroup,
testListUserGroups, testSearchUserGroups, testGetUserGroup, testUpdateUserGroup,
testAddUserGroupMembers, and testRemoveUserGroupMembers—to readable Kotlin
backtick test names while preserving their existing behavior.
---
Nitpick comments:
In
`@stream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/AddUserGroupMembersRequest.kt`:
- Around line 17-22: The repeated blanket file-level suppressions are
undocumented and may include unnecessary rules. In
AddUserGroupMembersRequest.kt, CreateUserGroupRequest.kt,
UpdateUserGroupRequest.kt, RemoveUserGroupMembersRequest.kt, UserGroupMember.kt,
UserGroupResponse.kt, AddUserGroupMembersResponse.kt,
CreateUserGroupResponse.kt, and GetUserGroupResponse.kt, remove suppressions
that are not required; retain only the minimal necessary rules and document the
generator-level rationale when shared suppressions must remain.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: cb1d0f5c-99c2-4c2d-9bec-c20230810997
📒 Files selected for processing (20)
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/UserGroupApi.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/mapping/DomainMapping.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/requests/UserGroupRequests.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/AddUserGroupMembersRequest.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/AddUserGroupMembersResponse.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/CreateUserGroupRequest.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/CreateUserGroupResponse.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/GetUserGroupResponse.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/ListUserGroupsResponse.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/RemoveUserGroupMembersRequest.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/RemoveUserGroupMembersResponse.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/SearchUserGroupsResponse.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UpdateUserGroupRequest.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UpdateUserGroupResponse.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UserGroupMember.ktstream-chat-android-client/src/main/java/io/getstream/chat/android/network/models/UserGroupResponse.ktstream-chat-android-client/src/test/java/io/getstream/chat/android/client/Mother.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/api2/MoshiChatApiTestArguments.kt
💤 Files with no reviewable changes (1)
- stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/requests/UserGroupRequests.kt
andremion
left a comment
There was a problem hiding this comment.
Nice cleanup! Left a question about the failure mode of mapUserGroup and a note on test coverage.
|
|
🚀 Available in v7.7.0 |


Goal
Migrate the whole user-groups surface (
/usergroupsCRUD + members) to generatednetwork.models. First slice vendored from the current/chatmaster generator, and the first response-side migration. Unblocked by the upstream fix for the same-name struct collapse (#12/#15/#16):UserGroupResponsenow carriesmembersand no longer needs the local rename patch. Part of the incremental OpenAPI model migration.Part of AND-1291
Implementation
internalmodels: the 4 request bodies (Create/Update/AddUserGroupMembers/RemoveUserGroupMembers), the 7 per-endpoint response wrappers (Create/Get/Update/Add/RemoveUserGroupMembersResponse,ListUserGroupsResponse,SearchUserGroupsResponse), plus the sharedUserGroupResponseobject andUserGroupMember.UserGroupApireturns the generated per-endpoint wrappers; request@Bodytypes use the generated requests.MoshiChatApicall sites pass camelCase args and map via generic helpersmapUserGroup { it.userGroup }/mapUserGroups { it.userGroups }.DomainMappinggainsUserGroupResponse.toDomain()+UserGroupMember.toDomain().UserGroupRequests.ktandUserGroupResponses.kt. KeepUserGroupDtos.kt(DownstreamUserGroupDto) — still used byMessage.mentioned_groups, which is part of the deferred message migration.Mother.randomUserGroupResponse()+ one arg provider per endpoint; retype the 8 user-group test functions.Testing
apiCheck(no API drift — allinternal),detekt,spotlessCheck, and the full clienttestDebugUnitTestsuite pass.UserGroupResponseobject +members) parsed cleanly (noJsonDataException); request bodies serialize the expectedmember_ids/name/idshapes.Summary by CodeRabbit
Release Notes