Skip to content

Commit cd5562b

Browse files
authored
[AND-420] Expose ChatClient.deletePoll operation. (#5696)
* [AND-420] Expose ChatClient.deletePoll operation. * [AND-420] Apply spotless. * [AND-420] Add test for handling PollDeletedEvent. * [AND-420] Update CHANGELOG.md. * [AND-420] Remove PollRepository and use MessageRepository to handle poll-related operations. --------- Co-authored-by: PetarVelikov <petar.velikov@getstream.io>
1 parent c08bd97 commit cd5562b

25 files changed

Lines changed: 244 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
### ✅ Added
2020
- Add `lastReadMessageId` field to `MessageReadEvent` and `NotificationMarkReadEvent`. [#5710](https://github.com/GetStream/stream-chat-android/pull/5710)
21+
- Add `ChatClient.deletePoll(String)` method to delete a Poll by its ID. [#5696](https://github.com/GetStream/stream-chat-android/pull/5696)
2122

2223
### ⚠️ Changed
2324

stream-chat-android-client-test/src/main/java/io/getstream/chat/android/client/test/Mother.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import io.getstream.chat.android.client.events.NotificationMarkUnreadEvent
3838
import io.getstream.chat.android.client.events.NotificationMessageNewEvent
3939
import io.getstream.chat.android.client.events.NotificationMutesUpdatedEvent
4040
import io.getstream.chat.android.client.events.NotificationRemovedFromChannelEvent
41+
import io.getstream.chat.android.client.events.PollDeletedEvent
4142
import io.getstream.chat.android.client.events.ReactionNewEvent
4243
import io.getstream.chat.android.client.events.TypingStartEvent
4344
import io.getstream.chat.android.client.events.TypingStopEvent
@@ -51,6 +52,7 @@ import io.getstream.chat.android.models.FilterObject
5152
import io.getstream.chat.android.models.Member
5253
import io.getstream.chat.android.models.Message
5354
import io.getstream.chat.android.models.NeutralFilterObject
55+
import io.getstream.chat.android.models.Poll
5456
import io.getstream.chat.android.models.Reaction
5557
import io.getstream.chat.android.models.User
5658
import io.getstream.chat.android.models.querysort.QuerySortByField
@@ -62,6 +64,7 @@ import io.getstream.chat.android.randomDate
6264
import io.getstream.chat.android.randomInt
6365
import io.getstream.chat.android.randomMember
6466
import io.getstream.chat.android.randomMessage
67+
import io.getstream.chat.android.randomPoll
6568
import io.getstream.chat.android.randomReaction
6669
import io.getstream.chat.android.randomString
6770
import io.getstream.chat.android.randomUser
@@ -630,3 +633,22 @@ public fun randomChannelUserBannedEvent(
630633
channelLastMessageAt = channelLastMessageAt,
631634
)
632635
}
636+
637+
public fun randomPollDeletedEvent(
638+
createdAt: Date = randomDate(),
639+
cid: String = randomCID(),
640+
poll: Poll = randomPoll(),
641+
channelLastMessageAt: Date = randomDate(),
642+
): PollDeletedEvent {
643+
val (type, id) = cid.cidToTypeAndId()
644+
return PollDeletedEvent(
645+
type = EventType.POLL_DELETED,
646+
createdAt = createdAt,
647+
rawCreatedAt = streamFormatter.format(createdAt),
648+
cid = cid,
649+
channelType = type,
650+
channelId = id,
651+
poll = poll,
652+
channelLastMessageAt = channelLastMessageAt,
653+
)
654+
}

stream-chat-android-client/api/stream-chat-android-client.api

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public final class io/getstream/chat/android/client/ChatClient {
5050
public final fun deleteMessage (Ljava/lang/String;)Lio/getstream/result/call/Call;
5151
public final fun deleteMessage (Ljava/lang/String;Z)Lio/getstream/result/call/Call;
5252
public static synthetic fun deleteMessage$default (Lio/getstream/chat/android/client/ChatClient;Ljava/lang/String;ZILjava/lang/Object;)Lio/getstream/result/call/Call;
53+
public final fun deletePoll (Ljava/lang/String;)Lio/getstream/result/call/Call;
5354
public final fun deleteReaction (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lio/getstream/result/call/Call;
5455
public static synthetic fun deleteReaction$default (Lio/getstream/chat/android/client/ChatClient;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/result/call/Call;
5556
public final fun devToken (Ljava/lang/String;)Ljava/lang/String;
@@ -2744,6 +2745,7 @@ public abstract interface class io/getstream/chat/android/client/persistance/rep
27442745
public abstract fun deleteChannelMessages (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
27452746
public abstract fun deleteChannelMessagesBefore (Ljava/lang/String;Ljava/util/Date;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
27462747
public abstract fun deleteDraftMessage (Lio/getstream/chat/android/models/DraftMessage;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
2748+
public abstract fun deletePoll (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
27472749
public abstract fun evictMessage (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
27482750
public abstract fun evictMessages (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
27492751
public abstract fun insertDraftMessage (Lio/getstream/chat/android/models/DraftMessage;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;

stream-chat-android-client/src/main/java/io/getstream/chat/android/client/ChatClient.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1614,6 +1614,17 @@ internal constructor(
16141614
return api.closePoll(pollId)
16151615
}
16161616

1617+
/**
1618+
* Deletes a poll.
1619+
*
1620+
* @param pollId The ID of the poll to delete.
1621+
* @return Executable async [Call] responsible for deleting a poll.
1622+
*/
1623+
@CheckResult
1624+
public fun deletePoll(pollId: String): Call<Unit> {
1625+
return api.deletePoll(pollId)
1626+
}
1627+
16171628
/**
16181629
* Retrieves the file attachments from the given channel.
16191630
*

stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api/ChatApi.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,9 @@ internal interface ChatApi {
542542
@CheckResult
543543
fun closePoll(pollId: String): Call<Poll>
544544

545+
@CheckResult
546+
fun deletePoll(pollId: String): Call<Unit>
547+
545548
fun warmUp()
546549

547550
fun releaseConnection()

stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/MoshiChatApi.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1435,6 +1435,10 @@ constructor(
14351435
).mapDomain { it.poll.toDomain() }
14361436
}
14371437

1438+
override fun deletePoll(pollId: String): Call<Unit> {
1439+
return pollsApi.deletePoll(pollId).toUnitCall()
1440+
}
1441+
14381442
override fun warmUp() {
14391443
generalApi.warmUp().enqueue()
14401444
}

stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/endpoint/PollsApi.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import io.getstream.chat.android.client.api2.model.requests.PollRequest
2121
import io.getstream.chat.android.client.api2.model.requests.PollUpdateRequest
2222
import io.getstream.chat.android.client.api2.model.requests.PollVoteRequest
2323
import io.getstream.chat.android.client.api2.model.requests.SuggestPollOptionRequest
24+
import io.getstream.chat.android.client.api2.model.response.CompletableResponse
2425
import io.getstream.chat.android.client.api2.model.response.PollResponse
2526
import io.getstream.chat.android.client.api2.model.response.PollVoteResponse
2627
import io.getstream.chat.android.client.api2.model.response.SuggestPollOptionResponse
@@ -103,4 +104,12 @@ internal interface PollsApi {
103104
@Path("poll_id") pollId: String,
104105
@Body pollUpdateRequest: PollUpdateRequest,
105106
): RetrofitCall<PollResponse>
107+
108+
/**
109+
* Deletes a poll.
110+
*
111+
* @param pollId The ID of the poll to delete.
112+
*/
113+
@DELETE("/polls/{poll_id}")
114+
fun deletePoll(@Path("poll_id") pollId: String): RetrofitCall<CompletableResponse>
106115
}

stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/dto/PollsDtos.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ internal data class DownstreamPollDto(
9292
val latest_votes_by_option: Map<String, List<DownstreamVoteDto>>?,
9393
val latest_answers: List<DownstreamVoteDto>?,
9494
val created_at: Date,
95-
val created_by: DownstreamUserDto,
95+
val created_by: DownstreamUserDto?,
9696
val created_by_id: String,
9797
val own_votes: List<DownstreamVoteDto>,
9898
val updated_at: Date,

stream-chat-android-client/src/main/java/io/getstream/chat/android/client/persistance/repository/MessageRepository.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,13 @@ public interface MessageRepository {
160160
*/
161161
public suspend fun evictMessage(messageId: String)
162162

163+
/**
164+
* Deletes a Poll by its ID.
165+
*
166+
* @param pollId The ID of the Poll to delete.
167+
*/
168+
public suspend fun deletePoll(pollId: String)
169+
163170
/**
164171
* Clear messages of this repository.
165172
*/

stream-chat-android-client/src/main/java/io/getstream/chat/android/client/persistance/repository/noop/NoOpMessageRepository.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ internal object NoOpMessageRepository : MessageRepository {
4444
override suspend fun insertDraftMessage(message: DraftMessage) { /* No-Op */ }
4545
override suspend fun evictMessages() { /* No-Op */ }
4646
override suspend fun evictMessage(messageId: String) { /* No-Op */ }
47+
override suspend fun deletePoll(pollId: String) { /* No-Op */ }
4748

4849
override suspend fun clear() { /* No-Op */ }
4950
override suspend fun selectMessagesForChannel(

0 commit comments

Comments
 (0)