Skip to content

Commit 3a319f6

Browse files
authored
feat: add additional fields to channel member request (#199)
1 parent 1592e3f commit 3a319f6

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed

src/main/java/io/getstream/chat/java/models/Channel.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,18 @@ public static class ChannelMemberRequestObject {
380380
@JsonProperty("shadow_banned")
381381
private Boolean shadowBanned;
382382

383+
@Singular @Nullable @JsonIgnore private Map<String, Object> additionalFields;
384+
385+
@JsonAnyGetter
386+
public Map<String, Object> getAdditionalFields() {
387+
return this.additionalFields;
388+
}
389+
390+
@JsonAnySetter
391+
public void setAdditionalField(String name, Object value) {
392+
this.additionalFields.put(name, value);
393+
}
394+
383395
@Nullable
384396
public static ChannelMemberRequestObject buildFrom(@Nullable ChannelMember channelMember) {
385397
return RequestObjectBuilder.build(ChannelMemberRequestObject.class, channelMember);

src/test/java/io/getstream/chat/java/ChannelTest.java

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,4 +555,73 @@ void whenArchivingChannelUsingUnset_thenIsArchived() {
555555
.request());
556556
Assertions.assertNull(channelMemberResponse.getMember().getArchivedAt());
557557
}
558+
559+
@DisplayName("Can set custom field on channel member")
560+
@Test
561+
void whenSettingCustomFieldOnMember_thenNoException() {
562+
final var customField = "custom_field_on_member";
563+
final var customValue = "custom_value";
564+
565+
var channelMemberReq =
566+
ChannelMemberRequestObject.builder()
567+
.user(testUserRequestObject)
568+
.additionalField(customField, customValue)
569+
.build();
570+
var channelReq =
571+
ChannelRequestObject.builder()
572+
.createdBy(testUserRequestObject)
573+
.members(List.of(channelMemberReq))
574+
.build();
575+
var channel =
576+
Assertions.assertDoesNotThrow(
577+
() ->
578+
Channel.getOrCreate(testChannel.getType(), RandomStringUtils.randomAlphabetic(12))
579+
.data(channelReq)
580+
.request());
581+
582+
Assertions.assertNotNull(channel.getMembers());
583+
var members = channel.getMembers();
584+
Assertions.assertEquals(1, members.size());
585+
var member = members.get(0);
586+
Assertions.assertEquals(customValue, member.getAdditionalFields().get(customField));
587+
}
588+
589+
@DisplayName("Can set custom field on channel member")
590+
@Test
591+
void whenPartialUpdateMember_thenNoException() {
592+
var channelType = "messaging";
593+
var channelId = RandomStringUtils.randomAlphabetic(12);
594+
var channelMemberReq =
595+
ChannelMemberRequestObject.builder()
596+
.user(testUserRequestObject)
597+
.additionalField("field1", "value1")
598+
.build();
599+
var channelReq =
600+
ChannelRequestObject.builder()
601+
.createdBy(testUserRequestObject)
602+
.members(List.of(channelMemberReq))
603+
.build();
604+
var channel =
605+
Assertions.assertDoesNotThrow(
606+
() -> Channel.getOrCreate(channelType, channelId).data(channelReq).request());
607+
608+
Assertions.assertNotNull(channel.getMembers());
609+
var members = channel.getMembers();
610+
Assertions.assertEquals(1, members.size());
611+
var member = members.get(0);
612+
Assertions.assertEquals("value1", member.getAdditionalFields().get("field1"));
613+
614+
// update partial
615+
var partialUpdateResponse =
616+
Assertions.assertDoesNotThrow(
617+
() ->
618+
Channel.updateMemberPartial(channelType, channelId, testUserRequestObject.getId())
619+
.setValue("field1", "updated_value1")
620+
.setValue("field2", "value2")
621+
.request());
622+
623+
var updatedMember = partialUpdateResponse.getMember();
624+
Assertions.assertEquals("updated_value1", updatedMember.getAdditionalFields().get("field1"));
625+
Assertions.assertEquals("value2", updatedMember.getAdditionalFields().get("field2"));
626+
}
558627
}

0 commit comments

Comments
 (0)