diff --git a/packages/stream_chat/CHANGELOG.md b/packages/stream_chat/CHANGELOG.md index a9fe56004..abbb4a2d4 100644 --- a/packages/stream_chat/CHANGELOG.md +++ b/packages/stream_chat/CHANGELOG.md @@ -7,6 +7,7 @@ ✅ Added +- Added support for `Message.channelRole` field to provide access to the sender's channel role. - Added support for `Channel.messageCount` field. 🐞 Fixed diff --git a/packages/stream_chat/lib/src/core/models/message.dart b/packages/stream_chat/lib/src/core/models/message.dart index 93847c11a..d36f3c7af 100644 --- a/packages/stream_chat/lib/src/core/models/message.dart +++ b/packages/stream_chat/lib/src/core/models/message.dart @@ -11,6 +11,7 @@ import 'package:stream_chat/src/core/models/poll.dart'; import 'package:stream_chat/src/core/models/reaction.dart'; import 'package:stream_chat/src/core/models/reaction_group.dart'; import 'package:stream_chat/src/core/models/user.dart'; +import 'package:stream_chat/src/core/util/extension.dart'; import 'package:stream_chat/src/core/util/serializer.dart'; import 'package:uuid/uuid.dart'; @@ -69,6 +70,7 @@ class Message extends Equatable implements ComparableFieldProvider { this.moderation, this.draft, this.reminder, + this.channelRole, }) : id = id ?? const Uuid().v4(), type = MessageType(type), pinExpires = pinExpires?.toUtc(), @@ -314,6 +316,19 @@ class Message extends Equatable implements ComparableFieldProvider { /// This is present when a user has set a reminder for this message. final MessageReminder? reminder; + static Object? _channelRoleReadValue(Map json, String key) { + // Extract the channel role from the member object if present. + final member = json['member']; + if (member is! Map) return null; + + final channelRole = member[key].safeCast(); + return channelRole; + } + + /// The role of the user in the channel the message belongs to. + @JsonKey(includeToJson: false, readValue: _channelRoleReadValue) + final String? channelRole; + /// Message custom extraData. final Map extraData; @@ -362,6 +377,7 @@ class Message extends Equatable implements ComparableFieldProvider { 'moderation_details', 'draft', 'reminder', + 'member', ]; /// Serialize to json. @@ -424,6 +440,7 @@ class Message extends Equatable implements ComparableFieldProvider { Moderation? moderation, Object? draft = _nullConst, Object? reminder = _nullConst, + String? channelRole, }) { assert(() { if (pinExpires is! DateTime && @@ -506,6 +523,7 @@ class Message extends Equatable implements ComparableFieldProvider { draft: draft == _nullConst ? this.draft : draft as Draft?, reminder: reminder == _nullConst ? this.reminder : reminder as MessageReminder?, + channelRole: channelRole ?? this.channelRole, ); } @@ -551,6 +569,7 @@ class Message extends Equatable implements ComparableFieldProvider { moderation: other.moderation, draft: other.draft, reminder: other.reminder, + channelRole: other.channelRole, ); } @@ -616,6 +635,7 @@ class Message extends Equatable implements ComparableFieldProvider { moderation, draft, reminder, + channelRole, ]; @override diff --git a/packages/stream_chat/lib/src/core/models/message.g.dart b/packages/stream_chat/lib/src/core/models/message.g.dart index cc90809bd..60e27988c 100644 --- a/packages/stream_chat/lib/src/core/models/message.g.dart +++ b/packages/stream_chat/lib/src/core/models/message.g.dart @@ -95,6 +95,8 @@ Message _$MessageFromJson(Map json) => Message( reminder: json['reminder'] == null ? null : MessageReminder.fromJson(json['reminder'] as Map), + channelRole: + Message._channelRoleReadValue(json, 'channel_role') as String?, ); Map _$MessageToJson(Message instance) => { diff --git a/packages/stream_chat/test/fixtures/message.json b/packages/stream_chat/test/fixtures/message.json index 6b99f2fbc..30cb6f042 100644 --- a/packages/stream_chat/test/fixtures/message.json +++ b/packages/stream_chat/test/fixtures/message.json @@ -14,6 +14,12 @@ "image": "https://randomuser.me/api/portraits/women/2.jpg", "name": "Mia Denys" }, + "member": { + "user_id": "c1c9b454-2bcc-402d-8bb0-2f3706ce1680", + "channel_role": "channel_member", + "created_at": "2020-01-28T22:17:30.83015Z", + "updated_at": "2020-01-28T22:17:31.19435Z" + }, "attachments": [ { "type": "video", diff --git a/packages/stream_chat/test/src/core/models/message_test.dart b/packages/stream_chat/test/src/core/models/message_test.dart index 8365d7fdc..ff5a7665e 100644 --- a/packages/stream_chat/test/src/core/models/message_test.dart +++ b/packages/stream_chat/test/src/core/models/message_test.dart @@ -37,6 +37,7 @@ void main() { expect(message.pinnedBy, null); expect(message.i18n, null); expect(message.restrictedVisibility, isA>()); + expect(message.channelRole, 'channel_member'); }); test('should serialize to json correctly', () { diff --git a/packages/stream_chat_persistence/CHANGELOG.md b/packages/stream_chat_persistence/CHANGELOG.md index 33ef8a8a2..ffcbf76bd 100644 --- a/packages/stream_chat_persistence/CHANGELOG.md +++ b/packages/stream_chat_persistence/CHANGELOG.md @@ -2,6 +2,7 @@ ✅ Added +- Added support for `Message.channelRole` field. - Added support for `client.flush()` method to clear database. - Added support for `Channel.messageCount` field. diff --git a/packages/stream_chat_persistence/lib/src/db/drift_chat_database.dart b/packages/stream_chat_persistence/lib/src/db/drift_chat_database.dart index 4934f4e0b..f27eacfcb 100644 --- a/packages/stream_chat_persistence/lib/src/db/drift_chat_database.dart +++ b/packages/stream_chat_persistence/lib/src/db/drift_chat_database.dart @@ -55,7 +55,7 @@ class DriftChatDatabase extends _$DriftChatDatabase { // you should bump this number whenever you change or add a table definition. @override - int get schemaVersion => 24; + int get schemaVersion => 25; @override MigrationStrategy get migration => MigrationStrategy( diff --git a/packages/stream_chat_persistence/lib/src/db/drift_chat_database.g.dart b/packages/stream_chat_persistence/lib/src/db/drift_chat_database.g.dart index 61174cd02..837519adf 100644 --- a/packages/stream_chat_persistence/lib/src/db/drift_chat_database.g.dart +++ b/packages/stream_chat_persistence/lib/src/db/drift_chat_database.g.dart @@ -842,6 +842,12 @@ class $MessagesTable extends Messages late final GeneratedColumn userId = GeneratedColumn( 'user_id', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _channelRoleMeta = + const VerificationMeta('channelRole'); + @override + late final GeneratedColumn channelRole = GeneratedColumn( + 'channel_role', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); static const VerificationMeta _pinnedMeta = const VerificationMeta('pinned'); @override late final GeneratedColumn pinned = GeneratedColumn( @@ -920,6 +926,7 @@ class $MessagesTable extends Messages remoteDeletedAt, messageTextUpdatedAt, userId, + channelRole, pinned, pinnedAt, pinExpires, @@ -1040,6 +1047,12 @@ class $MessagesTable extends Messages context.handle(_userIdMeta, userId.isAcceptableOrUnknown(data['user_id']!, _userIdMeta)); } + if (data.containsKey('channel_role')) { + context.handle( + _channelRoleMeta, + channelRole.isAcceptableOrUnknown( + data['channel_role']!, _channelRoleMeta)); + } if (data.containsKey('pinned')) { context.handle(_pinnedMeta, pinned.isAcceptableOrUnknown(data['pinned']!, _pinnedMeta)); @@ -1125,6 +1138,8 @@ class $MessagesTable extends Messages data['${effectivePrefix}message_text_updated_at']), userId: attachedDatabase.typeMapping .read(DriftSqlType.string, data['${effectivePrefix}user_id']), + channelRole: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}channel_role']), pinned: attachedDatabase.typeMapping .read(DriftSqlType.bool, data['${effectivePrefix}pinned'])!, pinnedAt: attachedDatabase.typeMapping @@ -1240,6 +1255,9 @@ class MessageEntity extends DataClass implements Insertable { /// Id of the User who sent the message final String? userId; + /// The channel role of the user who sent the message + final String? channelRole; + /// Whether the message is pinned or not final bool pinned; @@ -1286,6 +1304,7 @@ class MessageEntity extends DataClass implements Insertable { this.remoteDeletedAt, this.messageTextUpdatedAt, this.userId, + this.channelRole, required this.pinned, this.pinnedAt, this.pinExpires, @@ -1358,6 +1377,9 @@ class MessageEntity extends DataClass implements Insertable { if (!nullToAbsent || userId != null) { map['user_id'] = Variable(userId); } + if (!nullToAbsent || channelRole != null) { + map['channel_role'] = Variable(channelRole); + } map['pinned'] = Variable(pinned); if (!nullToAbsent || pinnedAt != null) { map['pinned_at'] = Variable(pinnedAt); @@ -1412,6 +1434,7 @@ class MessageEntity extends DataClass implements Insertable { messageTextUpdatedAt: serializer.fromJson(json['messageTextUpdatedAt']), userId: serializer.fromJson(json['userId']), + channelRole: serializer.fromJson(json['channelRole']), pinned: serializer.fromJson(json['pinned']), pinnedAt: serializer.fromJson(json['pinnedAt']), pinExpires: serializer.fromJson(json['pinExpires']), @@ -1451,6 +1474,7 @@ class MessageEntity extends DataClass implements Insertable { 'messageTextUpdatedAt': serializer.toJson(messageTextUpdatedAt), 'userId': serializer.toJson(userId), + 'channelRole': serializer.toJson(channelRole), 'pinned': serializer.toJson(pinned), 'pinnedAt': serializer.toJson(pinnedAt), 'pinExpires': serializer.toJson(pinExpires), @@ -1487,6 +1511,7 @@ class MessageEntity extends DataClass implements Insertable { Value remoteDeletedAt = const Value.absent(), Value messageTextUpdatedAt = const Value.absent(), Value userId = const Value.absent(), + Value channelRole = const Value.absent(), bool? pinned, Value pinnedAt = const Value.absent(), Value pinExpires = const Value.absent(), @@ -1533,6 +1558,7 @@ class MessageEntity extends DataClass implements Insertable { ? messageTextUpdatedAt.value : this.messageTextUpdatedAt, userId: userId.present ? userId.value : this.userId, + channelRole: channelRole.present ? channelRole.value : this.channelRole, pinned: pinned ?? this.pinned, pinnedAt: pinnedAt.present ? pinnedAt.value : this.pinnedAt, pinExpires: pinExpires.present ? pinExpires.value : this.pinExpires, @@ -1594,6 +1620,8 @@ class MessageEntity extends DataClass implements Insertable { ? data.messageTextUpdatedAt.value : this.messageTextUpdatedAt, userId: data.userId.present ? data.userId.value : this.userId, + channelRole: + data.channelRole.present ? data.channelRole.value : this.channelRole, pinned: data.pinned.present ? data.pinned.value : this.pinned, pinnedAt: data.pinnedAt.present ? data.pinnedAt.value : this.pinnedAt, pinExpires: @@ -1636,6 +1664,7 @@ class MessageEntity extends DataClass implements Insertable { ..write('remoteDeletedAt: $remoteDeletedAt, ') ..write('messageTextUpdatedAt: $messageTextUpdatedAt, ') ..write('userId: $userId, ') + ..write('channelRole: $channelRole, ') ..write('pinned: $pinned, ') ..write('pinnedAt: $pinnedAt, ') ..write('pinExpires: $pinExpires, ') @@ -1672,6 +1701,7 @@ class MessageEntity extends DataClass implements Insertable { remoteDeletedAt, messageTextUpdatedAt, userId, + channelRole, pinned, pinnedAt, pinExpires, @@ -1707,6 +1737,7 @@ class MessageEntity extends DataClass implements Insertable { other.remoteDeletedAt == this.remoteDeletedAt && other.messageTextUpdatedAt == this.messageTextUpdatedAt && other.userId == this.userId && + other.channelRole == this.channelRole && other.pinned == this.pinned && other.pinnedAt == this.pinnedAt && other.pinExpires == this.pinExpires && @@ -1740,6 +1771,7 @@ class MessagesCompanion extends UpdateCompanion { final Value remoteDeletedAt; final Value messageTextUpdatedAt; final Value userId; + final Value channelRole; final Value pinned; final Value pinnedAt; final Value pinExpires; @@ -1772,6 +1804,7 @@ class MessagesCompanion extends UpdateCompanion { this.remoteDeletedAt = const Value.absent(), this.messageTextUpdatedAt = const Value.absent(), this.userId = const Value.absent(), + this.channelRole = const Value.absent(), this.pinned = const Value.absent(), this.pinnedAt = const Value.absent(), this.pinExpires = const Value.absent(), @@ -1805,6 +1838,7 @@ class MessagesCompanion extends UpdateCompanion { this.remoteDeletedAt = const Value.absent(), this.messageTextUpdatedAt = const Value.absent(), this.userId = const Value.absent(), + this.channelRole = const Value.absent(), this.pinned = const Value.absent(), this.pinnedAt = const Value.absent(), this.pinExpires = const Value.absent(), @@ -1842,6 +1876,7 @@ class MessagesCompanion extends UpdateCompanion { Expression? remoteDeletedAt, Expression? messageTextUpdatedAt, Expression? userId, + Expression? channelRole, Expression? pinned, Expression? pinnedAt, Expression? pinExpires, @@ -1876,6 +1911,7 @@ class MessagesCompanion extends UpdateCompanion { if (messageTextUpdatedAt != null) 'message_text_updated_at': messageTextUpdatedAt, if (userId != null) 'user_id': userId, + if (channelRole != null) 'channel_role': channelRole, if (pinned != null) 'pinned': pinned, if (pinnedAt != null) 'pinned_at': pinnedAt, if (pinExpires != null) 'pin_expires': pinExpires, @@ -1912,6 +1948,7 @@ class MessagesCompanion extends UpdateCompanion { Value? remoteDeletedAt, Value? messageTextUpdatedAt, Value? userId, + Value? channelRole, Value? pinned, Value? pinnedAt, Value? pinExpires, @@ -1944,6 +1981,7 @@ class MessagesCompanion extends UpdateCompanion { remoteDeletedAt: remoteDeletedAt ?? this.remoteDeletedAt, messageTextUpdatedAt: messageTextUpdatedAt ?? this.messageTextUpdatedAt, userId: userId ?? this.userId, + channelRole: channelRole ?? this.channelRole, pinned: pinned ?? this.pinned, pinnedAt: pinnedAt ?? this.pinnedAt, pinExpires: pinExpires ?? this.pinExpires, @@ -2029,6 +2067,9 @@ class MessagesCompanion extends UpdateCompanion { if (userId.present) { map['user_id'] = Variable(userId.value); } + if (channelRole.present) { + map['channel_role'] = Variable(channelRole.value); + } if (pinned.present) { map['pinned'] = Variable(pinned.value); } @@ -2088,6 +2129,7 @@ class MessagesCompanion extends UpdateCompanion { ..write('remoteDeletedAt: $remoteDeletedAt, ') ..write('messageTextUpdatedAt: $messageTextUpdatedAt, ') ..write('userId: $userId, ') + ..write('channelRole: $channelRole, ') ..write('pinned: $pinned, ') ..write('pinnedAt: $pinnedAt, ') ..write('pinExpires: $pinExpires, ') @@ -2952,6 +2994,12 @@ class $PinnedMessagesTable extends PinnedMessages late final GeneratedColumn userId = GeneratedColumn( 'user_id', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _channelRoleMeta = + const VerificationMeta('channelRole'); + @override + late final GeneratedColumn channelRole = GeneratedColumn( + 'channel_role', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); static const VerificationMeta _pinnedMeta = const VerificationMeta('pinned'); @override late final GeneratedColumn pinned = GeneratedColumn( @@ -3028,6 +3076,7 @@ class $PinnedMessagesTable extends PinnedMessages remoteDeletedAt, messageTextUpdatedAt, userId, + channelRole, pinned, pinnedAt, pinExpires, @@ -3149,6 +3198,12 @@ class $PinnedMessagesTable extends PinnedMessages context.handle(_userIdMeta, userId.isAcceptableOrUnknown(data['user_id']!, _userIdMeta)); } + if (data.containsKey('channel_role')) { + context.handle( + _channelRoleMeta, + channelRole.isAcceptableOrUnknown( + data['channel_role']!, _channelRoleMeta)); + } if (data.containsKey('pinned')) { context.handle(_pinnedMeta, pinned.isAcceptableOrUnknown(data['pinned']!, _pinnedMeta)); @@ -3234,6 +3289,8 @@ class $PinnedMessagesTable extends PinnedMessages data['${effectivePrefix}message_text_updated_at']), userId: attachedDatabase.typeMapping .read(DriftSqlType.string, data['${effectivePrefix}user_id']), + channelRole: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}channel_role']), pinned: attachedDatabase.typeMapping .read(DriftSqlType.bool, data['${effectivePrefix}pinned'])!, pinnedAt: attachedDatabase.typeMapping @@ -3351,6 +3408,9 @@ class PinnedMessageEntity extends DataClass /// Id of the User who sent the message final String? userId; + /// The channel role of the user who sent the message + final String? channelRole; + /// Whether the message is pinned or not final bool pinned; @@ -3397,6 +3457,7 @@ class PinnedMessageEntity extends DataClass this.remoteDeletedAt, this.messageTextUpdatedAt, this.userId, + this.channelRole, required this.pinned, this.pinnedAt, this.pinExpires, @@ -3469,6 +3530,9 @@ class PinnedMessageEntity extends DataClass if (!nullToAbsent || userId != null) { map['user_id'] = Variable(userId); } + if (!nullToAbsent || channelRole != null) { + map['channel_role'] = Variable(channelRole); + } map['pinned'] = Variable(pinned); if (!nullToAbsent || pinnedAt != null) { map['pinned_at'] = Variable(pinnedAt); @@ -3524,6 +3588,7 @@ class PinnedMessageEntity extends DataClass messageTextUpdatedAt: serializer.fromJson(json['messageTextUpdatedAt']), userId: serializer.fromJson(json['userId']), + channelRole: serializer.fromJson(json['channelRole']), pinned: serializer.fromJson(json['pinned']), pinnedAt: serializer.fromJson(json['pinnedAt']), pinExpires: serializer.fromJson(json['pinExpires']), @@ -3563,6 +3628,7 @@ class PinnedMessageEntity extends DataClass 'messageTextUpdatedAt': serializer.toJson(messageTextUpdatedAt), 'userId': serializer.toJson(userId), + 'channelRole': serializer.toJson(channelRole), 'pinned': serializer.toJson(pinned), 'pinnedAt': serializer.toJson(pinnedAt), 'pinExpires': serializer.toJson(pinExpires), @@ -3599,6 +3665,7 @@ class PinnedMessageEntity extends DataClass Value remoteDeletedAt = const Value.absent(), Value messageTextUpdatedAt = const Value.absent(), Value userId = const Value.absent(), + Value channelRole = const Value.absent(), bool? pinned, Value pinnedAt = const Value.absent(), Value pinExpires = const Value.absent(), @@ -3645,6 +3712,7 @@ class PinnedMessageEntity extends DataClass ? messageTextUpdatedAt.value : this.messageTextUpdatedAt, userId: userId.present ? userId.value : this.userId, + channelRole: channelRole.present ? channelRole.value : this.channelRole, pinned: pinned ?? this.pinned, pinnedAt: pinnedAt.present ? pinnedAt.value : this.pinnedAt, pinExpires: pinExpires.present ? pinExpires.value : this.pinExpires, @@ -3706,6 +3774,8 @@ class PinnedMessageEntity extends DataClass ? data.messageTextUpdatedAt.value : this.messageTextUpdatedAt, userId: data.userId.present ? data.userId.value : this.userId, + channelRole: + data.channelRole.present ? data.channelRole.value : this.channelRole, pinned: data.pinned.present ? data.pinned.value : this.pinned, pinnedAt: data.pinnedAt.present ? data.pinnedAt.value : this.pinnedAt, pinExpires: @@ -3748,6 +3818,7 @@ class PinnedMessageEntity extends DataClass ..write('remoteDeletedAt: $remoteDeletedAt, ') ..write('messageTextUpdatedAt: $messageTextUpdatedAt, ') ..write('userId: $userId, ') + ..write('channelRole: $channelRole, ') ..write('pinned: $pinned, ') ..write('pinnedAt: $pinnedAt, ') ..write('pinExpires: $pinExpires, ') @@ -3784,6 +3855,7 @@ class PinnedMessageEntity extends DataClass remoteDeletedAt, messageTextUpdatedAt, userId, + channelRole, pinned, pinnedAt, pinExpires, @@ -3819,6 +3891,7 @@ class PinnedMessageEntity extends DataClass other.remoteDeletedAt == this.remoteDeletedAt && other.messageTextUpdatedAt == this.messageTextUpdatedAt && other.userId == this.userId && + other.channelRole == this.channelRole && other.pinned == this.pinned && other.pinnedAt == this.pinnedAt && other.pinExpires == this.pinExpires && @@ -3852,6 +3925,7 @@ class PinnedMessagesCompanion extends UpdateCompanion { final Value remoteDeletedAt; final Value messageTextUpdatedAt; final Value userId; + final Value channelRole; final Value pinned; final Value pinnedAt; final Value pinExpires; @@ -3884,6 +3958,7 @@ class PinnedMessagesCompanion extends UpdateCompanion { this.remoteDeletedAt = const Value.absent(), this.messageTextUpdatedAt = const Value.absent(), this.userId = const Value.absent(), + this.channelRole = const Value.absent(), this.pinned = const Value.absent(), this.pinnedAt = const Value.absent(), this.pinExpires = const Value.absent(), @@ -3917,6 +3992,7 @@ class PinnedMessagesCompanion extends UpdateCompanion { this.remoteDeletedAt = const Value.absent(), this.messageTextUpdatedAt = const Value.absent(), this.userId = const Value.absent(), + this.channelRole = const Value.absent(), this.pinned = const Value.absent(), this.pinnedAt = const Value.absent(), this.pinExpires = const Value.absent(), @@ -3954,6 +4030,7 @@ class PinnedMessagesCompanion extends UpdateCompanion { Expression? remoteDeletedAt, Expression? messageTextUpdatedAt, Expression? userId, + Expression? channelRole, Expression? pinned, Expression? pinnedAt, Expression? pinExpires, @@ -3988,6 +4065,7 @@ class PinnedMessagesCompanion extends UpdateCompanion { if (messageTextUpdatedAt != null) 'message_text_updated_at': messageTextUpdatedAt, if (userId != null) 'user_id': userId, + if (channelRole != null) 'channel_role': channelRole, if (pinned != null) 'pinned': pinned, if (pinnedAt != null) 'pinned_at': pinnedAt, if (pinExpires != null) 'pin_expires': pinExpires, @@ -4024,6 +4102,7 @@ class PinnedMessagesCompanion extends UpdateCompanion { Value? remoteDeletedAt, Value? messageTextUpdatedAt, Value? userId, + Value? channelRole, Value? pinned, Value? pinnedAt, Value? pinExpires, @@ -4056,6 +4135,7 @@ class PinnedMessagesCompanion extends UpdateCompanion { remoteDeletedAt: remoteDeletedAt ?? this.remoteDeletedAt, messageTextUpdatedAt: messageTextUpdatedAt ?? this.messageTextUpdatedAt, userId: userId ?? this.userId, + channelRole: channelRole ?? this.channelRole, pinned: pinned ?? this.pinned, pinnedAt: pinnedAt ?? this.pinnedAt, pinExpires: pinExpires ?? this.pinExpires, @@ -4143,6 +4223,9 @@ class PinnedMessagesCompanion extends UpdateCompanion { if (userId.present) { map['user_id'] = Variable(userId.value); } + if (channelRole.present) { + map['channel_role'] = Variable(channelRole.value); + } if (pinned.present) { map['pinned'] = Variable(pinned.value); } @@ -4202,6 +4285,7 @@ class PinnedMessagesCompanion extends UpdateCompanion { ..write('remoteDeletedAt: $remoteDeletedAt, ') ..write('messageTextUpdatedAt: $messageTextUpdatedAt, ') ..write('userId: $userId, ') + ..write('channelRole: $channelRole, ') ..write('pinned: $pinned, ') ..write('pinnedAt: $pinnedAt, ') ..write('pinExpires: $pinExpires, ') @@ -9116,6 +9200,7 @@ typedef $$MessagesTableCreateCompanionBuilder = MessagesCompanion Function({ Value remoteDeletedAt, Value messageTextUpdatedAt, Value userId, + Value channelRole, Value pinned, Value pinnedAt, Value pinExpires, @@ -9149,6 +9234,7 @@ typedef $$MessagesTableUpdateCompanionBuilder = MessagesCompanion Function({ Value remoteDeletedAt, Value messageTextUpdatedAt, Value userId, + Value channelRole, Value pinned, Value pinnedAt, Value pinExpires, @@ -9300,6 +9386,9 @@ class $$MessagesTableFilterComposer ColumnFilters get userId => $composableBuilder( column: $table.userId, builder: (column) => ColumnFilters(column)); + ColumnFilters get channelRole => $composableBuilder( + column: $table.channelRole, builder: (column) => ColumnFilters(column)); + ColumnFilters get pinned => $composableBuilder( column: $table.pinned, builder: (column) => ColumnFilters(column)); @@ -9479,6 +9568,9 @@ class $$MessagesTableOrderingComposer ColumnOrderings get userId => $composableBuilder( column: $table.userId, builder: (column) => ColumnOrderings(column)); + ColumnOrderings get channelRole => $composableBuilder( + column: $table.channelRole, builder: (column) => ColumnOrderings(column)); + ColumnOrderings get pinned => $composableBuilder( column: $table.pinned, builder: (column) => ColumnOrderings(column)); @@ -9601,6 +9693,9 @@ class $$MessagesTableAnnotationComposer GeneratedColumn get userId => $composableBuilder(column: $table.userId, builder: (column) => column); + GeneratedColumn get channelRole => $composableBuilder( + column: $table.channelRole, builder: (column) => column); + GeneratedColumn get pinned => $composableBuilder(column: $table.pinned, builder: (column) => column); @@ -9734,6 +9829,7 @@ class $$MessagesTableTableManager extends RootTableManager< Value remoteDeletedAt = const Value.absent(), Value messageTextUpdatedAt = const Value.absent(), Value userId = const Value.absent(), + Value channelRole = const Value.absent(), Value pinned = const Value.absent(), Value pinnedAt = const Value.absent(), Value pinExpires = const Value.absent(), @@ -9767,6 +9863,7 @@ class $$MessagesTableTableManager extends RootTableManager< remoteDeletedAt: remoteDeletedAt, messageTextUpdatedAt: messageTextUpdatedAt, userId: userId, + channelRole: channelRole, pinned: pinned, pinnedAt: pinnedAt, pinExpires: pinExpires, @@ -9801,6 +9898,7 @@ class $$MessagesTableTableManager extends RootTableManager< Value remoteDeletedAt = const Value.absent(), Value messageTextUpdatedAt = const Value.absent(), Value userId = const Value.absent(), + Value channelRole = const Value.absent(), Value pinned = const Value.absent(), Value pinnedAt = const Value.absent(), Value pinExpires = const Value.absent(), @@ -9834,6 +9932,7 @@ class $$MessagesTableTableManager extends RootTableManager< remoteDeletedAt: remoteDeletedAt, messageTextUpdatedAt: messageTextUpdatedAt, userId: userId, + channelRole: channelRole, pinned: pinned, pinnedAt: pinnedAt, pinExpires: pinExpires, @@ -10458,6 +10557,7 @@ typedef $$PinnedMessagesTableCreateCompanionBuilder = PinnedMessagesCompanion Value remoteDeletedAt, Value messageTextUpdatedAt, Value userId, + Value channelRole, Value pinned, Value pinnedAt, Value pinExpires, @@ -10492,6 +10592,7 @@ typedef $$PinnedMessagesTableUpdateCompanionBuilder = PinnedMessagesCompanion Value remoteDeletedAt, Value messageTextUpdatedAt, Value userId, + Value channelRole, Value pinned, Value pinnedAt, Value pinExpires, @@ -10618,6 +10719,9 @@ class $$PinnedMessagesTableFilterComposer ColumnFilters get userId => $composableBuilder( column: $table.userId, builder: (column) => ColumnFilters(column)); + ColumnFilters get channelRole => $composableBuilder( + column: $table.channelRole, builder: (column) => ColumnFilters(column)); + ColumnFilters get pinned => $composableBuilder( column: $table.pinned, builder: (column) => ColumnFilters(column)); @@ -10761,6 +10865,9 @@ class $$PinnedMessagesTableOrderingComposer ColumnOrderings get userId => $composableBuilder( column: $table.userId, builder: (column) => ColumnOrderings(column)); + ColumnOrderings get channelRole => $composableBuilder( + column: $table.channelRole, builder: (column) => ColumnOrderings(column)); + ColumnOrderings get pinned => $composableBuilder( column: $table.pinned, builder: (column) => ColumnOrderings(column)); @@ -10866,6 +10973,9 @@ class $$PinnedMessagesTableAnnotationComposer GeneratedColumn get userId => $composableBuilder(column: $table.userId, builder: (column) => column); + GeneratedColumn get channelRole => $composableBuilder( + column: $table.channelRole, builder: (column) => column); + GeneratedColumn get pinned => $composableBuilder(column: $table.pinned, builder: (column) => column); @@ -10963,6 +11073,7 @@ class $$PinnedMessagesTableTableManager extends RootTableManager< Value remoteDeletedAt = const Value.absent(), Value messageTextUpdatedAt = const Value.absent(), Value userId = const Value.absent(), + Value channelRole = const Value.absent(), Value pinned = const Value.absent(), Value pinnedAt = const Value.absent(), Value pinExpires = const Value.absent(), @@ -10996,6 +11107,7 @@ class $$PinnedMessagesTableTableManager extends RootTableManager< remoteDeletedAt: remoteDeletedAt, messageTextUpdatedAt: messageTextUpdatedAt, userId: userId, + channelRole: channelRole, pinned: pinned, pinnedAt: pinnedAt, pinExpires: pinExpires, @@ -11030,6 +11142,7 @@ class $$PinnedMessagesTableTableManager extends RootTableManager< Value remoteDeletedAt = const Value.absent(), Value messageTextUpdatedAt = const Value.absent(), Value userId = const Value.absent(), + Value channelRole = const Value.absent(), Value pinned = const Value.absent(), Value pinnedAt = const Value.absent(), Value pinExpires = const Value.absent(), @@ -11063,6 +11176,7 @@ class $$PinnedMessagesTableTableManager extends RootTableManager< remoteDeletedAt: remoteDeletedAt, messageTextUpdatedAt: messageTextUpdatedAt, userId: userId, + channelRole: channelRole, pinned: pinned, pinnedAt: pinnedAt, pinExpires: pinExpires, diff --git a/packages/stream_chat_persistence/lib/src/entity/messages.dart b/packages/stream_chat_persistence/lib/src/entity/messages.dart index caf11a1a1..537c6ecdb 100644 --- a/packages/stream_chat_persistence/lib/src/entity/messages.dart +++ b/packages/stream_chat_persistence/lib/src/entity/messages.dart @@ -105,6 +105,9 @@ class Messages extends Table { /// Id of the User who sent the message TextColumn get userId => text().nullable()(); + /// The channel role of the user who sent the message + TextColumn get channelRole => text().nullable()(); + /// Whether the message is pinned or not BoolColumn get pinned => boolean().withDefault(const Constant(false))(); diff --git a/packages/stream_chat_persistence/lib/src/mapper/message_mapper.dart b/packages/stream_chat_persistence/lib/src/mapper/message_mapper.dart index 323592516..4e24e0d3b 100644 --- a/packages/stream_chat_persistence/lib/src/mapper/message_mapper.dart +++ b/packages/stream_chat_persistence/lib/src/mapper/message_mapper.dart @@ -45,6 +45,7 @@ extension MessageEntityX on MessageEntity { showInChannel: showInChannel, text: messageText, user: user, + channelRole: channelRole, pinned: pinned, pinnedAt: pinnedAt, pinExpires: pinExpires, @@ -81,6 +82,7 @@ extension MessageX on Message { localUpdatedAt: localUpdatedAt, extraData: extraData, userId: user?.id, + channelRole: channelRole, remoteDeletedAt: remoteDeletedAt, localDeletedAt: localDeletedAt, messageTextUpdatedAt: messageTextUpdatedAt, diff --git a/packages/stream_chat_persistence/lib/src/mapper/pinned_message_mapper.dart b/packages/stream_chat_persistence/lib/src/mapper/pinned_message_mapper.dart index c6cbf1941..a6c70046f 100644 --- a/packages/stream_chat_persistence/lib/src/mapper/pinned_message_mapper.dart +++ b/packages/stream_chat_persistence/lib/src/mapper/pinned_message_mapper.dart @@ -45,6 +45,7 @@ extension PinnedMessageEntityX on PinnedMessageEntity { showInChannel: showInChannel, text: messageText, user: user, + channelRole: channelRole, pinned: pinned, pinnedAt: pinnedAt, pinExpires: pinExpires, @@ -82,6 +83,7 @@ extension PMessageX on Message { localUpdatedAt: localUpdatedAt, extraData: extraData, userId: user?.id, + channelRole: channelRole, remoteDeletedAt: remoteDeletedAt, localDeletedAt: localDeletedAt, messageTextUpdatedAt: messageTextUpdatedAt, diff --git a/packages/stream_chat_persistence/test/src/dao/message_dao_test.dart b/packages/stream_chat_persistence/test/src/dao/message_dao_test.dart index 58c8ecf3a..29cda8c93 100644 --- a/packages/stream_chat_persistence/test/src/dao/message_dao_test.dart +++ b/packages/stream_chat_persistence/test/src/dao/message_dao_test.dart @@ -31,6 +31,7 @@ void main() { id: 'testMessageId$cid$index', type: 'testType', user: users[index], + channelRole: 'channel_member', createdAt: DateTime.now(), shadowed: math.Random().nextBool(), replyCount: index, @@ -57,6 +58,7 @@ void main() { id: 'testQuotedMessageId$cid$index', type: 'testType', user: users[index], + channelRole: 'channel_member', createdAt: DateTime.now(), shadowed: math.Random().nextBool(), replyCount: index, @@ -80,6 +82,7 @@ void main() { id: 'testThreadMessageId$cid$index', type: 'testType', user: users[index], + channelRole: 'channel_member', parentId: mapAllThreadToFirstMessage ? messages[0].id : messages[index].id, createdAt: DateTime.now(), diff --git a/packages/stream_chat_persistence/test/src/dao/pinned_message_dao_test.dart b/packages/stream_chat_persistence/test/src/dao/pinned_message_dao_test.dart index 859800a4f..0bd5166e5 100644 --- a/packages/stream_chat_persistence/test/src/dao/pinned_message_dao_test.dart +++ b/packages/stream_chat_persistence/test/src/dao/pinned_message_dao_test.dart @@ -31,6 +31,7 @@ void main() { id: 'testMessageId$cid$index', type: 'testType', user: users[index], + channelRole: 'channel_member', createdAt: DateTime.now(), shadowed: math.Random().nextBool(), replyCount: index, @@ -52,6 +53,7 @@ void main() { id: 'testQuotedMessageId$cid$index', type: 'testType', user: users[index], + channelRole: 'channel_member', createdAt: DateTime.now(), shadowed: math.Random().nextBool(), replyCount: index, @@ -70,6 +72,7 @@ void main() { id: 'testThreadMessageId$cid$index', type: 'testType', user: users[index], + channelRole: 'channel_member', parentId: mapAllThreadToFirstMessage ? messages[0].id : messages[index].id, createdAt: DateTime.now(), diff --git a/packages/stream_chat_persistence/test/src/mapper/message_mapper_test.dart b/packages/stream_chat_persistence/test/src/mapper/message_mapper_test.dart index 13d6bc395..0c26454f9 100644 --- a/packages/stream_chat_persistence/test/src/mapper/message_mapper_test.dart +++ b/packages/stream_chat_persistence/test/src/mapper/message_mapper_test.dart @@ -78,6 +78,7 @@ void main() { messageTextUpdatedAt: DateTime.now().add(const Duration(minutes: 5)), extraData: {'extra_test_data': 'extraData'}, userId: user.id, + channelRole: 'channel_member', localDeletedAt: DateTime.now(), remoteDeletedAt: DateTime.now().add(const Duration(seconds: 1)), messageText: 'Hello', @@ -131,6 +132,7 @@ void main() { expect(message.localDeletedAt, isSameDateAs(entity.localDeletedAt)); expect(message.remoteDeletedAt, isSameDateAs(entity.remoteDeletedAt)); expect(message.text, entity.messageText); + expect(message.channelRole, entity.channelRole); expect(message.pinned, entity.pinned); expect(message.pinExpires, isSameDateAs(entity.pinExpires)); expect(message.pinnedAt, isSameDateAs(entity.pinnedAt)); @@ -216,6 +218,7 @@ void main() { messageTextUpdatedAt: DateTime.now().add(const Duration(minutes: 5)), extraData: const {'extra_test_data': 'extraData'}, user: user, + channelRole: 'channel_member', localDeletedAt: DateTime.now(), deletedAt: DateTime.now().add(const Duration(seconds: 1)), text: 'Hello', @@ -257,6 +260,7 @@ void main() { expect(entity.localDeletedAt, isSameDateAs(message.localDeletedAt)); expect(entity.remoteDeletedAt, isSameDateAs(message.remoteDeletedAt)); expect(entity.messageText, message.text); + expect(entity.channelRole, message.channelRole); expect(entity.pinned, message.pinned); expect(entity.pinExpires, isSameDateAs(message.pinExpires)); expect(entity.pinnedAt, isSameDateAs(message.pinnedAt)); diff --git a/packages/stream_chat_persistence/test/src/mapper/pinned_message_mapper_test.dart b/packages/stream_chat_persistence/test/src/mapper/pinned_message_mapper_test.dart index 133a49c39..e0bb30feb 100644 --- a/packages/stream_chat_persistence/test/src/mapper/pinned_message_mapper_test.dart +++ b/packages/stream_chat_persistence/test/src/mapper/pinned_message_mapper_test.dart @@ -78,6 +78,7 @@ void main() { messageTextUpdatedAt: DateTime.now().add(const Duration(minutes: 5)), extraData: {'extra_test_data': 'extraData'}, userId: user.id, + channelRole: 'channel_member', localDeletedAt: DateTime.now(), remoteDeletedAt: DateTime.now().add(const Duration(seconds: 1)), messageText: 'Hello', @@ -131,6 +132,7 @@ void main() { expect(message.localDeletedAt, isSameDateAs(entity.localDeletedAt)); expect(message.remoteDeletedAt, isSameDateAs(entity.remoteDeletedAt)); expect(message.text, entity.messageText); + expect(message.channelRole, entity.channelRole); expect(message.pinned, entity.pinned); expect(message.pinExpires, isSameDateAs(entity.pinExpires)); expect(message.pinnedAt, isSameDateAs(entity.pinnedAt)); @@ -216,6 +218,7 @@ void main() { messageTextUpdatedAt: DateTime.now().add(const Duration(minutes: 5)), extraData: const {'extra_test_data': 'extraData'}, user: user, + channelRole: 'channel_member', localDeletedAt: DateTime.now(), deletedAt: DateTime.now().add(const Duration(seconds: 1)), text: 'Hello', @@ -257,6 +260,7 @@ void main() { expect(entity.localDeletedAt, isSameDateAs(message.localDeletedAt)); expect(entity.remoteDeletedAt, isSameDateAs(message.remoteDeletedAt)); expect(entity.messageText, message.text); + expect(entity.channelRole, message.channelRole); expect(entity.pinned, message.pinned); expect(entity.pinExpires, isSameDateAs(message.pinExpires)); expect(entity.pinnedAt, isSameDateAs(message.pinnedAt));