Skip to content
49 changes: 49 additions & 0 deletions src/main/java/io/getstream/chat/java/models/Channel.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -1202,6 +1203,31 @@ protected Call<ChannelMemberResponse> 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<LatestDeliveredMessage> latestDeliveredMessages;

public static class MarkDeliveredRequest extends StreamRequest<StreamResponseObject> {
@Override
protected Call<StreamResponseObject> generateCall(Client client) {
return client.create(ChannelService.class).markDelivered(this.internalBuild(), userId);
}
}
}

@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
Expand Down Expand Up @@ -1492,6 +1518,19 @@ public static class ChannelPartialUpdateResponse extends StreamResponseObject {
private List<ChannelMember> 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
*
Expand Down Expand Up @@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,9 @@ Call<ChannelMemberResponse> updateMemberPartial(
@NotNull @Path("id") String channelId,
@NotNull @Path("user_id") String userId,
@NotNull @Body ChannelMemberPartialUpdateRequestData updateMemberPartialRequestData);

@POST("channels/delivered")
Call<StreamResponseObject> markDelivered(
@NotNull @Body MarkDeliveredRequestData markDeliveredOptions,
@Query("user_id") String userId);
}
16 changes: 16 additions & 0 deletions src/test/java/io/getstream/chat/java/ChannelTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}
}