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 9156dcb5..f24e2708 100644 --- a/src/main/java/io/getstream/chat/java/models/Channel.java +++ b/src/main/java/io/getstream/chat/java/models/Channel.java @@ -17,6 +17,7 @@ import io.getstream.chat.java.models.Channel.ChannelTruncateRequestData.ChannelTruncateRequest; import io.getstream.chat.java.models.Channel.ChannelUnMuteRequestData.ChannelUnMuteRequest; import io.getstream.chat.java.models.Channel.ChannelUpdateRequestData.ChannelUpdateRequest; +import io.getstream.chat.java.models.Channel.MarkDeliveredRequestData.MarkDeliveredRequest; import io.getstream.chat.java.models.ChannelType.BlocklistBehavior; import io.getstream.chat.java.models.ChannelType.ChannelTypeWithCommands; import io.getstream.chat.java.models.Message.MessageRequestObject; @@ -1202,6 +1203,31 @@ protected Call generateCall(Client client) { } } + @Builder( + builderClassName = "MarkDeliveredRequest", + builderMethodName = "", + buildMethodName = "internalBuild") + public static class MarkDeliveredRequestData { + @Nullable + @JsonProperty("user_id") + private String userId; + + @Nullable + @JsonProperty("user") + private UserRequestObject user; + + @Nullable + @JsonProperty("latest_delivered_messages") + private List latestDeliveredMessages; + + public static class MarkDeliveredRequest extends StreamRequest { + @Override + protected Call generateCall(Client client) { + return client.create(ChannelService.class).markDelivered(this.internalBuild(), userId); + } + } + } + @Data @NoArgsConstructor @EqualsAndHashCode(callSuper = true) @@ -1492,6 +1518,19 @@ public static class ChannelPartialUpdateResponse extends StreamResponseObject { private List members; } + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class LatestDeliveredMessage { + @NotNull + @JsonProperty("cid") + private String cid; + + @NotNull + @JsonProperty("id") + private String messageId; + } + /** * Creates a get or create request * @@ -1757,4 +1796,14 @@ public static ChannelMemberPartialUpdateRequest unarchive( @NotNull String type, @NotNull String id, @NotNull String userId) { return new ChannelMemberPartialUpdateRequest(type, id, userId).setValue("archived", false); } + + /** + * Creates a mark delivered request + * + * @return the created request + */ + @NotNull + public static MarkDeliveredRequest markDelivered() { + return new MarkDeliveredRequest(); + } } diff --git a/src/main/java/io/getstream/chat/java/models/DeliveredMessageConfirmation.java b/src/main/java/io/getstream/chat/java/models/DeliveredMessageConfirmation.java new file mode 100644 index 00000000..cbaf6e4b --- /dev/null +++ b/src/main/java/io/getstream/chat/java/models/DeliveredMessageConfirmation.java @@ -0,0 +1,22 @@ +package io.getstream.chat.java.models; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.*; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +@Data +@NoArgsConstructor +public class DeliveredMessageConfirmation { + @NotNull + @JsonProperty("cid") + private String cid; + + @NotNull + @JsonProperty("id") + private String id; + + @Nullable + @JsonProperty("parent_id") + private String parentId; +} diff --git a/src/main/java/io/getstream/chat/java/services/ChannelService.java b/src/main/java/io/getstream/chat/java/services/ChannelService.java index fc59def5..55ca0ea7 100644 --- a/src/main/java/io/getstream/chat/java/services/ChannelService.java +++ b/src/main/java/io/getstream/chat/java/services/ChannelService.java @@ -103,4 +103,9 @@ Call updateMemberPartial( @NotNull @Path("id") String channelId, @NotNull @Path("user_id") String userId, @NotNull @Body ChannelMemberPartialUpdateRequestData updateMemberPartialRequestData); + + @POST("channels/delivered") + Call markDelivered( + @NotNull @Body MarkDeliveredRequestData markDeliveredOptions, + @Query("user_id") String userId); } diff --git a/src/test/java/io/getstream/chat/java/ChannelTest.java b/src/test/java/io/getstream/chat/java/ChannelTest.java index c63dccf6..373c4dc5 100644 --- a/src/test/java/io/getstream/chat/java/ChannelTest.java +++ b/src/test/java/io/getstream/chat/java/ChannelTest.java @@ -624,4 +624,20 @@ void whenPartialUpdateMember_thenNoException() { Assertions.assertEquals("updated_value1", updatedMember.getAdditionalFields().get("field1")); Assertions.assertEquals("value2", updatedMember.getAdditionalFields().get("field2")); } + + @DisplayName("Can mark messages delivered with latest delivered messages") + @Test + void whenMarkingDeliveredWithLastDeliveredMessages_thenNoException() { + var latestDeliveredMessages = + List.of( + new Channel.LatestDeliveredMessage("messaging:test-channel-1", "message-1"), + new Channel.LatestDeliveredMessage("messaging:test-channel-2", "message-2")); + + Assertions.assertDoesNotThrow( + () -> + Channel.markDelivered() + .userId(testUserRequestObject.getId()) + .latestDeliveredMessages(latestDeliveredMessages) + .request()); + } }