diff --git a/packages/stream_chat_persistence/CHANGELOG.md b/packages/stream_chat_persistence/CHANGELOG.md index d2b3d075..20c7af74 100644 --- a/packages/stream_chat_persistence/CHANGELOG.md +++ b/packages/stream_chat_persistence/CHANGELOG.md @@ -1,3 +1,7 @@ +## Upcoming + +- Updated `stream_chat` dependency to [`Upcoming`](https://pub.dev/packages/stream_chat/changelog). + ## 6.3.0 - Updated `stream_chat` dependency to [`6.3.0`](https://pub.dev/packages/stream_chat/changelog). diff --git a/packages/stream_chat_persistence/lib/src/dao/message_dao.dart b/packages/stream_chat_persistence/lib/src/dao/message_dao.dart index fa69fa0c..b21bd3cd 100644 --- a/packages/stream_chat_persistence/lib/src/dao/message_dao.dart +++ b/packages/stream_chat_persistence/lib/src/dao/message_dao.dart @@ -5,7 +5,6 @@ import 'package:stream_chat/stream_chat.dart'; import 'package:stream_chat_persistence/src/db/drift_chat_database.dart'; import 'package:stream_chat_persistence/src/entity/messages.dart'; import 'package:stream_chat_persistence/src/entity/users.dart'; - import 'package:stream_chat_persistence/src/mapper/mapper.dart'; part 'message_dao.g.dart'; 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 131a5768..f0b07095 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 @@ -49,7 +49,7 @@ class DriftChatDatabase extends _$DriftChatDatabase { // you should bump this number whenever you change or add a table definition. @override - int get schemaVersion => 11; + int get schemaVersion => 12; @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 0dcd0107..04572675 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 @@ -227,13 +227,13 @@ class $ChannelsTable extends Channels } static TypeConverter, String> $converterownCapabilities = - ListConverter(); + ListConverter(); static TypeConverter?, String?> $converterownCapabilitiesn = NullAwareTypeConverter.wrap($converterownCapabilities); static TypeConverter, String> $converterconfig = MapConverter(); static TypeConverter, String> $converterextraData = - MapConverter(); + MapConverter(); static TypeConverter?, String?> $converterextraDatan = NullAwareTypeConverter.wrap($converterextraData); } @@ -757,28 +757,42 @@ class $MessagesTable extends Messages late final GeneratedColumn command = GeneratedColumn( 'command', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _createdAtMeta = - const VerificationMeta('createdAt'); + static const VerificationMeta _localCreatedAtMeta = + const VerificationMeta('localCreatedAt'); @override - late final GeneratedColumn createdAt = GeneratedColumn( - 'created_at', aliasedName, false, - type: DriftSqlType.dateTime, - requiredDuringInsert: false, - defaultValue: currentDateAndTime); - static const VerificationMeta _updatedAtMeta = - const VerificationMeta('updatedAt'); + late final GeneratedColumn localCreatedAt = + GeneratedColumn('local_created_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _remoteCreatedAtMeta = + const VerificationMeta('remoteCreatedAt'); @override - late final GeneratedColumn updatedAt = GeneratedColumn( - 'updated_at', aliasedName, false, - type: DriftSqlType.dateTime, - requiredDuringInsert: false, - defaultValue: currentDateAndTime); - static const VerificationMeta _deletedAtMeta = - const VerificationMeta('deletedAt'); + late final GeneratedColumn remoteCreatedAt = + GeneratedColumn('remote_created_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _localUpdatedAtMeta = + const VerificationMeta('localUpdatedAt'); @override - late final GeneratedColumn deletedAt = GeneratedColumn( - 'deleted_at', aliasedName, true, - type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn localUpdatedAt = + GeneratedColumn('local_updated_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _remoteUpdatedAtMeta = + const VerificationMeta('remoteUpdatedAt'); + @override + late final GeneratedColumn remoteUpdatedAt = + GeneratedColumn('remote_updated_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _localDeletedAtMeta = + const VerificationMeta('localDeletedAt'); + @override + late final GeneratedColumn localDeletedAt = + GeneratedColumn('local_deleted_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _remoteDeletedAtMeta = + const VerificationMeta('remoteDeletedAt'); + @override + late final GeneratedColumn remoteDeletedAt = + GeneratedColumn('remote_deleted_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); static const VerificationMeta _userIdMeta = const VerificationMeta('userId'); @override late final GeneratedColumn userId = GeneratedColumn( @@ -853,9 +867,12 @@ class $MessagesTable extends Messages showInChannel, shadowed, command, - createdAt, - updatedAt, - deletedAt, + localCreatedAt, + remoteCreatedAt, + localUpdatedAt, + remoteUpdatedAt, + localDeletedAt, + remoteDeletedAt, userId, pinned, pinnedAt, @@ -924,17 +941,41 @@ class $MessagesTable extends Messages context.handle(_commandMeta, command.isAcceptableOrUnknown(data['command']!, _commandMeta)); } - if (data.containsKey('created_at')) { - context.handle(_createdAtMeta, - createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); + if (data.containsKey('local_created_at')) { + context.handle( + _localCreatedAtMeta, + localCreatedAt.isAcceptableOrUnknown( + data['local_created_at']!, _localCreatedAtMeta)); } - if (data.containsKey('updated_at')) { - context.handle(_updatedAtMeta, - updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta)); + if (data.containsKey('remote_created_at')) { + context.handle( + _remoteCreatedAtMeta, + remoteCreatedAt.isAcceptableOrUnknown( + data['remote_created_at']!, _remoteCreatedAtMeta)); } - if (data.containsKey('deleted_at')) { - context.handle(_deletedAtMeta, - deletedAt.isAcceptableOrUnknown(data['deleted_at']!, _deletedAtMeta)); + if (data.containsKey('local_updated_at')) { + context.handle( + _localUpdatedAtMeta, + localUpdatedAt.isAcceptableOrUnknown( + data['local_updated_at']!, _localUpdatedAtMeta)); + } + if (data.containsKey('remote_updated_at')) { + context.handle( + _remoteUpdatedAtMeta, + remoteUpdatedAt.isAcceptableOrUnknown( + data['remote_updated_at']!, _remoteUpdatedAtMeta)); + } + if (data.containsKey('local_deleted_at')) { + context.handle( + _localDeletedAtMeta, + localDeletedAt.isAcceptableOrUnknown( + data['local_deleted_at']!, _localDeletedAtMeta)); + } + if (data.containsKey('remote_deleted_at')) { + context.handle( + _remoteDeletedAtMeta, + remoteDeletedAt.isAcceptableOrUnknown( + data['remote_deleted_at']!, _remoteDeletedAtMeta)); } if (data.containsKey('user_id')) { context.handle(_userIdMeta, @@ -1012,12 +1053,18 @@ class $MessagesTable extends Messages .read(DriftSqlType.bool, data['${effectivePrefix}shadowed'])!, command: attachedDatabase.typeMapping .read(DriftSqlType.string, data['${effectivePrefix}command']), - createdAt: attachedDatabase.typeMapping - .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, - updatedAt: attachedDatabase.typeMapping - .read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!, - deletedAt: attachedDatabase.typeMapping - .read(DriftSqlType.dateTime, data['${effectivePrefix}deleted_at']), + localCreatedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}local_created_at']), + remoteCreatedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}remote_created_at']), + localUpdatedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}local_updated_at']), + remoteUpdatedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}remote_updated_at']), + localDeletedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}local_deleted_at']), + remoteDeletedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}remote_deleted_at']), userId: attachedDatabase.typeMapping .read(DriftSqlType.string, data['${effectivePrefix}user_id']), pinned: attachedDatabase.typeMapping @@ -1044,23 +1091,23 @@ class $MessagesTable extends Messages } static TypeConverter, String> $converterattachments = - ListConverter(); + ListConverter(); static TypeConverter $converterstatus = MessageSendingStatusConverter(); static TypeConverter, String> $convertermentionedUsers = - ListConverter(); + ListConverter(); static TypeConverter, String> $converterreactionCounts = - MapConverter(); + MapConverter(); static TypeConverter?, String?> $converterreactionCountsn = NullAwareTypeConverter.wrap($converterreactionCounts); static TypeConverter, String> $converterreactionScores = - MapConverter(); + MapConverter(); static TypeConverter?, String?> $converterreactionScoresn = NullAwareTypeConverter.wrap($converterreactionScores); static TypeConverter?, String?> $converteri18n = - NullableMapConverter(); + NullableMapConverter(); static TypeConverter, String> $converterextraData = - MapConverter(); + MapConverter(); static TypeConverter?, String?> $converterextraDatan = NullAwareTypeConverter.wrap($converterextraData); } @@ -1109,14 +1156,23 @@ class MessageEntity extends DataClass implements Insertable { /// A used command name. final String? command; - /// The DateTime when the message was created. - final DateTime createdAt; + /// The DateTime on which the message was created on the client. + final DateTime? localCreatedAt; - /// The DateTime when the message was updated last time. - final DateTime updatedAt; + /// The DateTime on which the message was created on the server. + final DateTime? remoteCreatedAt; - /// The DateTime when the message was deleted. - final DateTime? deletedAt; + /// The DateTime on which the message was updated on the client. + final DateTime? localUpdatedAt; + + /// The DateTime on which the message was updated on the server. + final DateTime? remoteUpdatedAt; + + /// The DateTime on which the message was deleted on the client. + final DateTime? localDeletedAt; + + /// The DateTime on which the message was deleted on the server. + final DateTime? remoteDeletedAt; /// Id of the User who sent the message final String? userId; @@ -1156,9 +1212,12 @@ class MessageEntity extends DataClass implements Insertable { this.showInChannel, required this.shadowed, this.command, - required this.createdAt, - required this.updatedAt, - this.deletedAt, + this.localCreatedAt, + this.remoteCreatedAt, + this.localUpdatedAt, + this.remoteUpdatedAt, + this.localDeletedAt, + this.remoteDeletedAt, this.userId, required this.pinned, this.pinnedAt, @@ -1214,10 +1273,23 @@ class MessageEntity extends DataClass implements Insertable { if (!nullToAbsent || command != null) { map['command'] = Variable(command); } - map['created_at'] = Variable(createdAt); - map['updated_at'] = Variable(updatedAt); - if (!nullToAbsent || deletedAt != null) { - map['deleted_at'] = Variable(deletedAt); + if (!nullToAbsent || localCreatedAt != null) { + map['local_created_at'] = Variable(localCreatedAt); + } + if (!nullToAbsent || remoteCreatedAt != null) { + map['remote_created_at'] = Variable(remoteCreatedAt); + } + if (!nullToAbsent || localUpdatedAt != null) { + map['local_updated_at'] = Variable(localUpdatedAt); + } + if (!nullToAbsent || remoteUpdatedAt != null) { + map['remote_updated_at'] = Variable(remoteUpdatedAt); + } + if (!nullToAbsent || localDeletedAt != null) { + map['local_deleted_at'] = Variable(localDeletedAt); + } + if (!nullToAbsent || remoteDeletedAt != null) { + map['remote_deleted_at'] = Variable(remoteDeletedAt); } if (!nullToAbsent || userId != null) { map['user_id'] = Variable(userId); @@ -1264,9 +1336,12 @@ class MessageEntity extends DataClass implements Insertable { showInChannel: serializer.fromJson(json['showInChannel']), shadowed: serializer.fromJson(json['shadowed']), command: serializer.fromJson(json['command']), - createdAt: serializer.fromJson(json['createdAt']), - updatedAt: serializer.fromJson(json['updatedAt']), - deletedAt: serializer.fromJson(json['deletedAt']), + localCreatedAt: serializer.fromJson(json['localCreatedAt']), + remoteCreatedAt: serializer.fromJson(json['remoteCreatedAt']), + localUpdatedAt: serializer.fromJson(json['localUpdatedAt']), + remoteUpdatedAt: serializer.fromJson(json['remoteUpdatedAt']), + localDeletedAt: serializer.fromJson(json['localDeletedAt']), + remoteDeletedAt: serializer.fromJson(json['remoteDeletedAt']), userId: serializer.fromJson(json['userId']), pinned: serializer.fromJson(json['pinned']), pinnedAt: serializer.fromJson(json['pinnedAt']), @@ -1295,9 +1370,12 @@ class MessageEntity extends DataClass implements Insertable { 'showInChannel': serializer.toJson(showInChannel), 'shadowed': serializer.toJson(shadowed), 'command': serializer.toJson(command), - 'createdAt': serializer.toJson(createdAt), - 'updatedAt': serializer.toJson(updatedAt), - 'deletedAt': serializer.toJson(deletedAt), + 'localCreatedAt': serializer.toJson(localCreatedAt), + 'remoteCreatedAt': serializer.toJson(remoteCreatedAt), + 'localUpdatedAt': serializer.toJson(localUpdatedAt), + 'remoteUpdatedAt': serializer.toJson(remoteUpdatedAt), + 'localDeletedAt': serializer.toJson(localDeletedAt), + 'remoteDeletedAt': serializer.toJson(remoteDeletedAt), 'userId': serializer.toJson(userId), 'pinned': serializer.toJson(pinned), 'pinnedAt': serializer.toJson(pinnedAt), @@ -1324,9 +1402,12 @@ class MessageEntity extends DataClass implements Insertable { Value showInChannel = const Value.absent(), bool? shadowed, Value command = const Value.absent(), - DateTime? createdAt, - DateTime? updatedAt, - Value deletedAt = const Value.absent(), + Value localCreatedAt = const Value.absent(), + Value remoteCreatedAt = const Value.absent(), + Value localUpdatedAt = const Value.absent(), + Value remoteUpdatedAt = const Value.absent(), + Value localDeletedAt = const Value.absent(), + Value remoteDeletedAt = const Value.absent(), Value userId = const Value.absent(), bool? pinned, Value pinnedAt = const Value.absent(), @@ -1355,9 +1436,21 @@ class MessageEntity extends DataClass implements Insertable { showInChannel.present ? showInChannel.value : this.showInChannel, shadowed: shadowed ?? this.shadowed, command: command.present ? command.value : this.command, - createdAt: createdAt ?? this.createdAt, - updatedAt: updatedAt ?? this.updatedAt, - deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + localCreatedAt: + localCreatedAt.present ? localCreatedAt.value : this.localCreatedAt, + remoteCreatedAt: remoteCreatedAt.present + ? remoteCreatedAt.value + : this.remoteCreatedAt, + localUpdatedAt: + localUpdatedAt.present ? localUpdatedAt.value : this.localUpdatedAt, + remoteUpdatedAt: remoteUpdatedAt.present + ? remoteUpdatedAt.value + : this.remoteUpdatedAt, + localDeletedAt: + localDeletedAt.present ? localDeletedAt.value : this.localDeletedAt, + remoteDeletedAt: remoteDeletedAt.present + ? remoteDeletedAt.value + : this.remoteDeletedAt, userId: userId.present ? userId.value : this.userId, pinned: pinned ?? this.pinned, pinnedAt: pinnedAt.present ? pinnedAt.value : this.pinnedAt, @@ -1385,9 +1478,12 @@ class MessageEntity extends DataClass implements Insertable { ..write('showInChannel: $showInChannel, ') ..write('shadowed: $shadowed, ') ..write('command: $command, ') - ..write('createdAt: $createdAt, ') - ..write('updatedAt: $updatedAt, ') - ..write('deletedAt: $deletedAt, ') + ..write('localCreatedAt: $localCreatedAt, ') + ..write('remoteCreatedAt: $remoteCreatedAt, ') + ..write('localUpdatedAt: $localUpdatedAt, ') + ..write('remoteUpdatedAt: $remoteUpdatedAt, ') + ..write('localDeletedAt: $localDeletedAt, ') + ..write('remoteDeletedAt: $remoteDeletedAt, ') ..write('userId: $userId, ') ..write('pinned: $pinned, ') ..write('pinnedAt: $pinnedAt, ') @@ -1416,9 +1512,12 @@ class MessageEntity extends DataClass implements Insertable { showInChannel, shadowed, command, - createdAt, - updatedAt, - deletedAt, + localCreatedAt, + remoteCreatedAt, + localUpdatedAt, + remoteUpdatedAt, + localDeletedAt, + remoteDeletedAt, userId, pinned, pinnedAt, @@ -1446,9 +1545,12 @@ class MessageEntity extends DataClass implements Insertable { other.showInChannel == this.showInChannel && other.shadowed == this.shadowed && other.command == this.command && - other.createdAt == this.createdAt && - other.updatedAt == this.updatedAt && - other.deletedAt == this.deletedAt && + other.localCreatedAt == this.localCreatedAt && + other.remoteCreatedAt == this.remoteCreatedAt && + other.localUpdatedAt == this.localUpdatedAt && + other.remoteUpdatedAt == this.remoteUpdatedAt && + other.localDeletedAt == this.localDeletedAt && + other.remoteDeletedAt == this.remoteDeletedAt && other.userId == this.userId && other.pinned == this.pinned && other.pinnedAt == this.pinnedAt && @@ -1474,9 +1576,12 @@ class MessagesCompanion extends UpdateCompanion { final Value showInChannel; final Value shadowed; final Value command; - final Value createdAt; - final Value updatedAt; - final Value deletedAt; + final Value localCreatedAt; + final Value remoteCreatedAt; + final Value localUpdatedAt; + final Value remoteUpdatedAt; + final Value localDeletedAt; + final Value remoteDeletedAt; final Value userId; final Value pinned; final Value pinnedAt; @@ -1501,9 +1606,12 @@ class MessagesCompanion extends UpdateCompanion { this.showInChannel = const Value.absent(), this.shadowed = const Value.absent(), this.command = const Value.absent(), - this.createdAt = const Value.absent(), - this.updatedAt = const Value.absent(), - this.deletedAt = const Value.absent(), + this.localCreatedAt = const Value.absent(), + this.remoteCreatedAt = const Value.absent(), + this.localUpdatedAt = const Value.absent(), + this.remoteUpdatedAt = const Value.absent(), + this.localDeletedAt = const Value.absent(), + this.remoteDeletedAt = const Value.absent(), this.userId = const Value.absent(), this.pinned = const Value.absent(), this.pinnedAt = const Value.absent(), @@ -1529,9 +1637,12 @@ class MessagesCompanion extends UpdateCompanion { this.showInChannel = const Value.absent(), this.shadowed = const Value.absent(), this.command = const Value.absent(), - this.createdAt = const Value.absent(), - this.updatedAt = const Value.absent(), - this.deletedAt = const Value.absent(), + this.localCreatedAt = const Value.absent(), + this.remoteCreatedAt = const Value.absent(), + this.localUpdatedAt = const Value.absent(), + this.remoteUpdatedAt = const Value.absent(), + this.localDeletedAt = const Value.absent(), + this.remoteDeletedAt = const Value.absent(), this.userId = const Value.absent(), this.pinned = const Value.absent(), this.pinnedAt = const Value.absent(), @@ -1560,9 +1671,12 @@ class MessagesCompanion extends UpdateCompanion { Expression? showInChannel, Expression? shadowed, Expression? command, - Expression? createdAt, - Expression? updatedAt, - Expression? deletedAt, + Expression? localCreatedAt, + Expression? remoteCreatedAt, + Expression? localUpdatedAt, + Expression? remoteUpdatedAt, + Expression? localDeletedAt, + Expression? remoteDeletedAt, Expression? userId, Expression? pinned, Expression? pinnedAt, @@ -1588,9 +1702,12 @@ class MessagesCompanion extends UpdateCompanion { if (showInChannel != null) 'show_in_channel': showInChannel, if (shadowed != null) 'shadowed': shadowed, if (command != null) 'command': command, - if (createdAt != null) 'created_at': createdAt, - if (updatedAt != null) 'updated_at': updatedAt, - if (deletedAt != null) 'deleted_at': deletedAt, + if (localCreatedAt != null) 'local_created_at': localCreatedAt, + if (remoteCreatedAt != null) 'remote_created_at': remoteCreatedAt, + if (localUpdatedAt != null) 'local_updated_at': localUpdatedAt, + if (remoteUpdatedAt != null) 'remote_updated_at': remoteUpdatedAt, + if (localDeletedAt != null) 'local_deleted_at': localDeletedAt, + if (remoteDeletedAt != null) 'remote_deleted_at': remoteDeletedAt, if (userId != null) 'user_id': userId, if (pinned != null) 'pinned': pinned, if (pinnedAt != null) 'pinned_at': pinnedAt, @@ -1618,9 +1735,12 @@ class MessagesCompanion extends UpdateCompanion { Value? showInChannel, Value? shadowed, Value? command, - Value? createdAt, - Value? updatedAt, - Value? deletedAt, + Value? localCreatedAt, + Value? remoteCreatedAt, + Value? localUpdatedAt, + Value? remoteUpdatedAt, + Value? localDeletedAt, + Value? remoteDeletedAt, Value? userId, Value? pinned, Value? pinnedAt, @@ -1645,9 +1765,12 @@ class MessagesCompanion extends UpdateCompanion { showInChannel: showInChannel ?? this.showInChannel, shadowed: shadowed ?? this.shadowed, command: command ?? this.command, - createdAt: createdAt ?? this.createdAt, - updatedAt: updatedAt ?? this.updatedAt, - deletedAt: deletedAt ?? this.deletedAt, + localCreatedAt: localCreatedAt ?? this.localCreatedAt, + remoteCreatedAt: remoteCreatedAt ?? this.remoteCreatedAt, + localUpdatedAt: localUpdatedAt ?? this.localUpdatedAt, + remoteUpdatedAt: remoteUpdatedAt ?? this.remoteUpdatedAt, + localDeletedAt: localDeletedAt ?? this.localDeletedAt, + remoteDeletedAt: remoteDeletedAt ?? this.remoteDeletedAt, userId: userId ?? this.userId, pinned: pinned ?? this.pinned, pinnedAt: pinnedAt ?? this.pinnedAt, @@ -1713,14 +1836,23 @@ class MessagesCompanion extends UpdateCompanion { if (command.present) { map['command'] = Variable(command.value); } - if (createdAt.present) { - map['created_at'] = Variable(createdAt.value); + if (localCreatedAt.present) { + map['local_created_at'] = Variable(localCreatedAt.value); } - if (updatedAt.present) { - map['updated_at'] = Variable(updatedAt.value); + if (remoteCreatedAt.present) { + map['remote_created_at'] = Variable(remoteCreatedAt.value); } - if (deletedAt.present) { - map['deleted_at'] = Variable(deletedAt.value); + if (localUpdatedAt.present) { + map['local_updated_at'] = Variable(localUpdatedAt.value); + } + if (remoteUpdatedAt.present) { + map['remote_updated_at'] = Variable(remoteUpdatedAt.value); + } + if (localDeletedAt.present) { + map['local_deleted_at'] = Variable(localDeletedAt.value); + } + if (remoteDeletedAt.present) { + map['remote_deleted_at'] = Variable(remoteDeletedAt.value); } if (userId.present) { map['user_id'] = Variable(userId.value); @@ -1771,9 +1903,12 @@ class MessagesCompanion extends UpdateCompanion { ..write('showInChannel: $showInChannel, ') ..write('shadowed: $shadowed, ') ..write('command: $command, ') - ..write('createdAt: $createdAt, ') - ..write('updatedAt: $updatedAt, ') - ..write('deletedAt: $deletedAt, ') + ..write('localCreatedAt: $localCreatedAt, ') + ..write('remoteCreatedAt: $remoteCreatedAt, ') + ..write('localUpdatedAt: $localUpdatedAt, ') + ..write('remoteUpdatedAt: $remoteUpdatedAt, ') + ..write('localDeletedAt: $localDeletedAt, ') + ..write('remoteDeletedAt: $remoteDeletedAt, ') ..write('userId: $userId, ') ..write('pinned: $pinned, ') ..write('pinnedAt: $pinnedAt, ') @@ -1905,28 +2040,42 @@ class $PinnedMessagesTable extends PinnedMessages late final GeneratedColumn command = GeneratedColumn( 'command', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _createdAtMeta = - const VerificationMeta('createdAt'); + static const VerificationMeta _localCreatedAtMeta = + const VerificationMeta('localCreatedAt'); @override - late final GeneratedColumn createdAt = GeneratedColumn( - 'created_at', aliasedName, false, - type: DriftSqlType.dateTime, - requiredDuringInsert: false, - defaultValue: currentDateAndTime); - static const VerificationMeta _updatedAtMeta = - const VerificationMeta('updatedAt'); + late final GeneratedColumn localCreatedAt = + GeneratedColumn('local_created_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _remoteCreatedAtMeta = + const VerificationMeta('remoteCreatedAt'); @override - late final GeneratedColumn updatedAt = GeneratedColumn( - 'updated_at', aliasedName, false, - type: DriftSqlType.dateTime, - requiredDuringInsert: false, - defaultValue: currentDateAndTime); - static const VerificationMeta _deletedAtMeta = - const VerificationMeta('deletedAt'); + late final GeneratedColumn remoteCreatedAt = + GeneratedColumn('remote_created_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _localUpdatedAtMeta = + const VerificationMeta('localUpdatedAt'); @override - late final GeneratedColumn deletedAt = GeneratedColumn( - 'deleted_at', aliasedName, true, - type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn localUpdatedAt = + GeneratedColumn('local_updated_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _remoteUpdatedAtMeta = + const VerificationMeta('remoteUpdatedAt'); + @override + late final GeneratedColumn remoteUpdatedAt = + GeneratedColumn('remote_updated_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _localDeletedAtMeta = + const VerificationMeta('localDeletedAt'); + @override + late final GeneratedColumn localDeletedAt = + GeneratedColumn('local_deleted_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _remoteDeletedAtMeta = + const VerificationMeta('remoteDeletedAt'); + @override + late final GeneratedColumn remoteDeletedAt = + GeneratedColumn('remote_deleted_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); static const VerificationMeta _userIdMeta = const VerificationMeta('userId'); @override late final GeneratedColumn userId = GeneratedColumn( @@ -2002,9 +2151,12 @@ class $PinnedMessagesTable extends PinnedMessages showInChannel, shadowed, command, - createdAt, - updatedAt, - deletedAt, + localCreatedAt, + remoteCreatedAt, + localUpdatedAt, + remoteUpdatedAt, + localDeletedAt, + remoteDeletedAt, userId, pinned, pinnedAt, @@ -2074,17 +2226,41 @@ class $PinnedMessagesTable extends PinnedMessages context.handle(_commandMeta, command.isAcceptableOrUnknown(data['command']!, _commandMeta)); } - if (data.containsKey('created_at')) { - context.handle(_createdAtMeta, - createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); + if (data.containsKey('local_created_at')) { + context.handle( + _localCreatedAtMeta, + localCreatedAt.isAcceptableOrUnknown( + data['local_created_at']!, _localCreatedAtMeta)); } - if (data.containsKey('updated_at')) { - context.handle(_updatedAtMeta, - updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta)); + if (data.containsKey('remote_created_at')) { + context.handle( + _remoteCreatedAtMeta, + remoteCreatedAt.isAcceptableOrUnknown( + data['remote_created_at']!, _remoteCreatedAtMeta)); } - if (data.containsKey('deleted_at')) { - context.handle(_deletedAtMeta, - deletedAt.isAcceptableOrUnknown(data['deleted_at']!, _deletedAtMeta)); + if (data.containsKey('local_updated_at')) { + context.handle( + _localUpdatedAtMeta, + localUpdatedAt.isAcceptableOrUnknown( + data['local_updated_at']!, _localUpdatedAtMeta)); + } + if (data.containsKey('remote_updated_at')) { + context.handle( + _remoteUpdatedAtMeta, + remoteUpdatedAt.isAcceptableOrUnknown( + data['remote_updated_at']!, _remoteUpdatedAtMeta)); + } + if (data.containsKey('local_deleted_at')) { + context.handle( + _localDeletedAtMeta, + localDeletedAt.isAcceptableOrUnknown( + data['local_deleted_at']!, _localDeletedAtMeta)); + } + if (data.containsKey('remote_deleted_at')) { + context.handle( + _remoteDeletedAtMeta, + remoteDeletedAt.isAcceptableOrUnknown( + data['remote_deleted_at']!, _remoteDeletedAtMeta)); } if (data.containsKey('user_id')) { context.handle(_userIdMeta, @@ -2162,12 +2338,18 @@ class $PinnedMessagesTable extends PinnedMessages .read(DriftSqlType.bool, data['${effectivePrefix}shadowed'])!, command: attachedDatabase.typeMapping .read(DriftSqlType.string, data['${effectivePrefix}command']), - createdAt: attachedDatabase.typeMapping - .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, - updatedAt: attachedDatabase.typeMapping - .read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!, - deletedAt: attachedDatabase.typeMapping - .read(DriftSqlType.dateTime, data['${effectivePrefix}deleted_at']), + localCreatedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}local_created_at']), + remoteCreatedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}remote_created_at']), + localUpdatedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}local_updated_at']), + remoteUpdatedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}remote_updated_at']), + localDeletedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}local_deleted_at']), + remoteDeletedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}remote_deleted_at']), userId: attachedDatabase.typeMapping .read(DriftSqlType.string, data['${effectivePrefix}user_id']), pinned: attachedDatabase.typeMapping @@ -2195,23 +2377,23 @@ class $PinnedMessagesTable extends PinnedMessages } static TypeConverter, String> $converterattachments = - ListConverter(); + ListConverter(); static TypeConverter $converterstatus = MessageSendingStatusConverter(); static TypeConverter, String> $convertermentionedUsers = - ListConverter(); + ListConverter(); static TypeConverter, String> $converterreactionCounts = - MapConverter(); + MapConverter(); static TypeConverter?, String?> $converterreactionCountsn = NullAwareTypeConverter.wrap($converterreactionCounts); static TypeConverter, String> $converterreactionScores = - MapConverter(); + MapConverter(); static TypeConverter?, String?> $converterreactionScoresn = NullAwareTypeConverter.wrap($converterreactionScores); static TypeConverter?, String?> $converteri18n = - NullableMapConverter(); + NullableMapConverter(); static TypeConverter, String> $converterextraData = - MapConverter(); + MapConverter(); static TypeConverter?, String?> $converterextraDatan = NullAwareTypeConverter.wrap($converterextraData); } @@ -2261,14 +2443,23 @@ class PinnedMessageEntity extends DataClass /// A used command name. final String? command; - /// The DateTime when the message was created. - final DateTime createdAt; + /// The DateTime on which the message was created on the client. + final DateTime? localCreatedAt; - /// The DateTime when the message was updated last time. - final DateTime updatedAt; + /// The DateTime on which the message was created on the server. + final DateTime? remoteCreatedAt; - /// The DateTime when the message was deleted. - final DateTime? deletedAt; + /// The DateTime on which the message was updated on the client. + final DateTime? localUpdatedAt; + + /// The DateTime on which the message was updated on the server. + final DateTime? remoteUpdatedAt; + + /// The DateTime on which the message was deleted on the client. + final DateTime? localDeletedAt; + + /// The DateTime on which the message was deleted on the server. + final DateTime? remoteDeletedAt; /// Id of the User who sent the message final String? userId; @@ -2308,9 +2499,12 @@ class PinnedMessageEntity extends DataClass this.showInChannel, required this.shadowed, this.command, - required this.createdAt, - required this.updatedAt, - this.deletedAt, + this.localCreatedAt, + this.remoteCreatedAt, + this.localUpdatedAt, + this.remoteUpdatedAt, + this.localDeletedAt, + this.remoteDeletedAt, this.userId, required this.pinned, this.pinnedAt, @@ -2366,10 +2560,23 @@ class PinnedMessageEntity extends DataClass if (!nullToAbsent || command != null) { map['command'] = Variable(command); } - map['created_at'] = Variable(createdAt); - map['updated_at'] = Variable(updatedAt); - if (!nullToAbsent || deletedAt != null) { - map['deleted_at'] = Variable(deletedAt); + if (!nullToAbsent || localCreatedAt != null) { + map['local_created_at'] = Variable(localCreatedAt); + } + if (!nullToAbsent || remoteCreatedAt != null) { + map['remote_created_at'] = Variable(remoteCreatedAt); + } + if (!nullToAbsent || localUpdatedAt != null) { + map['local_updated_at'] = Variable(localUpdatedAt); + } + if (!nullToAbsent || remoteUpdatedAt != null) { + map['remote_updated_at'] = Variable(remoteUpdatedAt); + } + if (!nullToAbsent || localDeletedAt != null) { + map['local_deleted_at'] = Variable(localDeletedAt); + } + if (!nullToAbsent || remoteDeletedAt != null) { + map['remote_deleted_at'] = Variable(remoteDeletedAt); } if (!nullToAbsent || userId != null) { map['user_id'] = Variable(userId); @@ -2416,9 +2623,12 @@ class PinnedMessageEntity extends DataClass showInChannel: serializer.fromJson(json['showInChannel']), shadowed: serializer.fromJson(json['shadowed']), command: serializer.fromJson(json['command']), - createdAt: serializer.fromJson(json['createdAt']), - updatedAt: serializer.fromJson(json['updatedAt']), - deletedAt: serializer.fromJson(json['deletedAt']), + localCreatedAt: serializer.fromJson(json['localCreatedAt']), + remoteCreatedAt: serializer.fromJson(json['remoteCreatedAt']), + localUpdatedAt: serializer.fromJson(json['localUpdatedAt']), + remoteUpdatedAt: serializer.fromJson(json['remoteUpdatedAt']), + localDeletedAt: serializer.fromJson(json['localDeletedAt']), + remoteDeletedAt: serializer.fromJson(json['remoteDeletedAt']), userId: serializer.fromJson(json['userId']), pinned: serializer.fromJson(json['pinned']), pinnedAt: serializer.fromJson(json['pinnedAt']), @@ -2447,9 +2657,12 @@ class PinnedMessageEntity extends DataClass 'showInChannel': serializer.toJson(showInChannel), 'shadowed': serializer.toJson(shadowed), 'command': serializer.toJson(command), - 'createdAt': serializer.toJson(createdAt), - 'updatedAt': serializer.toJson(updatedAt), - 'deletedAt': serializer.toJson(deletedAt), + 'localCreatedAt': serializer.toJson(localCreatedAt), + 'remoteCreatedAt': serializer.toJson(remoteCreatedAt), + 'localUpdatedAt': serializer.toJson(localUpdatedAt), + 'remoteUpdatedAt': serializer.toJson(remoteUpdatedAt), + 'localDeletedAt': serializer.toJson(localDeletedAt), + 'remoteDeletedAt': serializer.toJson(remoteDeletedAt), 'userId': serializer.toJson(userId), 'pinned': serializer.toJson(pinned), 'pinnedAt': serializer.toJson(pinnedAt), @@ -2476,9 +2689,12 @@ class PinnedMessageEntity extends DataClass Value showInChannel = const Value.absent(), bool? shadowed, Value command = const Value.absent(), - DateTime? createdAt, - DateTime? updatedAt, - Value deletedAt = const Value.absent(), + Value localCreatedAt = const Value.absent(), + Value remoteCreatedAt = const Value.absent(), + Value localUpdatedAt = const Value.absent(), + Value remoteUpdatedAt = const Value.absent(), + Value localDeletedAt = const Value.absent(), + Value remoteDeletedAt = const Value.absent(), Value userId = const Value.absent(), bool? pinned, Value pinnedAt = const Value.absent(), @@ -2507,9 +2723,21 @@ class PinnedMessageEntity extends DataClass showInChannel.present ? showInChannel.value : this.showInChannel, shadowed: shadowed ?? this.shadowed, command: command.present ? command.value : this.command, - createdAt: createdAt ?? this.createdAt, - updatedAt: updatedAt ?? this.updatedAt, - deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + localCreatedAt: + localCreatedAt.present ? localCreatedAt.value : this.localCreatedAt, + remoteCreatedAt: remoteCreatedAt.present + ? remoteCreatedAt.value + : this.remoteCreatedAt, + localUpdatedAt: + localUpdatedAt.present ? localUpdatedAt.value : this.localUpdatedAt, + remoteUpdatedAt: remoteUpdatedAt.present + ? remoteUpdatedAt.value + : this.remoteUpdatedAt, + localDeletedAt: + localDeletedAt.present ? localDeletedAt.value : this.localDeletedAt, + remoteDeletedAt: remoteDeletedAt.present + ? remoteDeletedAt.value + : this.remoteDeletedAt, userId: userId.present ? userId.value : this.userId, pinned: pinned ?? this.pinned, pinnedAt: pinnedAt.present ? pinnedAt.value : this.pinnedAt, @@ -2537,9 +2765,12 @@ class PinnedMessageEntity extends DataClass ..write('showInChannel: $showInChannel, ') ..write('shadowed: $shadowed, ') ..write('command: $command, ') - ..write('createdAt: $createdAt, ') - ..write('updatedAt: $updatedAt, ') - ..write('deletedAt: $deletedAt, ') + ..write('localCreatedAt: $localCreatedAt, ') + ..write('remoteCreatedAt: $remoteCreatedAt, ') + ..write('localUpdatedAt: $localUpdatedAt, ') + ..write('remoteUpdatedAt: $remoteUpdatedAt, ') + ..write('localDeletedAt: $localDeletedAt, ') + ..write('remoteDeletedAt: $remoteDeletedAt, ') ..write('userId: $userId, ') ..write('pinned: $pinned, ') ..write('pinnedAt: $pinnedAt, ') @@ -2568,9 +2799,12 @@ class PinnedMessageEntity extends DataClass showInChannel, shadowed, command, - createdAt, - updatedAt, - deletedAt, + localCreatedAt, + remoteCreatedAt, + localUpdatedAt, + remoteUpdatedAt, + localDeletedAt, + remoteDeletedAt, userId, pinned, pinnedAt, @@ -2598,9 +2832,12 @@ class PinnedMessageEntity extends DataClass other.showInChannel == this.showInChannel && other.shadowed == this.shadowed && other.command == this.command && - other.createdAt == this.createdAt && - other.updatedAt == this.updatedAt && - other.deletedAt == this.deletedAt && + other.localCreatedAt == this.localCreatedAt && + other.remoteCreatedAt == this.remoteCreatedAt && + other.localUpdatedAt == this.localUpdatedAt && + other.remoteUpdatedAt == this.remoteUpdatedAt && + other.localDeletedAt == this.localDeletedAt && + other.remoteDeletedAt == this.remoteDeletedAt && other.userId == this.userId && other.pinned == this.pinned && other.pinnedAt == this.pinnedAt && @@ -2626,9 +2863,12 @@ class PinnedMessagesCompanion extends UpdateCompanion { final Value showInChannel; final Value shadowed; final Value command; - final Value createdAt; - final Value updatedAt; - final Value deletedAt; + final Value localCreatedAt; + final Value remoteCreatedAt; + final Value localUpdatedAt; + final Value remoteUpdatedAt; + final Value localDeletedAt; + final Value remoteDeletedAt; final Value userId; final Value pinned; final Value pinnedAt; @@ -2653,9 +2893,12 @@ class PinnedMessagesCompanion extends UpdateCompanion { this.showInChannel = const Value.absent(), this.shadowed = const Value.absent(), this.command = const Value.absent(), - this.createdAt = const Value.absent(), - this.updatedAt = const Value.absent(), - this.deletedAt = const Value.absent(), + this.localCreatedAt = const Value.absent(), + this.remoteCreatedAt = const Value.absent(), + this.localUpdatedAt = const Value.absent(), + this.remoteUpdatedAt = const Value.absent(), + this.localDeletedAt = const Value.absent(), + this.remoteDeletedAt = const Value.absent(), this.userId = const Value.absent(), this.pinned = const Value.absent(), this.pinnedAt = const Value.absent(), @@ -2681,9 +2924,12 @@ class PinnedMessagesCompanion extends UpdateCompanion { this.showInChannel = const Value.absent(), this.shadowed = const Value.absent(), this.command = const Value.absent(), - this.createdAt = const Value.absent(), - this.updatedAt = const Value.absent(), - this.deletedAt = const Value.absent(), + this.localCreatedAt = const Value.absent(), + this.remoteCreatedAt = const Value.absent(), + this.localUpdatedAt = const Value.absent(), + this.remoteUpdatedAt = const Value.absent(), + this.localDeletedAt = const Value.absent(), + this.remoteDeletedAt = const Value.absent(), this.userId = const Value.absent(), this.pinned = const Value.absent(), this.pinnedAt = const Value.absent(), @@ -2712,9 +2958,12 @@ class PinnedMessagesCompanion extends UpdateCompanion { Expression? showInChannel, Expression? shadowed, Expression? command, - Expression? createdAt, - Expression? updatedAt, - Expression? deletedAt, + Expression? localCreatedAt, + Expression? remoteCreatedAt, + Expression? localUpdatedAt, + Expression? remoteUpdatedAt, + Expression? localDeletedAt, + Expression? remoteDeletedAt, Expression? userId, Expression? pinned, Expression? pinnedAt, @@ -2740,9 +2989,12 @@ class PinnedMessagesCompanion extends UpdateCompanion { if (showInChannel != null) 'show_in_channel': showInChannel, if (shadowed != null) 'shadowed': shadowed, if (command != null) 'command': command, - if (createdAt != null) 'created_at': createdAt, - if (updatedAt != null) 'updated_at': updatedAt, - if (deletedAt != null) 'deleted_at': deletedAt, + if (localCreatedAt != null) 'local_created_at': localCreatedAt, + if (remoteCreatedAt != null) 'remote_created_at': remoteCreatedAt, + if (localUpdatedAt != null) 'local_updated_at': localUpdatedAt, + if (remoteUpdatedAt != null) 'remote_updated_at': remoteUpdatedAt, + if (localDeletedAt != null) 'local_deleted_at': localDeletedAt, + if (remoteDeletedAt != null) 'remote_deleted_at': remoteDeletedAt, if (userId != null) 'user_id': userId, if (pinned != null) 'pinned': pinned, if (pinnedAt != null) 'pinned_at': pinnedAt, @@ -2770,9 +3022,12 @@ class PinnedMessagesCompanion extends UpdateCompanion { Value? showInChannel, Value? shadowed, Value? command, - Value? createdAt, - Value? updatedAt, - Value? deletedAt, + Value? localCreatedAt, + Value? remoteCreatedAt, + Value? localUpdatedAt, + Value? remoteUpdatedAt, + Value? localDeletedAt, + Value? remoteDeletedAt, Value? userId, Value? pinned, Value? pinnedAt, @@ -2797,9 +3052,12 @@ class PinnedMessagesCompanion extends UpdateCompanion { showInChannel: showInChannel ?? this.showInChannel, shadowed: shadowed ?? this.shadowed, command: command ?? this.command, - createdAt: createdAt ?? this.createdAt, - updatedAt: updatedAt ?? this.updatedAt, - deletedAt: deletedAt ?? this.deletedAt, + localCreatedAt: localCreatedAt ?? this.localCreatedAt, + remoteCreatedAt: remoteCreatedAt ?? this.remoteCreatedAt, + localUpdatedAt: localUpdatedAt ?? this.localUpdatedAt, + remoteUpdatedAt: remoteUpdatedAt ?? this.remoteUpdatedAt, + localDeletedAt: localDeletedAt ?? this.localDeletedAt, + remoteDeletedAt: remoteDeletedAt ?? this.remoteDeletedAt, userId: userId ?? this.userId, pinned: pinned ?? this.pinned, pinnedAt: pinnedAt ?? this.pinnedAt, @@ -2865,14 +3123,23 @@ class PinnedMessagesCompanion extends UpdateCompanion { if (command.present) { map['command'] = Variable(command.value); } - if (createdAt.present) { - map['created_at'] = Variable(createdAt.value); + if (localCreatedAt.present) { + map['local_created_at'] = Variable(localCreatedAt.value); } - if (updatedAt.present) { - map['updated_at'] = Variable(updatedAt.value); + if (remoteCreatedAt.present) { + map['remote_created_at'] = Variable(remoteCreatedAt.value); } - if (deletedAt.present) { - map['deleted_at'] = Variable(deletedAt.value); + if (localUpdatedAt.present) { + map['local_updated_at'] = Variable(localUpdatedAt.value); + } + if (remoteUpdatedAt.present) { + map['remote_updated_at'] = Variable(remoteUpdatedAt.value); + } + if (localDeletedAt.present) { + map['local_deleted_at'] = Variable(localDeletedAt.value); + } + if (remoteDeletedAt.present) { + map['remote_deleted_at'] = Variable(remoteDeletedAt.value); } if (userId.present) { map['user_id'] = Variable(userId.value); @@ -2923,9 +3190,12 @@ class PinnedMessagesCompanion extends UpdateCompanion { ..write('showInChannel: $showInChannel, ') ..write('shadowed: $shadowed, ') ..write('command: $command, ') - ..write('createdAt: $createdAt, ') - ..write('updatedAt: $updatedAt, ') - ..write('deletedAt: $deletedAt, ') + ..write('localCreatedAt: $localCreatedAt, ') + ..write('remoteCreatedAt: $remoteCreatedAt, ') + ..write('localUpdatedAt: $localUpdatedAt, ') + ..write('remoteUpdatedAt: $remoteUpdatedAt, ') + ..write('localDeletedAt: $localDeletedAt, ') + ..write('remoteDeletedAt: $remoteDeletedAt, ') ..write('userId: $userId, ') ..write('pinned: $pinned, ') ..write('pinnedAt: $pinnedAt, ') @@ -3060,7 +3330,7 @@ class $PinnedMessageReactionsTable extends PinnedMessageReactions } static TypeConverter, String> $converterextraData = - MapConverter(); + MapConverter(); static TypeConverter?, String?> $converterextraDatan = NullAwareTypeConverter.wrap($converterextraData); } @@ -3403,7 +3673,7 @@ class $ReactionsTable extends Reactions } static TypeConverter, String> $converterextraData = - MapConverter(); + MapConverter(); static TypeConverter?, String?> $converterextraDatan = NullAwareTypeConverter.wrap($converterextraData); } @@ -3790,7 +4060,7 @@ class $UsersTable extends Users with TableInfo<$UsersTable, UserEntity> { } static TypeConverter, String> $converterextraData = - MapConverter(); + MapConverter(); } class UserEntity extends DataClass implements Insertable { diff --git a/packages/stream_chat_persistence/lib/src/entity/messages.dart b/packages/stream_chat_persistence/lib/src/entity/messages.dart index fe20013a..5d585619 100644 --- a/packages/stream_chat_persistence/lib/src/entity/messages.dart +++ b/packages/stream_chat_persistence/lib/src/entity/messages.dart @@ -53,14 +53,52 @@ class Messages extends Table { /// A used command name. TextColumn get command => text().nullable()(); - /// The DateTime when the message was created. - DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + /// The DateTime on which the message was created. + /// + /// Returns the latest between [localCreatedAt] and [remoteCreatedAt]. + /// If both are null, returns [currentDateAndTime]. + Expression get createdAt { + return coalesce( + [localCreatedAt, remoteCreatedAt, currentDateAndTime], + ); + } - /// The DateTime when the message was updated last time. - DateTimeColumn get updatedAt => dateTime().withDefault(currentDateAndTime)(); + /// The DateTime on which the message was created on the client. + DateTimeColumn get localCreatedAt => dateTime().nullable()(); - /// The DateTime when the message was deleted. - DateTimeColumn get deletedAt => dateTime().nullable()(); + /// The DateTime on which the message was created on the server. + DateTimeColumn get remoteCreatedAt => dateTime().nullable()(); + + /// The DateTime on which the message was updated last time. + /// + /// Returns the latest between [localUpdatedAt] and [remoteUpdatedAt]. + /// If both are null, returns [createdAt]. + Expression get updatedAt { + return coalesce( + [localUpdatedAt, remoteUpdatedAt, createdAt], + ); + } + + /// The DateTime on which the message was updated on the client. + DateTimeColumn get localUpdatedAt => dateTime().nullable()(); + + /// The DateTime on which the message was updated on the server. + DateTimeColumn get remoteUpdatedAt => dateTime().nullable()(); + + /// The DateTime on which the message was deleted. + /// + /// Returns the latest between [localDeletedAt] and [remoteDeletedAt]. + Expression get deletedAt { + return coalesce( + [localDeletedAt, remoteDeletedAt], + ); + } + + /// The DateTime on which the message was deleted on the client. + DateTimeColumn get localDeletedAt => dateTime().nullable()(); + + /// The DateTime on which the message was deleted on the server. + DateTimeColumn get remoteDeletedAt => dateTime().nullable()(); /// Id of the User who sent the message TextColumn get userId => text().nullable()(); 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 72d3d30f..0fd69db8 100644 --- a/packages/stream_chat_persistence/lib/src/mapper/message_mapper.dart +++ b/packages/stream_chat_persistence/lib/src/mapper/message_mapper.dart @@ -21,9 +21,13 @@ extension MessageEntityX on MessageEntity { final json = jsonDecode(it); return Attachment.fromData(json); }).toList(), - createdAt: createdAt, extraData: extraData ?? {}, - updatedAt: updatedAt, + createdAt: remoteCreatedAt, + localCreatedAt: localCreatedAt, + updatedAt: remoteUpdatedAt, + localUpdatedAt: localUpdatedAt, + deletedAt: remoteDeletedAt, + localDeletedAt: localDeletedAt, id: id, type: type, status: status, @@ -37,7 +41,6 @@ extension MessageEntityX on MessageEntity { showInChannel: showInChannel, text: messageText, user: user, - deletedAt: deletedAt, pinned: pinned, pinnedAt: pinnedAt, pinExpires: pinExpires, @@ -59,7 +62,8 @@ extension MessageX on Message { parentId: parentId, quotedMessageId: quotedMessageId, command: command, - createdAt: createdAt, + remoteCreatedAt: remoteCreatedAt, + localCreatedAt: localCreatedAt, shadowed: shadowed, showInChannel: showInChannel, replyCount: replyCount, @@ -67,10 +71,12 @@ extension MessageX on Message { reactionCounts: reactionCounts, mentionedUsers: mentionedUsers.map(jsonEncode).toList(), status: status, - updatedAt: updatedAt, + remoteUpdatedAt: remoteUpdatedAt, + localUpdatedAt: localUpdatedAt, extraData: extraData, userId: user?.id, - deletedAt: deletedAt, + remoteDeletedAt: remoteDeletedAt, + localDeletedAt: localDeletedAt, messageText: text, pinned: pinned, pinnedAt: pinnedAt, 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 91a25a33..d4089a7c 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 @@ -21,9 +21,13 @@ extension PinnedMessageEntityX on PinnedMessageEntity { final json = jsonDecode(it); return Attachment.fromData(json); }).toList(), - createdAt: createdAt, extraData: extraData ?? {}, - updatedAt: updatedAt, + createdAt: remoteCreatedAt, + localCreatedAt: localCreatedAt, + updatedAt: remoteUpdatedAt, + localUpdatedAt: localUpdatedAt, + deletedAt: remoteDeletedAt, + localDeletedAt: localDeletedAt, id: id, type: type, status: status, @@ -37,7 +41,6 @@ extension PinnedMessageEntityX on PinnedMessageEntity { showInChannel: showInChannel, text: messageText, user: user, - deletedAt: deletedAt, pinned: pinned, pinnedAt: pinnedAt, pinExpires: pinExpires, @@ -60,7 +63,8 @@ extension PMessageX on Message { parentId: parentId, quotedMessageId: quotedMessageId, command: command, - createdAt: createdAt, + remoteCreatedAt: remoteCreatedAt, + localCreatedAt: localCreatedAt, shadowed: shadowed, showInChannel: showInChannel, replyCount: replyCount, @@ -68,10 +72,12 @@ extension PMessageX on Message { reactionCounts: reactionCounts, mentionedUsers: mentionedUsers.map(jsonEncode).toList(), status: status, - updatedAt: updatedAt, + remoteUpdatedAt: remoteUpdatedAt, + localUpdatedAt: localUpdatedAt, extraData: extraData, userId: user?.id, - deletedAt: deletedAt, + remoteDeletedAt: remoteDeletedAt, + localDeletedAt: localDeletedAt, messageText: text, pinned: pinned, pinnedAt: pinnedAt, 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 ccb9108e..b6524861 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 @@ -38,7 +38,8 @@ void main() { parentId: 'testParentId', quotedMessageId: quotedMessage.id, command: 'testCommand', - createdAt: DateTime.now(), + localCreatedAt: DateTime.now(), + remoteCreatedAt: DateTime.now().add(const Duration(seconds: 1)), shadowed: math.Random().nextBool(), showInChannel: math.Random().nextBool(), replyCount: 33, @@ -52,10 +53,12 @@ void main() { jsonEncode(User(id: 'testuser')), ], status: MessageSendingStatus.sent, - updatedAt: DateTime.now(), + localUpdatedAt: DateTime.now(), + remoteUpdatedAt: DateTime.now().add(const Duration(seconds: 1)), extraData: {'extra_test_data': 'extraData'}, userId: user.id, - deletedAt: DateTime.now(), + localDeletedAt: DateTime.now(), + remoteDeletedAt: DateTime.now().add(const Duration(seconds: 1)), messageText: 'Hello', pinned: true, pinExpires: DateTime.now().toUtc(), @@ -81,7 +84,8 @@ void main() { expect(message.parentId, entity.parentId); expect(message.quotedMessageId, entity.quotedMessageId); expect(message.command, entity.command); - expect(message.createdAt, isSameDateAs(entity.createdAt)); + expect(message.localCreatedAt, isSameDateAs(entity.localCreatedAt)); + expect(message.remoteCreatedAt, isSameDateAs(entity.remoteCreatedAt)); expect(message.shadowed, entity.shadowed); expect(message.showInChannel, entity.showInChannel); for (var i = 0; i < message.mentionedUsers.length; i++) { @@ -93,10 +97,12 @@ void main() { expect(message.reactionScores, entity.reactionScores); expect(message.reactionCounts, entity.reactionCounts); expect(message.status, entity.status); - expect(message.updatedAt, isSameDateAs(entity.updatedAt)); + expect(message.localUpdatedAt, isSameDateAs(entity.localUpdatedAt)); + expect(message.remoteUpdatedAt, isSameDateAs(entity.remoteUpdatedAt)); expect(message.extraData, entity.extraData); expect(message.user!.id, entity.userId); - expect(message.deletedAt, isSameDateAs(entity.deletedAt)); + expect(message.localDeletedAt, isSameDateAs(entity.localDeletedAt)); + expect(message.remoteDeletedAt, isSameDateAs(entity.remoteDeletedAt)); expect(message.text, entity.messageText); expect(message.pinned, entity.pinned); expect(message.pinExpires, isSameDateAs(entity.pinExpires)); @@ -144,7 +150,8 @@ void main() { parentId: 'testParentId', quotedMessageId: quotedMessage.id, command: 'testCommand', - createdAt: DateTime.now(), + localCreatedAt: DateTime.now(), + createdAt: DateTime.now().add(const Duration(seconds: 1)), shadowed: math.Random().nextBool(), showInChannel: math.Random().nextBool(), replyCount: 33, @@ -157,10 +164,12 @@ void main() { (prev, curr) => prev?..update(curr.type, (value) => value + 1, ifAbsent: () => 1), ), - updatedAt: DateTime.now(), + localUpdatedAt: DateTime.now(), + updatedAt: DateTime.now().add(const Duration(seconds: 1)), extraData: const {'extra_test_data': 'extraData'}, user: user, - deletedAt: DateTime.now(), + localDeletedAt: DateTime.now(), + deletedAt: DateTime.now().add(const Duration(seconds: 1)), text: 'Hello', pinned: true, pinExpires: DateTime.now(), @@ -179,7 +188,8 @@ void main() { expect(entity.parentId, message.parentId); expect(entity.quotedMessageId, message.quotedMessageId); expect(entity.command, message.command); - expect(entity.createdAt, isSameDateAs(message.createdAt)); + expect(entity.localCreatedAt, isSameDateAs(message.localCreatedAt)); + expect(entity.remoteCreatedAt, isSameDateAs(message.remoteCreatedAt)); expect(entity.shadowed, message.shadowed); expect(entity.showInChannel, message.showInChannel); expect(entity.replyCount, message.replyCount); @@ -188,10 +198,12 @@ void main() { expect(entity.reactionScores, message.reactionScores); expect(entity.reactionCounts, message.reactionCounts); expect(entity.status, message.status); - expect(entity.updatedAt, isSameDateAs(message.updatedAt)); + expect(entity.localUpdatedAt, isSameDateAs(message.localUpdatedAt)); + expect(entity.remoteUpdatedAt, isSameDateAs(message.remoteUpdatedAt)); expect(entity.extraData, message.extraData); expect(entity.userId, message.user!.id); - expect(entity.deletedAt, isSameDateAs(message.deletedAt)); + expect(entity.localDeletedAt, isSameDateAs(message.localDeletedAt)); + expect(entity.remoteDeletedAt, isSameDateAs(message.remoteDeletedAt)); expect(entity.messageText, message.text); expect(entity.pinned, message.pinned); expect(entity.pinExpires, isSameDateAs(message.pinExpires)); 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 fd3e075c..490af8ca 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 @@ -38,7 +38,8 @@ void main() { parentId: 'testParentId', quotedMessageId: quotedMessage.id, command: 'testCommand', - createdAt: DateTime.now(), + localCreatedAt: DateTime.now(), + remoteCreatedAt: DateTime.now().add(const Duration(seconds: 1)), shadowed: math.Random().nextBool(), showInChannel: math.Random().nextBool(), replyCount: 33, @@ -48,12 +49,16 @@ void main() { (prev, curr) => prev?..update(curr.type, (value) => value + 1, ifAbsent: () => 1), ), - mentionedUsers: [], + mentionedUsers: [ + jsonEncode(User(id: 'testuser')), + ], status: MessageSendingStatus.sent, - updatedAt: DateTime.now(), + localUpdatedAt: DateTime.now(), + remoteUpdatedAt: DateTime.now().add(const Duration(seconds: 1)), extraData: {'extra_test_data': 'extraData'}, userId: user.id, - deletedAt: DateTime.now(), + localDeletedAt: DateTime.now(), + remoteDeletedAt: DateTime.now().add(const Duration(seconds: 1)), messageText: 'Hello', pinned: true, pinExpires: DateTime.now().toUtc(), @@ -79,17 +84,25 @@ void main() { expect(message.parentId, entity.parentId); expect(message.quotedMessageId, entity.quotedMessageId); expect(message.command, entity.command); - expect(message.createdAt, isSameDateAs(entity.createdAt)); + expect(message.localCreatedAt, isSameDateAs(entity.localCreatedAt)); + expect(message.remoteCreatedAt, isSameDateAs(entity.remoteCreatedAt)); expect(message.shadowed, entity.shadowed); expect(message.showInChannel, entity.showInChannel); + for (var i = 0; i < message.mentionedUsers.length; i++) { + final entityMentionedUser = + User.fromJson(jsonDecode(entity.mentionedUsers[i])); + expect(message.mentionedUsers[i].id, entityMentionedUser.id); + } expect(message.replyCount, entity.replyCount); expect(message.reactionScores, entity.reactionScores); expect(message.reactionCounts, entity.reactionCounts); expect(message.status, entity.status); - expect(message.updatedAt, isSameDateAs(entity.updatedAt)); + expect(message.localUpdatedAt, isSameDateAs(entity.localUpdatedAt)); + expect(message.remoteUpdatedAt, isSameDateAs(entity.remoteUpdatedAt)); expect(message.extraData, entity.extraData); expect(message.user!.id, entity.userId); - expect(message.deletedAt, isSameDateAs(entity.deletedAt)); + expect(message.localDeletedAt, isSameDateAs(entity.localDeletedAt)); + expect(message.remoteDeletedAt, isSameDateAs(entity.remoteDeletedAt)); expect(message.text, entity.messageText); expect(message.pinned, entity.pinned); expect(message.pinExpires, isSameDateAs(entity.pinExpires)); @@ -108,7 +121,7 @@ void main() { } }); - test('toPinnedEntity should map message into PinnedMessageEntity', () { + test('toEntity should map message into MessageEntity', () { const cid = 'testCid'; final user = User(id: 'testUserId'); final quotedMessage = Message(id: 'testQuotedMessageId'); @@ -137,20 +150,26 @@ void main() { parentId: 'testParentId', quotedMessageId: quotedMessage.id, command: 'testCommand', - createdAt: DateTime.now(), + localCreatedAt: DateTime.now(), + createdAt: DateTime.now().add(const Duration(seconds: 1)), shadowed: math.Random().nextBool(), showInChannel: math.Random().nextBool(), replyCount: 33, + mentionedUsers: [ + User(id: 'testuser'), + ], reactionScores: {for (final r in reactions) r.type: r.score}, reactionCounts: reactions.fold( {}, (prev, curr) => prev?..update(curr.type, (value) => value + 1, ifAbsent: () => 1), ), - updatedAt: DateTime.now(), + localUpdatedAt: DateTime.now(), + updatedAt: DateTime.now().add(const Duration(seconds: 1)), extraData: const {'extra_test_data': 'extraData'}, user: user, - deletedAt: DateTime.now(), + localDeletedAt: DateTime.now(), + deletedAt: DateTime.now().add(const Duration(seconds: 1)), text: 'Hello', pinned: true, pinExpires: DateTime.now(), @@ -169,17 +188,22 @@ void main() { expect(entity.parentId, message.parentId); expect(entity.quotedMessageId, message.quotedMessageId); expect(entity.command, message.command); - expect(entity.createdAt, isSameDateAs(message.createdAt)); + expect(entity.localCreatedAt, isSameDateAs(message.localCreatedAt)); + expect(entity.remoteCreatedAt, isSameDateAs(message.remoteCreatedAt)); expect(entity.shadowed, message.shadowed); expect(entity.showInChannel, message.showInChannel); expect(entity.replyCount, message.replyCount); + expect( + entity.mentionedUsers, message.mentionedUsers.map(jsonEncode).toList()); expect(entity.reactionScores, message.reactionScores); expect(entity.reactionCounts, message.reactionCounts); expect(entity.status, message.status); - expect(entity.updatedAt, isSameDateAs(message.updatedAt)); + expect(entity.localUpdatedAt, isSameDateAs(message.localUpdatedAt)); + expect(entity.remoteUpdatedAt, isSameDateAs(message.remoteUpdatedAt)); expect(entity.extraData, message.extraData); expect(entity.userId, message.user!.id); - expect(entity.deletedAt, isSameDateAs(message.deletedAt)); + expect(entity.localDeletedAt, isSameDateAs(message.localDeletedAt)); + expect(entity.remoteDeletedAt, isSameDateAs(message.remoteDeletedAt)); expect(entity.messageText, message.text); expect(entity.pinned, message.pinned); expect(entity.pinExpires, isSameDateAs(message.pinExpires));