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 @@ -38,7 +38,6 @@ import io.getstream.chat.android.client.api2.model.dto.DownstreamModerationDto
import io.getstream.chat.android.client.api2.model.dto.DownstreamMuteDto
import io.getstream.chat.android.client.api2.model.dto.DownstreamPendingMessageDto
import io.getstream.chat.android.client.api2.model.dto.DownstreamPollDto
import io.getstream.chat.android.client.api2.model.dto.DownstreamPollOptionDto
import io.getstream.chat.android.client.api2.model.dto.DownstreamPushPreferenceDto
import io.getstream.chat.android.client.api2.model.dto.DownstreamReactionDto
import io.getstream.chat.android.client.api2.model.dto.DownstreamReactionGroupDto
Expand Down Expand Up @@ -663,11 +662,11 @@ internal class DomainMapping(
val votes = latest_votes_by_option
?.values
?.flatten()
?.filter { it.is_answer != true }
?.filter { it.isAnswer != true }
?.map { it.toDomain() } ?: emptyList()
val ownVotes = (
own_votes
.filter { it.is_answer != true }
.filter { it.isAnswer != true }
.map { it.toDomain() } +
votes.filter { it.user?.id == ownUserId }
)
Expand All @@ -681,7 +680,7 @@ internal class DomainMapping(
id = id,
name = name,
description = description,
options = options.map { it.toDomain() },
options = options.map { it.toOption() },
votingVisibility = voting_visibility.toVotingVisibility(),
enforceUniqueVote = enforce_unique_vote,
maxVotesAllowed = max_votes_allowed,
Expand Down Expand Up @@ -787,8 +786,7 @@ internal class DomainMapping(
/**
* Transforms [PollOptionResponseData] to [Option].
*
* Not named `toDomain` because that maps to [PollOption], mirroring the hand-written
* [DownstreamPollOptionDto.toDomain] / [DownstreamPollOptionDto.toPollOption] pair.
* Not named `toDomain` because that name maps to [PollOption] instead.
*/
internal fun PollOptionResponseData.toOption(): Option = Option(
id = id,
Expand All @@ -805,27 +803,6 @@ internal class DomainMapping(
extraData = custom.mapNotNull { (key, value) -> value?.let { key to it } }.toMap(),
)

/**
* Transforms [DownstreamPollOptionDto] to [Option]
*
* @return Option
*/
internal fun DownstreamPollOptionDto.toDomain(): Option = Option(
id = id,
text = text,
extraData = extraData ?: emptyMap(),
)

/**
* Transforms [DownstreamPollOptionDto] to [PollOption].
* Note: Not following the naming convention because of clash with the existing [DownstreamPollOptionDto.toDomain].
*/
internal fun DownstreamPollOptionDto.toPollOption(): PollOption = PollOption(
id = id,
text = text,
extraData = extraData ?: emptyMap(),
)

/**
* Transforms DownstreamVoteDto to Vote
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,10 @@
package io.getstream.chat.android.client.api2.model.dto

import com.squareup.moshi.JsonClass
import io.getstream.chat.android.network.models.PollOptionResponseData
import io.getstream.chat.android.network.models.PollVoteResponseData
import java.util.Date

/**
* Represents the DTO for the option of a poll.
*
* @property id The id of the option.
* @property text The text of the option.
* @property extraData Any extra data associated with the option.
*/
@JsonClass(generateAdapter = true)
internal data class DownstreamPollOptionDto(
val id: String,
val text: String,
val extraData: Map<String, Any>?,
) : ExtraDataDto

/**
* Represents the DTO for a vote in a poll.
*
Expand Down Expand Up @@ -94,12 +82,12 @@
val enforce_unique_vote: Boolean,
val id: String,
val is_closed: Boolean?,
val latest_answers: List<DownstreamVoteDto>?,
val latest_votes_by_option: Map<String, List<DownstreamVoteDto>>?,
val latest_answers: List<PollVoteResponseData>?,

Check warning on line 85 in stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/dto/PollsDtos.kt

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Rename this parameter to match the regular expression ^`?[_a-z][a-zA-Z0-9]*`?$

See more on https://sonarcloud.io/project/issues?id=GetStream_stream-chat-android&issues=AaCAdOd-XUr7juKV6mUg&open=AaCAdOd-XUr7juKV6mUg&pullRequest=6684
val latest_votes_by_option: Map<String, List<PollVoteResponseData>>?,

Check warning on line 86 in stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/dto/PollsDtos.kt

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Rename this parameter to match the regular expression ^`?[_a-z][a-zA-Z0-9]*`?$

See more on https://sonarcloud.io/project/issues?id=GetStream_stream-chat-android&issues=AaCAdOd-XUr7juKV6mUh&open=AaCAdOd-XUr7juKV6mUh&pullRequest=6684
val max_votes_allowed: Int?,
val name: String,
val options: List<DownstreamPollOptionDto>,
val own_votes: List<DownstreamVoteDto>,
val options: List<PollOptionResponseData>,
val own_votes: List<PollVoteResponseData>,

Check warning on line 90 in stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/dto/PollsDtos.kt

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Rename this parameter to match the regular expression ^`?[_a-z][a-zA-Z0-9]*`?$

See more on https://sonarcloud.io/project/issues?id=GetStream_stream-chat-android&issues=AaCAdOd-XUr7juKV6mUi&open=AaCAdOd-XUr7juKV6mUi&pullRequest=6684
val updated_at: Date,
val vote_count: Int,
val vote_counts_by_option: Map<String, Int>?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ import io.getstream.chat.android.client.parser2.adapters.DownstreamMemberInfoDto
import io.getstream.chat.android.client.parser2.adapters.DownstreamMessageDtoAdapter
import io.getstream.chat.android.client.parser2.adapters.DownstreamModerationDetailsDtoAdapter
import io.getstream.chat.android.client.parser2.adapters.DownstreamPollDtoAdapter
import io.getstream.chat.android.client.parser2.adapters.DownstreamPollOptionDtoAdapter
import io.getstream.chat.android.client.parser2.adapters.DownstreamReactionDtoAdapter
import io.getstream.chat.android.client.parser2.adapters.DownstreamThreadDtoAdapter
import io.getstream.chat.android.client.parser2.adapters.DownstreamThreadInfoDtoAdapter
Expand Down Expand Up @@ -119,7 +118,6 @@ internal class MoshiChatParser(
.add(DownstreamThreadDtoAdapter)
.add(DownstreamThreadInfoDtoAdapter)
.add(DownstreamPollDtoAdapter)
.add(DownstreamPollOptionDtoAdapter)
.add(CreatePollRequestAdapter)
.add(UpdatePollRequestAdapter)
.add(CreatePollOptionRequestAdapter)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import com.squareup.moshi.JsonReader
import com.squareup.moshi.JsonWriter
import com.squareup.moshi.ToJson
import io.getstream.chat.android.client.api2.model.dto.DownstreamPollDto
import io.getstream.chat.android.client.api2.model.dto.DownstreamPollOptionDto
import io.getstream.chat.android.network.models.CreatePollOptionRequest
import io.getstream.chat.android.network.models.CreatePollRequest
import io.getstream.chat.android.network.models.PollOptionInput
Expand All @@ -47,24 +46,6 @@ internal object DownstreamPollDtoAdapter : CustomObjectDtoAdapter<DownstreamPoll
fun toJson(jsonWriter: JsonWriter, value: DownstreamPollDto): Unit = error("Can't convert this to Json")
}

/**
* Deserializer for [DownstreamPollOptionDto] that handles the
* [io.getstream.chat.android.client.api2.model.dto.ExtraDataDto] implementation.
*/
internal object DownstreamPollOptionDtoAdapter :
CustomObjectDtoAdapter<DownstreamPollOptionDto>(DownstreamPollOptionDto::class) {

@FromJson
fun fromJson(
jsonReader: JsonReader,
mapAdapter: JsonAdapter<MutableMap<String, Any>>,
optionAdapter: JsonAdapter<DownstreamPollOptionDto>,
): DownstreamPollOptionDto? = parseWithExtraData(jsonReader, mapAdapter, optionAdapter)

@ToJson
fun toJson(jsonWriter: JsonWriter, value: DownstreamPollOptionDto): Unit = error("Can't convert this to Json")
}

// The generated poll write-request models carry custom data in a `custom` field that must be
// flattened to the JSON root on the wire; extraDataPropertyName matches their @Json(name = "custom").

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ import io.getstream.chat.android.client.api2.model.dto.DownstreamModerationDto
import io.getstream.chat.android.client.api2.model.dto.DownstreamMuteDto
import io.getstream.chat.android.client.api2.model.dto.DownstreamPendingMessageDto
import io.getstream.chat.android.client.api2.model.dto.DownstreamPollDto
import io.getstream.chat.android.client.api2.model.dto.DownstreamPollOptionDto
import io.getstream.chat.android.client.api2.model.dto.DownstreamPushPreferenceDto
import io.getstream.chat.android.client.api2.model.dto.DownstreamReactionDto
import io.getstream.chat.android.client.api2.model.dto.DownstreamReactionGroupDto
Expand Down Expand Up @@ -1224,14 +1223,16 @@ internal object Mother {
maxVotesAllowed: Int? = randomInt(),
allowUserSuggestedOptions: Boolean = randomBoolean(),
allowAnswers: Boolean = randomBoolean(),
options: List<DownstreamPollOptionDto> = listOf(randomDownstreamOptionDto()),
options: List<PollOptionResponseData> = listOf(randomPollOptionResponseData()),
voteCountsByOption: Map<String, Int> = emptyMap(),
latestVotesByOption: Map<String, List<DownstreamVoteDto>> = emptyMap(),
latestAnswers: List<DownstreamVoteDto> = listOf(randomAnswerDownstreamVoteDto()),
latestVotesByOption: Map<String, List<PollVoteResponseData>> = emptyMap(),
latestAnswers: List<PollVoteResponseData> = listOf(
randomPollVoteResponseData(isAnswer = true, answerText = randomString()),
),
createdAt: Date = randomDate(),
createdBy: DownstreamUserDto = randomDownstreamUserDto(),
createdById: String = randomString(),
ownVotes: List<DownstreamVoteDto> = listOf(randomDownstreamVoteDto()),
ownVotes: List<PollVoteResponseData> = listOf(randomPollVoteResponseData()),
updatedAt: Date = randomDate(),
voteCount: Int = randomInt(),
answersCount: Int = randomInt(),
Expand Down Expand Up @@ -1271,16 +1272,6 @@ internal object Mother {
custom = custom,
)

fun randomDownstreamOptionDto(
id: String = randomString(),
text: String = randomString(),
extraData: Map<String, Any> = randomExtraData(1),
): DownstreamPollOptionDto = DownstreamPollOptionDto(
id = id,
text = text,
extraData = extraData,
)

fun randomDownstreamVoteDto(
id: String = randomString(),
pollId: String = randomString(),
Expand Down Expand Up @@ -1415,12 +1406,18 @@ internal object Mother {
id: String = randomString(),
pollId: String = randomString(),
optionId: String = randomString(),
isAnswer: Boolean? = null,
answerText: String? = null,
user: UserResponse? = null,
): PollVoteResponseData = PollVoteResponseData(
id = id,
pollId = pollId,
optionId = optionId,
createdAt = randomDate(),
updatedAt = randomDate(),
isAnswer = isAnswer,
answerText = answerText,
user = user,
)

fun randomQueryPollsResponse(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import io.getstream.chat.android.PrivacySettings
import io.getstream.chat.android.ReadReceipts
import io.getstream.chat.android.TypingIndicators
import io.getstream.chat.android.client.Mother
import io.getstream.chat.android.client.Mother.randomAnswerDownstreamVoteDto
import io.getstream.chat.android.client.Mother.randomAppResponseFields
import io.getstream.chat.android.client.Mother.randomAppSettingsResponse
import io.getstream.chat.android.client.Mother.randomAttachmentDto
Expand All @@ -43,7 +42,6 @@ import io.getstream.chat.android.client.Mother.randomDownstreamMessageDto
import io.getstream.chat.android.client.Mother.randomDownstreamModerationDetailsDto
import io.getstream.chat.android.client.Mother.randomDownstreamModerationDto
import io.getstream.chat.android.client.Mother.randomDownstreamMuteDto
import io.getstream.chat.android.client.Mother.randomDownstreamOptionDto
import io.getstream.chat.android.client.Mother.randomDownstreamPendingMessageDto
import io.getstream.chat.android.client.Mother.randomDownstreamPollDto
import io.getstream.chat.android.client.Mother.randomDownstreamReactionDto
Expand All @@ -53,10 +51,11 @@ import io.getstream.chat.android.client.Mother.randomDownstreamThreadDto
import io.getstream.chat.android.client.Mother.randomDownstreamThreadInfoDto
import io.getstream.chat.android.client.Mother.randomDownstreamUserDto
import io.getstream.chat.android.client.Mother.randomDownstreamUserGroupDto
import io.getstream.chat.android.client.Mother.randomDownstreamVoteDto
import io.getstream.chat.android.client.Mother.randomFileUploadConfig
import io.getstream.chat.android.client.Mother.randomFullUserResponse
import io.getstream.chat.android.client.Mother.randomPollOptionResponseData
import io.getstream.chat.android.client.Mother.randomPollResponseData
import io.getstream.chat.android.client.Mother.randomPollVoteResponseData
import io.getstream.chat.android.client.Mother.randomPollVotesResponse
import io.getstream.chat.android.client.Mother.randomPrivacySettingsDto
import io.getstream.chat.android.client.Mother.randomQueryPollsResponse
Expand Down Expand Up @@ -1035,12 +1034,12 @@ internal class DomainMappingTest {
@Suppress("LongMethod")
fun `DownstreamPollDto is correctly mapped to Poll`() {
val options = listOf(
randomDownstreamOptionDto(),
randomDownstreamOptionDto(),
randomPollOptionResponseData(custom = mapOf("optionKey" to "optionValue")),
randomPollOptionResponseData(),
)
val ownVote = randomDownstreamVoteDto()
val otherVote = randomDownstreamVoteDto()
val answer = randomAnswerDownstreamVoteDto()
val ownVote = randomPollVoteResponseData(user = randomUserResponse())
val otherVote = randomPollVoteResponseData(user = randomUserResponse())
val answer = randomPollVoteResponseData(isAnswer = true, answerText = randomString())
val pollDto = randomDownstreamPollDto(
options = options,
ownVotes = listOf(ownVote),
Expand All @@ -1057,7 +1056,7 @@ internal class DomainMappingTest {
name = pollDto.name,
description = pollDto.description,
options = options.map {
Option(it.id, it.text, it.extraData ?: emptyMap())
Option(it.id, it.text, it.custom.mapNotNull { (k, v) -> v?.let { k to it } }.toMap())
},
votingVisibility = VotingVisibility.PUBLIC,
enforceUniqueVote = pollDto.enforce_unique_vote,
Expand All @@ -1069,28 +1068,28 @@ internal class DomainMappingTest {
votes = listOf(
Vote(
id = ownVote.id,
pollId = ownVote.poll_id,
optionId = ownVote.option_id,
createdAt = ownVote.created_at,
updatedAt = ownVote.updated_at,
pollId = ownVote.pollId,
optionId = ownVote.optionId,
createdAt = ownVote.createdAt,
updatedAt = ownVote.updatedAt,
user = with(sut) { ownVote.user?.toDomain() },
),
Vote(
id = otherVote.id,
pollId = otherVote.poll_id,
optionId = otherVote.option_id,
createdAt = otherVote.created_at,
updatedAt = otherVote.updated_at,
pollId = otherVote.pollId,
optionId = otherVote.optionId,
createdAt = otherVote.createdAt,
updatedAt = otherVote.updatedAt,
user = with(sut) { otherVote.user?.toDomain() },
),
),
ownVotes = listOf(
Vote(
id = ownVote.id,
pollId = ownVote.poll_id,
optionId = ownVote.option_id,
createdAt = ownVote.created_at,
updatedAt = ownVote.updated_at,
pollId = ownVote.pollId,
optionId = ownVote.optionId,
createdAt = ownVote.createdAt,
updatedAt = ownVote.updatedAt,
user = with(sut) { ownVote.user?.toDomain() },
),
),
Expand All @@ -1101,10 +1100,10 @@ internal class DomainMappingTest {
answers = listOf(
Answer(
id = answer.id,
pollId = answer.poll_id,
text = answer.answer_text ?: "",
createdAt = answer.created_at,
updatedAt = answer.updated_at,
pollId = answer.pollId,
text = answer.answerText ?: "",
createdAt = answer.createdAt,
updatedAt = answer.updatedAt,
user = with(sut) { answer.user?.toDomain() },
),
),
Expand Down

This file was deleted.

Loading
Loading