From c7c3fd8f40620d7514b5f2392cd12d9f818df51f Mon Sep 17 00:00:00 2001 From: nijeeshjoshy Date: Fri, 13 Nov 2026 11:59:59 +0100 Subject: [PATCH] feat: add includeSoftDeletedChannel to getChannel Co-Authored-By: Claude Opus 5.5 --- .../getstream/chat/java/models/Channel.java | 8 ++++- .../io/getstream/chat/java/ChannelTest.java | 36 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/getstream/chat/java/models/Channel.java b/src/main/java/io/getstream/chat/java/models/Channel.java index 2c7f7e5d..b20cdea0 100644 --- a/src/main/java/io/getstream/chat/java/models/Channel.java +++ b/src/main/java/io/getstream/chat/java/models/Channel.java @@ -622,6 +622,10 @@ public static class GetChannelRequestData { @JsonProperty("messages_id_around") private String messagesIdAround; + @Nullable + @JsonProperty("include_soft_deleted_channel") + private Boolean includeSoftDeletedChannel; + public static class GetChannelRequest extends StreamRequest { @NotNull private String channelType; @@ -1761,7 +1765,9 @@ public static ChannelGetRequest getOrCreate(@NotNull String type) { /** * Creates a get channel request. The channel is never created: a missing, deleted or disabled * channel yields a 404, so this request doubles as an existence check. The messages of the - * channel are paged with the messagesId* parameters, which need state to be true. + * channel are paged with the messagesId* parameters, which need state to be true. Set + * includeSoftDeletedChannel to read a soft-deleted channel and the messages its deletion hid; its + * members are not returned. * * @param type the channel type * @param id the channel id diff --git a/src/test/java/io/getstream/chat/java/ChannelTest.java b/src/test/java/io/getstream/chat/java/ChannelTest.java index bf9e232a..58bd9275 100644 --- a/src/test/java/io/getstream/chat/java/ChannelTest.java +++ b/src/test/java/io/getstream/chat/java/ChannelTest.java @@ -122,6 +122,42 @@ private List messageIds(ChannelGetResponse response) { return response.getMessages().stream().map(Message::getId).collect(Collectors.toList()); } + @DisplayName("Can get a soft-deleted channel and its messages") + @Test + void whenGettingSoftDeletedChannelWithInclude_thenReturnsChannelAndMessages() { + var channelId = RandomStringUtils.randomAlphabetic(12); + Assertions.assertDoesNotThrow( + () -> + Channel.getOrCreate(testChannel.getType(), channelId) + .data( + ChannelRequestObject.builder() + .createdBy(testUserRequestObject) + .members(buildChannelMembersList()) + .build()) + .request()); + + var first = sendMessageToChannel(channelId, "first"); + var second = sendMessageToChannel(channelId, "second"); + + Assertions.assertDoesNotThrow(() -> Channel.delete(testChannel.getType(), channelId).request()); + + var notFound = + Assertions.assertThrows( + StreamException.class, + () -> Channel.getChannel(testChannel.getType(), channelId).state(true).request()); + Assertions.assertEquals(404, notFound.getResponseData().getStatusCode()); + + var response = + Assertions.assertDoesNotThrow( + () -> + Channel.getChannel(testChannel.getType(), channelId) + .state(true) + .includeSoftDeletedChannel(true) + .request()); + Assertions.assertNotNull(response.getChannel().getDeletedAt()); + Assertions.assertEquals(Arrays.asList(first, second), messageIds(response)); + } + @DisplayName("Get channel does not create a missing channel") @Test void whenGettingMissingChannel_thenNotFound() {