Skip to content

Commit 0088c81

Browse files
authored
feat(llc, persistence): add channelRole to Message model (#2411)
1 parent 1f501c0 commit 0088c81

File tree

15 files changed

+167
-1
lines changed

15 files changed

+167
-1
lines changed

packages/stream_chat/CHANGELOG.md

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

88
✅ Added
99

10+
- Added support for `Message.channelRole` field to provide access to the sender's channel role.
1011
- Added support for `Channel.messageCount` field.
1112

1213
🐞 Fixed

packages/stream_chat/lib/src/core/models/message.dart

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import 'package:stream_chat/src/core/models/poll.dart';
1111
import 'package:stream_chat/src/core/models/reaction.dart';
1212
import 'package:stream_chat/src/core/models/reaction_group.dart';
1313
import 'package:stream_chat/src/core/models/user.dart';
14+
import 'package:stream_chat/src/core/util/extension.dart';
1415
import 'package:stream_chat/src/core/util/serializer.dart';
1516
import 'package:uuid/uuid.dart';
1617

@@ -69,6 +70,7 @@ class Message extends Equatable implements ComparableFieldProvider {
6970
this.moderation,
7071
this.draft,
7172
this.reminder,
73+
this.channelRole,
7274
}) : id = id ?? const Uuid().v4(),
7375
type = MessageType(type),
7476
pinExpires = pinExpires?.toUtc(),
@@ -314,6 +316,19 @@ class Message extends Equatable implements ComparableFieldProvider {
314316
/// This is present when a user has set a reminder for this message.
315317
final MessageReminder? reminder;
316318

319+
static Object? _channelRoleReadValue(Map<Object?, Object?> json, String key) {
320+
// Extract the channel role from the member object if present.
321+
final member = json['member'];
322+
if (member is! Map<String, Object?>) return null;
323+
324+
final channelRole = member[key].safeCast<String>();
325+
return channelRole;
326+
}
327+
328+
/// The role of the user in the channel the message belongs to.
329+
@JsonKey(includeToJson: false, readValue: _channelRoleReadValue)
330+
final String? channelRole;
331+
317332
/// Message custom extraData.
318333
final Map<String, Object?> extraData;
319334

@@ -362,6 +377,7 @@ class Message extends Equatable implements ComparableFieldProvider {
362377
'moderation_details',
363378
'draft',
364379
'reminder',
380+
'member',
365381
];
366382

367383
/// Serialize to json.
@@ -424,6 +440,7 @@ class Message extends Equatable implements ComparableFieldProvider {
424440
Moderation? moderation,
425441
Object? draft = _nullConst,
426442
Object? reminder = _nullConst,
443+
String? channelRole,
427444
}) {
428445
assert(() {
429446
if (pinExpires is! DateTime &&
@@ -506,6 +523,7 @@ class Message extends Equatable implements ComparableFieldProvider {
506523
draft: draft == _nullConst ? this.draft : draft as Draft?,
507524
reminder:
508525
reminder == _nullConst ? this.reminder : reminder as MessageReminder?,
526+
channelRole: channelRole ?? this.channelRole,
509527
);
510528
}
511529

@@ -551,6 +569,7 @@ class Message extends Equatable implements ComparableFieldProvider {
551569
moderation: other.moderation,
552570
draft: other.draft,
553571
reminder: other.reminder,
572+
channelRole: other.channelRole,
554573
);
555574
}
556575

@@ -616,6 +635,7 @@ class Message extends Equatable implements ComparableFieldProvider {
616635
moderation,
617636
draft,
618637
reminder,
638+
channelRole,
619639
];
620640

621641
@override

packages/stream_chat/lib/src/core/models/message.g.dart

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/stream_chat/test/fixtures/message.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@
1414
"image": "https://randomuser.me/api/portraits/women/2.jpg",
1515
"name": "Mia Denys"
1616
},
17+
"member": {
18+
"user_id": "c1c9b454-2bcc-402d-8bb0-2f3706ce1680",
19+
"channel_role": "channel_member",
20+
"created_at": "2020-01-28T22:17:30.83015Z",
21+
"updated_at": "2020-01-28T22:17:31.19435Z"
22+
},
1723
"attachments": [
1824
{
1925
"type": "video",

packages/stream_chat/test/src/core/models/message_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ void main() {
3737
expect(message.pinnedBy, null);
3838
expect(message.i18n, null);
3939
expect(message.restrictedVisibility, isA<List<String>>());
40+
expect(message.channelRole, 'channel_member');
4041
});
4142

4243
test('should serialize to json correctly', () {

packages/stream_chat_persistence/CHANGELOG.md

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

33
✅ Added
44

5+
- Added support for `Message.channelRole` field.
56
- Added support for `client.flush()` method to clear database.
67
- Added support for `Channel.messageCount` field.
78

packages/stream_chat_persistence/lib/src/db/drift_chat_database.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class DriftChatDatabase extends _$DriftChatDatabase {
5555

5656
// you should bump this number whenever you change or add a table definition.
5757
@override
58-
int get schemaVersion => 24;
58+
int get schemaVersion => 25;
5959

6060
@override
6161
MigrationStrategy get migration => MigrationStrategy(

0 commit comments

Comments
 (0)