Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 27 additions & 4 deletions src/main/java/io/getstream/chat/java/models/Event.java
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,35 @@ public class Event {
@JsonProperty("scheduled_message")
private ScheduledMessage scheduledMessage;

/** On scheduled_message.sent, the ID of the message that was sent. */
@NotNull @JsonIgnore private Map<String, Object> additionalFields = new HashMap<>();

/**
* The ID of the message the event is about (on scheduled_message.sent, the message that was
* sent). The backend also sends it on message.*, reminder.* and poll.* events.
*
* <p>Backed by {@link #getAdditionalFields()} so {@code getAdditionalFields().get("message_id")}
* keeps working for existing events.
*/
@Nullable
@JsonProperty("message_id")
private String messageId;
@JsonIgnore
public String getMessageId() {
Object value = this.additionalFields.get("message_id");
return value == null ? null : value.toString();
}

@NotNull @JsonIgnore private Map<String, Object> additionalFields = new HashMap<>();
/**
* Sets the ID of the message the event is about; stored in {@link #getAdditionalFields()}.
*
* @param messageId the message ID, or null to remove it
*/
@JsonIgnore
public void setMessageId(@Nullable String messageId) {
if (messageId == null) {
this.additionalFields.remove("message_id");
} else {
this.additionalFields.put("message_id", messageId);
}
}

@JsonAnyGetter
public Map<String, Object> getAdditionalFields() {
Expand Down
18 changes: 18 additions & 0 deletions src/test/java/io/getstream/chat/java/ScheduledMessageTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,25 @@ void whenEventIsScheduledMessageSent_thenFieldsAreTyped() throws Exception {
Event.class);

Assertions.assertEquals("m-1", event.getMessageId());
Assertions.assertEquals("m-1", event.getAdditionalFields().get("message_id"));
Assertions.assertEquals("sm-1", event.getScheduledMessage().getId());
Assertions.assertFalse(event.getAdditionalFields().containsKey("scheduled_message"));
}

@DisplayName("message.new events keep message_id in additional fields")
@Test
void whenEventIsMessageNew_thenMessageIdStaysInAdditionalFields() throws Exception {
String json =
"{\"type\":\"message.new\",\"cid\":\"messaging:general\",\"message_id\":\"m-2\","
+ "\"message\":{\"id\":\"m-2\",\"text\":\"hi\"}}";
Event event = MAPPER.readValue(json, Event.class);

Assertions.assertEquals("m-2", event.getAdditionalFields().get("message_id"));
Assertions.assertEquals("m-2", event.getMessageId());
Assertions.assertEquals("m-2", event.getMessage().getId());

String out = MAPPER.writeValueAsString(event);
Assertions.assertEquals(1, out.split("\"message_id\"", -1).length - 1, out);
Assertions.assertFalse(out.contains("messageId"), out);
}
}
Loading