Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@ import io.getstream.chat.android.client.api2.model.requests.QueryBannedUsersRequ
import io.getstream.chat.android.client.api2.model.requests.QueryDraftMessagesRequest
import io.getstream.chat.android.client.api2.model.requests.RejectInviteRequest
import io.getstream.chat.android.client.api2.model.requests.RemoveMembersRequest
import io.getstream.chat.android.client.api2.model.requests.SendEventRequest
import io.getstream.chat.android.client.api2.model.requests.SendMessageRequest
import io.getstream.chat.android.client.api2.model.requests.SyncHistoryRequest
import io.getstream.chat.android.client.api2.model.requests.TruncateChannelRequest
Expand Down Expand Up @@ -143,6 +142,7 @@ import io.getstream.chat.android.network.models.CreateReminderRequest
import io.getstream.chat.android.network.models.CreateUserGroupRequest
import io.getstream.chat.android.network.models.CreateUserGroupResponse
import io.getstream.chat.android.network.models.DeliveredMessagePayload
import io.getstream.chat.android.network.models.EventRequest
import io.getstream.chat.android.network.models.GetUserGroupResponse
import io.getstream.chat.android.network.models.HideChannelRequest
import io.getstream.chat.android.network.models.ListUserGroupsResponse
Expand All @@ -161,6 +161,7 @@ import io.getstream.chat.android.network.models.QueryRemindersRequest
import io.getstream.chat.android.network.models.RemoveUserGroupMembersRequest
import io.getstream.chat.android.network.models.RemoveUserGroupMembersResponse
import io.getstream.chat.android.network.models.SearchUserGroupsResponse
import io.getstream.chat.android.network.models.SendEventRequest
import io.getstream.chat.android.network.models.SendReactionRequest
import io.getstream.chat.android.network.models.SortParamRequest
import io.getstream.chat.android.network.models.UnblockUsersRequest
Expand Down Expand Up @@ -1670,13 +1671,14 @@ constructor(
channelId: String,
extraData: Map<Any, Any>,
): Call<ChatEvent> = with(eventMapping) {
val map = mutableMapOf<Any, Any>("type" to eventType)
map.putAll(extraData)
val custom = extraData.entries.associate { (key, value) -> key.toString() to value }

return channelApi.sendEvent(
channelType = channelType,
channelId = channelId,
request = SendEventRequest(map),
request = SendEventRequest(
event = EventRequest(type = eventType, custom = custom),
),
Comment thread
coderabbitai[bot] marked this conversation as resolved.
).map { response ->
response.event.toDomain()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import io.getstream.chat.android.client.api2.model.requests.PinnedMessagesReques
import io.getstream.chat.android.client.api2.model.requests.QueryChannelRequest
import io.getstream.chat.android.client.api2.model.requests.RejectInviteRequest
import io.getstream.chat.android.client.api2.model.requests.RemoveMembersRequest
import io.getstream.chat.android.client.api2.model.requests.SendEventRequest
import io.getstream.chat.android.client.api2.model.requests.TruncateChannelRequest
import io.getstream.chat.android.client.api2.model.requests.UpdateChannelRequest
import io.getstream.chat.android.client.api2.model.requests.UpdateMemberPartialResponse
Expand All @@ -43,6 +42,7 @@ import io.getstream.chat.android.network.models.MarkReadRequest
import io.getstream.chat.android.network.models.MarkUnreadRequest
import io.getstream.chat.android.network.models.QueryChannelsRequest
import io.getstream.chat.android.network.models.Response
import io.getstream.chat.android.network.models.SendEventRequest
import io.getstream.chat.android.network.models.UpdateChannelPartialRequest
import io.getstream.chat.android.network.models.UpdateMemberPartialRequest
import retrofit2.http.Body
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import io.getstream.chat.android.client.parser2.adapters.DownstreamThreadDtoAdap
import io.getstream.chat.android.client.parser2.adapters.DownstreamThreadInfoDtoAdapter
import io.getstream.chat.android.client.parser2.adapters.DownstreamUserDtoAdapter
import io.getstream.chat.android.client.parser2.adapters.EventAdapterFactory
import io.getstream.chat.android.client.parser2.adapters.EventRequestAdapter
import io.getstream.chat.android.client.parser2.adapters.ExactDateAdapter
import io.getstream.chat.android.client.parser2.adapters.PollOptionInputAdapter
import io.getstream.chat.android.client.parser2.adapters.PollOptionRequestAdapter
Expand Down Expand Up @@ -97,6 +98,7 @@ internal class MoshiChatParser(
.add(UpdatePollOptionRequestAdapter)
.add(PollOptionInputAdapter)
.add(PollOptionRequestAdapter)
.add(EventRequestAdapter)
.add(
CreatePollRequest.VotingVisibility::class.java,
CreatePollRequest.VotingVisibility.VotingVisibilityAdapter(),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* Copyright (c) 2014-2026 Stream.io Inc. All rights reserved.
*
* Licensed under the Stream License;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://github.com/GetStream/stream-chat-android/blob/main/LICENSE
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package io.getstream.chat.android.client.parser2.adapters

import com.squareup.moshi.FromJson
import com.squareup.moshi.JsonAdapter
import com.squareup.moshi.JsonReader
import com.squareup.moshi.JsonWriter
import com.squareup.moshi.ToJson
import io.getstream.chat.android.network.models.EventRequest

internal object EventRequestAdapter :
CustomObjectDtoAdapter<EventRequest>(
kClass = EventRequest::class,
extraDataPropertyName = "custom",
) {

@FromJson
@Suppress("UNUSED_PARAMETER")
fun fromJson(jsonReader: JsonReader): EventRequest = error("Can't parse this from Json")

@ToJson
fun toJson(
jsonWriter: JsonWriter,
event: EventRequest?,
mapAdapter: JsonAdapter<MutableMap<String, Any?>>,
eventAdapter: JsonAdapter<EventRequest>,
) = serializeWithExtraData(jsonWriter, event, mapAdapter, eventAdapter)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* Copyright (c) 2014-2026 Stream.io Inc. All rights reserved.
*
* Licensed under the Stream License;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://github.com/GetStream/stream-chat-android/blob/main/LICENSE
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

@file:Suppress(
"ArrayInDataClass",
"EnumEntryName",
"RemoveRedundantQualifierName",
"UnusedImport",
)

package io.getstream.chat.android.network.models

import com.squareup.moshi.Json

/**
*
*/

@com.squareup.moshi.JsonClass(generateAdapter = true)
internal data class EventRequest(
@Json(name = "type")
internal val type: String,

@Json(name = "parent_id")
internal val parentId: String? = null,

@Json(name = "custom")
internal val custom: Map<String, Any?>? = emptyMap(),
)
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,23 @@
* limitations under the License.
*/

package io.getstream.chat.android.client.api2.model.requests
@file:Suppress(
"ArrayInDataClass",
"EnumEntryName",
"RemoveRedundantQualifierName",
"UnusedImport",
)

package io.getstream.chat.android.network.models

import com.squareup.moshi.Json

import com.squareup.moshi.JsonClass
/**
*
*/

@JsonClass(generateAdapter = true)
@com.squareup.moshi.JsonClass(generateAdapter = true)
internal data class SendEventRequest(
val event: Map<Any, Any>,
@Json(name = "event")
internal val event: io.getstream.chat.android.network.models.EventRequest,
)
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ import io.getstream.chat.android.client.api2.model.requests.MuteUserRequest
import io.getstream.chat.android.client.api2.model.requests.PinnedMessagesRequest
import io.getstream.chat.android.client.api2.model.requests.QueryBannedUsersRequest
import io.getstream.chat.android.client.api2.model.requests.RejectInviteRequest
import io.getstream.chat.android.client.api2.model.requests.SendEventRequest
import io.getstream.chat.android.client.api2.model.requests.UpdateLiveLocationRequest
import io.getstream.chat.android.client.api2.model.requests.UpdateMemberPartialResponse
import io.getstream.chat.android.client.api2.model.requests.UpsertPushPreferencesRequest
Expand Down Expand Up @@ -142,6 +141,7 @@ import io.getstream.chat.android.network.models.CreateReminderRequest
import io.getstream.chat.android.network.models.CreateUserGroupRequest
import io.getstream.chat.android.network.models.CreateUserGroupResponse
import io.getstream.chat.android.network.models.DeliveredMessagePayload
import io.getstream.chat.android.network.models.EventRequest
import io.getstream.chat.android.network.models.GetApplicationResponse
import io.getstream.chat.android.network.models.GetUserGroupResponse
import io.getstream.chat.android.network.models.GroupedChannelsGroupRequest
Expand All @@ -166,6 +166,7 @@ import io.getstream.chat.android.network.models.RemoveUserGroupMembersResponse
import io.getstream.chat.android.network.models.Response
import io.getstream.chat.android.network.models.SearchRolesResponse
import io.getstream.chat.android.network.models.SearchUserGroupsResponse
import io.getstream.chat.android.network.models.SendEventRequest
import io.getstream.chat.android.network.models.SortParamRequest
import io.getstream.chat.android.network.models.UnblockUsersRequest
import io.getstream.chat.android.network.models.UnblockUsersResponse
Expand Down Expand Up @@ -2355,7 +2356,7 @@ internal class MoshiChatApiTest {
val result = sut.sendEvent(eventType, channelType, channelId, extraData).await()
// then
val expectedRequest = SendEventRequest(
event = extraData + mapOf("type" to eventType),
event = EventRequest(type = eventType, custom = emptyMap()),
)
result `should be instance of` expected
verify(api, times(1)).sendEvent(channelType, channelId, expectedRequest)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* Copyright (c) 2014-2026 Stream.io Inc. All rights reserved.
*
* Licensed under the Stream License;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://github.com/GetStream/stream-chat-android/blob/main/LICENSE
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package io.getstream.chat.android.client.parser2

import io.getstream.chat.android.network.models.EventRequest
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test

internal class EventRequestAdapterTest {
private val parser = ParserFactory.createMoshiChatParser()

@Test
fun `Serialize EventRequest with custom fields flattened to root`() {
val request = EventRequest(
type = "typing.start",
custom = mapOf("customKey" to "customValue"),
)
val json = parser.toJson(request)
Assertions.assertEquals(
"""{"type":"typing.start","customKey":"customValue"}""",
json,
)
}

@Test
fun `Serialize EventRequest without custom fields`() {
val request = EventRequest(type = "typing.start", custom = emptyMap())
val json = parser.toJson(request)
Assertions.assertEquals("""{"type":"typing.start"}""", json)
}
}
Loading