Skip to content

Commit 3ff3f45

Browse files
author
Rafael Marinho
committed
[CHA-1610] Add support channels batch update
1 parent 3d89119 commit 3ff3f45

File tree

2 files changed

+226
-0
lines changed

2 files changed

+226
-0
lines changed
Lines changed: 211 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,211 @@
1+
# typed: strict
2+
# frozen_string_literal: true
3+
4+
require 'stream-chat/client'
5+
require 'stream-chat/stream_response'
6+
require 'stream-chat/types'
7+
8+
module StreamChat
9+
class ChannelBatchUpdater
10+
extend T::Sig
11+
12+
sig { params(client: StreamChat::Client).void }
13+
def initialize(client)
14+
@client = client
15+
end
16+
17+
# Member operations
18+
19+
# addMembers - Add members to channels matching the filter
20+
# @param filter [StringKeyHash] Filter to select channels
21+
# @param members [T.any(T::Array[String], T::Array[StringKeyHash])] Members to add
22+
# @return [StreamChat::StreamResponse] The server response
23+
sig { params(filter: StringKeyHash, members: T.any(T::Array[String], T::Array[StringKeyHash])).returns(StreamChat::StreamResponse) }
24+
def add_members(filter, members)
25+
@client.update_channels_batch(
26+
{
27+
operation: 'addMembers',
28+
filter: filter,
29+
members: members
30+
}
31+
)
32+
end
33+
34+
# removeMembers - Remove members from channels matching the filter
35+
# @param filter [StringKeyHash] Filter to select channels
36+
# @param members [T::Array[String]] Member IDs to remove
37+
# @return [StreamChat::StreamResponse] The server response
38+
sig { params(filter: StringKeyHash, members: T::Array[String]).returns(StreamChat::StreamResponse) }
39+
def remove_members(filter, members)
40+
@client.update_channels_batch(
41+
{
42+
operation: 'removeMembers',
43+
filter: filter,
44+
members: members
45+
}
46+
)
47+
end
48+
49+
# inviteMembers - Invite members to channels matching the filter
50+
# @param filter [StringKeyHash] Filter to select channels
51+
# @param members [T.any(T::Array[String], T::Array[StringKeyHash])] Members to invite
52+
# @return [StreamChat::StreamResponse] The server response
53+
sig { params(filter: StringKeyHash, members: T.any(T::Array[String], T::Array[StringKeyHash])).returns(StreamChat::StreamResponse) }
54+
def invite_members(filter, members)
55+
@client.update_channels_batch(
56+
{
57+
operation: 'invites',
58+
filter: filter,
59+
members: members
60+
}
61+
)
62+
end
63+
64+
# addModerators - Add moderators to channels matching the filter
65+
# @param filter [StringKeyHash] Filter to select channels
66+
# @param members [T::Array[String]] Member IDs to promote to moderator
67+
# @return [StreamChat::StreamResponse] The server response
68+
sig { params(filter: StringKeyHash, members: T::Array[String]).returns(StreamChat::StreamResponse) }
69+
def add_moderators(filter, members)
70+
@client.update_channels_batch(
71+
{
72+
operation: 'addModerators',
73+
filter: filter,
74+
members: members
75+
}
76+
)
77+
end
78+
79+
# demoteModerators - Remove moderator role from members in channels matching the filter
80+
# @param filter [StringKeyHash] Filter to select channels
81+
# @param members [T::Array[String]] Member IDs to demote
82+
# @return [StreamChat::StreamResponse] The server response
83+
sig { params(filter: StringKeyHash, members: T::Array[String]).returns(StreamChat::StreamResponse) }
84+
def demote_moderators(filter, members)
85+
@client.update_channels_batch(
86+
{
87+
operation: 'demoteModerators',
88+
filter: filter,
89+
members: members
90+
}
91+
)
92+
end
93+
94+
# assignRoles - Assign roles to members in channels matching the filter
95+
# @param filter [StringKeyHash] Filter to select channels
96+
# @param members [T::Array[StringKeyHash]] Members with role assignments
97+
# @return [StreamChat::StreamResponse] The server response
98+
sig { params(filter: StringKeyHash, members: T::Array[StringKeyHash]).returns(StreamChat::StreamResponse) }
99+
def assign_roles(filter, members)
100+
@client.update_channels_batch(
101+
{
102+
operation: 'assignRoles',
103+
filter: filter,
104+
members: members
105+
}
106+
)
107+
end
108+
109+
# Visibility operations
110+
111+
# hide - Hide channels matching the filter
112+
# @param filter [StringKeyHash] Filter to select channels
113+
# @return [StreamChat::StreamResponse] The server response
114+
sig { params(filter: StringKeyHash).returns(StreamChat::StreamResponse) }
115+
def hide(filter)
116+
@client.update_channels_batch(
117+
{
118+
operation: 'hide',
119+
filter: filter
120+
}
121+
)
122+
end
123+
124+
# show - Show channels matching the filter
125+
# @param filter [StringKeyHash] Filter to select channels
126+
# @return [StreamChat::StreamResponse] The server response
127+
sig { params(filter: StringKeyHash).returns(StreamChat::StreamResponse) }
128+
def show(filter)
129+
@client.update_channels_batch(
130+
{
131+
operation: 'show',
132+
filter: filter
133+
}
134+
)
135+
end
136+
137+
# archive - Archive channels matching the filter
138+
# @param filter [StringKeyHash] Filter to select channels
139+
# @return [StreamChat::StreamResponse] The server response
140+
sig { params(filter: StringKeyHash).returns(StreamChat::StreamResponse) }
141+
def archive(filter)
142+
@client.update_channels_batch(
143+
{
144+
operation: 'archive',
145+
filter: filter
146+
}
147+
)
148+
end
149+
150+
# unarchive - Unarchive channels matching the filter
151+
# @param filter [StringKeyHash] Filter to select channels
152+
# @return [StreamChat::StreamResponse] The server response
153+
sig { params(filter: StringKeyHash).returns(StreamChat::StreamResponse) }
154+
def unarchive(filter)
155+
@client.update_channels_batch(
156+
{
157+
operation: 'unarchive',
158+
filter: filter
159+
}
160+
)
161+
end
162+
163+
# Data operations
164+
165+
# updateData - Update data on channels matching the filter
166+
# @param filter [StringKeyHash] Filter to select channels
167+
# @param data [StringKeyHash] Data to update
168+
# @return [StreamChat::StreamResponse] The server response
169+
sig { params(filter: StringKeyHash, data: StringKeyHash).returns(StreamChat::StreamResponse) }
170+
def update_data(filter, data)
171+
@client.update_channels_batch(
172+
{
173+
operation: 'updateData',
174+
filter: filter,
175+
data: data
176+
}
177+
)
178+
end
179+
180+
# addFilterTags - Add filter tags to channels matching the filter
181+
# @param filter [StringKeyHash] Filter to select channels
182+
# @param tags [T::Array[String]] Tags to add
183+
# @return [StreamChat::StreamResponse] The server response
184+
sig { params(filter: StringKeyHash, tags: T::Array[String]).returns(StreamChat::StreamResponse) }
185+
def add_filter_tags(filter, tags)
186+
@client.update_channels_batch(
187+
{
188+
operation: 'addFilterTags',
189+
filter: filter,
190+
filter_tags_update: tags
191+
}
192+
)
193+
end
194+
195+
# removeFilterTags - Remove filter tags from channels matching the filter
196+
# @param filter [StringKeyHash] Filter to select channels
197+
# @param tags [T::Array[String]] Tags to remove
198+
# @return [StreamChat::StreamResponse] The server response
199+
sig { params(filter: StringKeyHash, tags: T::Array[String]).returns(StreamChat::StreamResponse) }
200+
def remove_filter_tags(filter, tags)
201+
@client.update_channels_batch(
202+
{
203+
operation: 'removeFilterTags',
204+
filter: filter,
205+
filter_tags_update: tags
206+
}
207+
)
208+
end
209+
end
210+
end
211+

lib/stream-chat/client.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1074,6 +1074,21 @@ def mark_delivered(data = nil, user_id: nil)
10741074
post('channels/delivered', data: data || {}, params: { user_id: user_id })
10751075
end
10761076

1077+
# Update channels in batch.
1078+
# @param payload [StringKeyHash] Payload containing operation, filter, and optional members/data/filter_tags_update
1079+
# @return [StreamChat::StreamResponse] API response
1080+
sig { params(payload: StringKeyHash).returns(StreamChat::StreamResponse) }
1081+
def update_channels_batch(payload)
1082+
put('channels/batch', data: payload)
1083+
end
1084+
1085+
# Returns a ChannelBatchUpdater instance for batch channel operations.
1086+
# @return [StreamChat::ChannelBatchUpdater] A ChannelBatchUpdater instance
1087+
sig { returns(StreamChat::ChannelBatchUpdater) }
1088+
def channel_batch_updater
1089+
ChannelBatchUpdater.new(self)
1090+
end
1091+
10771092
private
10781093

10791094
sig { returns(T::Hash[String, String]) }

0 commit comments

Comments
 (0)