diff --git a/packages/stream_chat/lib/src/db/chat_persistence_client.dart b/packages/stream_chat/lib/src/db/chat_persistence_client.dart index 5693c3fb3c..df3d8ce293 100644 --- a/packages/stream_chat/lib/src/db/chat_persistence_client.dart +++ b/packages/stream_chat/lib/src/db/chat_persistence_client.dart @@ -4,6 +4,7 @@ import 'package:stream_chat/src/core/api/sort_order.dart'; import 'package:stream_chat/src/core/models/attachment_file.dart'; import 'package:stream_chat/src/core/models/channel_model.dart'; import 'package:stream_chat/src/core/models/channel_state.dart'; +import 'package:stream_chat/src/core/models/draft.dart'; import 'package:stream_chat/src/core/models/event.dart'; import 'package:stream_chat/src/core/models/filter.dart'; import 'package:stream_chat/src/core/models/member.dart'; @@ -78,32 +79,40 @@ abstract class ChatPersistenceClient { PaginationParams? messagePagination, }); + /// Get stored [Draft] message by providing channel [cid]. + Future getDraftMessageByCid(String cid); + + /// Get stored [Draft] message by providing parent message [id]. + Future getDraftMessageByParentId(String parentId); + /// Get [ChannelState] data by providing channel [cid] Future getChannelStateByCid( String cid, { PaginationParams? messagePagination, PaginationParams? pinnedMessagePagination, }) async { - final data = await Future.wait([ + final (members, reads, channel, messages, pinnedMessages, draft) = await ( getMembersByCid(cid), getReadsByCid(cid), getChannelByCid(cid), getMessagesByCid(cid, messagePagination: messagePagination), getPinnedMessagesByCid(cid, messagePagination: pinnedMessagePagination), - ]); + getDraftMessageByCid(cid), + ).wait; - final members = data[0] as List?; - final membership = userId == null - ? null - : members?.firstWhereOrNull((it) => it.userId == userId); + final membership = switch (userId) { + final userId? => members?.firstWhereOrNull((it) => it.userId == userId), + _ => null, + }; return ChannelState( members: members, membership: membership, - read: data[1] as List?, - channel: data[2] as ChannelModel?, - messages: data[3] as List?, - pinnedMessages: data[4] as List?, + read: reads, + channel: channel, + messages: messages, + pinnedMessages: pinnedMessages, + draft: draft, ); } @@ -157,6 +166,9 @@ abstract class ChatPersistenceClient { /// Remove a channel by [channelId] Future deleteChannels(List cids); + /// Removes all the draft messages by draft [messageIds] + Future deleteDraftMessagesByIds(List messageIds); + /// Updates the message data of a particular channel [cid] with /// the new [messages] data Future updateMessages(String cid, List messages) => @@ -214,6 +226,9 @@ abstract class ChatPersistenceClient { /// Updates the poll votes data with the new [pollVotes] data Future updatePollVotes(List pollVotes); + /// Updates the draft messages data with the new [draftMessages] data + Future updateDraftMessages(List draftMessages); + /// Deletes all the reactions by [messageIds] Future deleteReactionsByMessageId(List messageIds); @@ -272,6 +287,9 @@ abstract class ChatPersistenceClient { final pollVotes = []; final pollVotesToDelete = []; + final drafts = []; + final draftsToDelete = []; + for (final state in channelStates) { final channel = state.channel; // Continue if channel is not available. @@ -315,6 +333,14 @@ abstract class ChatPersistenceClient { pollVotes.addAll(polls.expand(_expandPollVotes)); + drafts.addAll([ + state.draft, + ...?messages?.map((it) => it.draft), + ...?pinnedMessages?.map((it) => it.draft), + ].nonNulls); + + draftsToDelete.addAll(drafts.map((it) => it.message.id)); + users.addAll([ channel.createdBy, ...?messages?.map((it) => it.user), @@ -335,6 +361,7 @@ abstract class ChatPersistenceClient { deleteReactionsByMessageId(reactionsToDelete), deletePinnedMessageReactionsByMessageId(pinnedReactionsToDelete), deletePollVotesByPollIds(pollVotesToDelete), + deleteDraftMessagesByIds(draftsToDelete), ]); // Updating first as does not depend on any other table. @@ -357,6 +384,7 @@ abstract class ChatPersistenceClient { updateReactions(reactions), updatePinnedMessageReactions(pinnedReactions), updatePollVotes(pollVotes), + updateDraftMessages(drafts), ]); } diff --git a/packages/stream_chat/test/src/db/chat_persistence_client_test.dart b/packages/stream_chat/test/src/db/chat_persistence_client_test.dart index 675773194a..da1f06d481 100644 --- a/packages/stream_chat/test/src/db/chat_persistence_client_test.dart +++ b/packages/stream_chat/test/src/db/chat_persistence_client_test.dart @@ -2,6 +2,8 @@ import 'package:stream_chat/src/core/api/requests.dart'; import 'package:stream_chat/src/core/api/sort_order.dart'; import 'package:stream_chat/src/core/models/channel_model.dart'; import 'package:stream_chat/src/core/models/channel_state.dart'; +import 'package:stream_chat/src/core/models/draft.dart'; +import 'package:stream_chat/src/core/models/draft_message.dart'; import 'package:stream_chat/src/core/models/event.dart'; import 'package:stream_chat/src/core/models/filter.dart'; import 'package:stream_chat/src/core/models/member.dart'; @@ -55,6 +57,10 @@ class TestPersistenceClient extends ChatPersistenceClient { @override Future deletePollVotesByPollIds(List pollIds) => Future.value(); + @override + Future deleteDraftMessagesByIds(List messageIds) => + Future.value(); + @override Future disconnect({bool flush = false}) => throw UnimplementedError(); @@ -98,6 +104,21 @@ class TestPersistenceClient extends ChatPersistenceClient { @override Future> getReadsByCid(String cid) async => []; + @override + Future getDraftMessageByCid(String cid) async => Draft( + channelCid: cid, + createdAt: DateTime.now(), + message: DraftMessage(id: 'message-id', text: 'message-text'), + ); + + @override + Future getDraftMessageByParentId(String parentId) async => Draft( + channelCid: 'test:cid', + createdAt: DateTime.now(), + parentId: parentId, + message: DraftMessage(id: 'message-id', text: 'message-text'), + ); + @override Future> getReplies(String parentId, {PaginationParams? options}) => @@ -152,6 +173,9 @@ class TestPersistenceClient extends ChatPersistenceClient { @override Future updatePolls(List polls) => Future.value(); + + @override + Future updateDraftMessages(List draftMessages) => Future.value(); } void main() { @@ -194,6 +218,20 @@ void main() { persistenceClient.updatePolls([poll]); }); + test('deleteDraftMessagesByIds', () { + const messageIds = ['message-id']; + persistenceClient.deleteDraftMessagesByIds(messageIds); + }); + + test('updateDraftMessages', () async { + final draft = Draft( + channelCid: 'test:cid', + createdAt: DateTime.now(), + message: DraftMessage(id: 'message-id', text: 'message-text'), + ); + persistenceClient.updateDraftMessages([draft]); + }); + test('updateChannelThreads', () async { const cid = 'test:cid'; final user = User(id: 'test-user-id'); diff --git a/packages/stream_chat_persistence/CHANGELOG.md b/packages/stream_chat_persistence/CHANGELOG.md index 81de7651f8..4c7c32b3de 100644 --- a/packages/stream_chat_persistence/CHANGELOG.md +++ b/packages/stream_chat_persistence/CHANGELOG.md @@ -1,6 +1,7 @@ ## Upcoming - Added `pinnedAt` and `archivedAt` fields on `Member`. +- Added support for DraftMessages. ## 9.7.0 diff --git a/packages/stream_chat_persistence/lib/src/dao/dao.dart b/packages/stream_chat_persistence/lib/src/dao/dao.dart index ea76909b1f..d0aab7b212 100644 --- a/packages/stream_chat_persistence/lib/src/dao/dao.dart +++ b/packages/stream_chat_persistence/lib/src/dao/dao.dart @@ -1,6 +1,7 @@ export 'channel_dao.dart'; export 'channel_query_dao.dart'; export 'connection_event_dao.dart'; +export 'draft_message_dao.dart'; export 'member_dao.dart'; export 'message_dao.dart'; export 'pinned_message_dao.dart'; diff --git a/packages/stream_chat_persistence/lib/src/dao/draft_message_dao.dart b/packages/stream_chat_persistence/lib/src/dao/draft_message_dao.dart new file mode 100644 index 0000000000..90cc826de7 --- /dev/null +++ b/packages/stream_chat_persistence/lib/src/dao/draft_message_dao.dart @@ -0,0 +1,109 @@ +import 'package:drift/drift.dart'; +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/entity.dart'; +import 'package:stream_chat_persistence/src/mapper/mapper.dart'; + +part 'draft_message_dao.g.dart'; + +/// The Data Access Object for operations in [DraftMessages] table. +@DriftAccessor(tables: [DraftMessages, Messages]) +class DraftMessageDao extends DatabaseAccessor + with _$DraftMessageDaoMixin { + /// Creates a new draft message dao instance + DraftMessageDao(this._db) : super(_db); + + final DriftChatDatabase _db; + + Future _draftFromEntity(DraftMessageEntity entity) async { + // We do not want to fetch the draft message of the parent and quoted + // message because it will create a circular dependency and will + // result in infinite loop. + const fetchDraft = false; + + final parentMessage = await switch (entity.parentId) { + final id? => _db.messageDao.getMessageById(id, fetchDraft: fetchDraft), + _ => null, + }; + + final quotedMessage = await switch (entity.quotedMessageId) { + final id? => _db.messageDao.getMessageById(id, fetchDraft: fetchDraft), + _ => null, + }; + + final poll = await switch (entity.pollId) { + final id? => _db.pollDao.getPollById(id), + _ => null, + }; + + return entity.toDraft( + parentMessage: parentMessage, + quotedMessage: quotedMessage, + poll: poll, + ); + } + + /// Returns the draft message by matching [DraftMessages.id] with [id] + Future getDraftMessageById(String id) async { + final query = select(draftMessages)..where((tbl) => tbl.id.equals(id)); + + final result = await query.getSingleOrNull(); + if (result == null) return null; + + return _draftFromEntity(result); + } + + /// Returns the draft message by matching [DraftMessages.channelCid]. + /// + /// Note: This will skip the thread draft messages. + Future getDraftMessageByCid(String cid) async { + final query = select(draftMessages) + ..where((tbl) => tbl.channelCid.equals(cid) & tbl.parentId.isNull()); + + final result = await query.getSingleOrNull(); + if (result == null) return null; + + return _draftFromEntity(result); + } + + /// Returns the draft message by matching [DraftMessages.parentId]. + Future getDraftMessageByParentId(String parentId) async { + final query = select(draftMessages) + ..where((tbl) => tbl.parentId.equals(parentId)); + + final result = await query.getSingleOrNull(); + if (result == null) return null; + + return _draftFromEntity(result); + } + + /// Updates the draft message data of a particular channel with + /// the new [messageList] data. + Future updateDraftMessages(List draftMessageList) { + return transaction(() async { + for (final draftMessage in draftMessageList) { + final entity = draftMessage.toEntity(); + + // Find and delete existing drafts with the same channelCid + // and parentId (if any). + final deleteQuery = delete(draftMessages) + ..where((tbl) { + var filter = tbl.channelCid.equals(entity.channelCid); + if (entity.parentId case final parentId?) { + filter &= tbl.parentId.equals(parentId); + } + + return filter; + }); + + await deleteQuery.go(); + await into(draftMessages).insertOnConflictUpdate(entity); + } + }); + } + + /// Deletes all the draft messages whose [DraftMessages.id] is present in + /// [messageIds]. + Future deleteDraftMessagesByIds(List messageIds) => + (delete(draftMessages)..where((tbl) => tbl.id.isIn(messageIds))).go(); +} diff --git a/packages/stream_chat_persistence/lib/src/dao/draft_message_dao.g.dart b/packages/stream_chat_persistence/lib/src/dao/draft_message_dao.g.dart new file mode 100644 index 0000000000..0ea6ec0636 --- /dev/null +++ b/packages/stream_chat_persistence/lib/src/dao/draft_message_dao.g.dart @@ -0,0 +1,10 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'draft_message_dao.dart'; + +// ignore_for_file: type=lint +mixin _$DraftMessageDaoMixin on DatabaseAccessor { + $ChannelsTable get channels => attachedDatabase.channels; + $MessagesTable get messages => attachedDatabase.messages; + $DraftMessagesTable get draftMessages => attachedDatabase.draftMessages; +} 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 762da39ae6..13d58e4b4d 100644 --- a/packages/stream_chat_persistence/lib/src/dao/message_dao.dart +++ b/packages/stream_chat_persistence/lib/src/dao/message_dao.dart @@ -36,7 +36,10 @@ class MessageDao extends DatabaseAccessor Future deleteMessageByCids(List cids) async => (delete(messages)..where((tbl) => tbl.channelCid.isIn(cids))).go(); - Future _messageFromJoinRow(TypedResult rows) async { + Future _messageFromJoinRow( + TypedResult rows, { + bool fetchDraft = true, + }) async { final userEntity = rows.readTableOrNull(_users); final pinnedByEntity = rows.readTableOrNull(_pinnedByUsers); final msgEntity = rows.readTable(messages); @@ -45,16 +48,22 @@ class MessageDao extends DatabaseAccessor msgEntity.id, _db.userId, ); - Message? quotedMessage; - final quotedMessageId = msgEntity.quotedMessageId; - if (quotedMessageId != null) { - quotedMessage = await getMessageById(quotedMessageId); - } - Poll? poll; - final pollId = msgEntity.pollId; - if (pollId != null) { - poll = await _db.pollDao.getPollById(pollId); - } + + final quotedMessage = await switch (msgEntity.quotedMessageId) { + final id? => getMessageById(id), + _ => null, + }; + + final poll = await switch (msgEntity.pollId) { + final id? => _db.pollDao.getPollById(id), + _ => null, + }; + + final draft = await switch ((fetchDraft, msgEntity.draftMessageId)) { + (true, final id?) => _db.draftMessageDao.getDraftMessageById(id), + _ => null, + }; + return msgEntity.toMessage( user: userEntity?.toUser(), pinnedBy: pinnedByEntity?.toUser(), @@ -62,21 +71,30 @@ class MessageDao extends DatabaseAccessor ownReactions: ownReactions, quotedMessage: quotedMessage, poll: poll, + draft: draft, ); } - /// Returns a single message by matching the [Messages.id] with [id] - Future getMessageById(String id) async => - await (select(messages).join([ - leftOuterJoin(_users, messages.userId.equalsExp(_users.id)), - leftOuterJoin( - _pinnedByUsers, - messages.pinnedByUserId.equalsExp(_pinnedByUsers.id), - ), - ]) - ..where(messages.id.equals(id))) - .map(_messageFromJoinRow) - .getSingleOrNull(); + /// Returns a single message by matching the [Messages.id] with [id]. + /// + /// If [fetchDraft] is true, it will also fetch the draft message for the + /// message. + Future getMessageById( + String id, { + bool fetchDraft = true, + }) async => + await (select(messages).join( + [ + leftOuterJoin(_users, messages.userId.equalsExp(_users.id)), + leftOuterJoin( + _pinnedByUsers, + messages.pinnedByUserId.equalsExp(_pinnedByUsers.id), + ), + ], + )..where(messages.id.equals(id))) + .map((row) { + return _messageFromJoinRow(row, fetchDraft: fetchDraft); + }).getSingleOrNull(); /// Returns all the messages of a particular thread by matching /// [Messages.channelCid] with [cid] 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 8720560baf..57b58c0290 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 @@ -12,6 +12,7 @@ part 'drift_chat_database.g.dart'; @DriftDatabase( tables: [ Channels, + DraftMessages, Messages, PinnedMessages, Polls, @@ -28,6 +29,7 @@ part 'drift_chat_database.g.dart'; UserDao, ChannelDao, MessageDao, + DraftMessageDao, PinnedMessageDao, PinnedMessageReactionDao, MemberDao, @@ -53,7 +55,7 @@ class DriftChatDatabase extends _$DriftChatDatabase { // you should bump this number whenever you change or add a table definition. @override - int get schemaVersion => 19; + int get schemaVersion => 20; @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 2b59bcf8aa..19ce6ffe81 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 @@ -24,8 +24,6 @@ class $ChannelsTable extends Channels late final GeneratedColumn cid = GeneratedColumn( 'cid', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true); - static const VerificationMeta _ownCapabilitiesMeta = - const VerificationMeta('ownCapabilities'); @override late final GeneratedColumnWithTypeConverter?, String> ownCapabilities = GeneratedColumn( @@ -33,7 +31,6 @@ class $ChannelsTable extends Channels type: DriftSqlType.string, requiredDuringInsert: false) .withConverter?>( $ChannelsTable.$converterownCapabilitiesn); - static const VerificationMeta _configMeta = const VerificationMeta('config'); @override late final GeneratedColumnWithTypeConverter, String> config = GeneratedColumn('config', aliasedName, false, @@ -90,8 +87,6 @@ class $ChannelsTable extends Channels late final GeneratedColumn createdById = GeneratedColumn( 'created_by_id', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _extraDataMeta = - const VerificationMeta('extraData'); @override late final GeneratedColumnWithTypeConverter?, String> extraData = GeneratedColumn('extra_data', aliasedName, true, @@ -141,8 +136,6 @@ class $ChannelsTable extends Channels } else if (isInserting) { context.missing(_cidMeta); } - context.handle(_ownCapabilitiesMeta, const VerificationResult.success()); - context.handle(_configMeta, const VerificationResult.success()); if (data.containsKey('frozen')) { context.handle(_frozenMeta, frozen.isAcceptableOrUnknown(data['frozen']!, _frozenMeta)); @@ -177,7 +170,6 @@ class $ChannelsTable extends Channels createdById.isAcceptableOrUnknown( data['created_by_id']!, _createdByIdMeta)); } - context.handle(_extraDataMeta, const VerificationResult.success()); return context; } @@ -681,8 +673,6 @@ class $MessagesTable extends Messages late final GeneratedColumn messageText = GeneratedColumn( 'message_text', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _attachmentsMeta = - const VerificationMeta('attachments'); @override late final GeneratedColumnWithTypeConverter, String> attachments = GeneratedColumn('attachments', aliasedName, false, @@ -700,16 +690,12 @@ class $MessagesTable extends Messages type: DriftSqlType.string, requiredDuringInsert: false, defaultValue: const Constant('regular')); - static const VerificationMeta _mentionedUsersMeta = - const VerificationMeta('mentionedUsers'); @override late final GeneratedColumnWithTypeConverter, String> mentionedUsers = GeneratedColumn( 'mentioned_users', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true) .withConverter>($MessagesTable.$convertermentionedUsers); - static const VerificationMeta _reactionCountsMeta = - const VerificationMeta('reactionCounts'); @override late final GeneratedColumnWithTypeConverter?, String> reactionCounts = GeneratedColumn( @@ -717,8 +703,6 @@ class $MessagesTable extends Messages type: DriftSqlType.string, requiredDuringInsert: false) .withConverter?>( $MessagesTable.$converterreactionCountsn); - static const VerificationMeta _reactionScoresMeta = - const VerificationMeta('reactionScores'); @override late final GeneratedColumnWithTypeConverter?, String> reactionScores = GeneratedColumn( @@ -857,14 +841,11 @@ class $MessagesTable extends Messages requiredDuringInsert: true, defaultConstraints: GeneratedColumn.constraintIsAlways( 'REFERENCES channels (cid) ON DELETE CASCADE')); - static const VerificationMeta _i18nMeta = const VerificationMeta('i18n'); @override late final GeneratedColumnWithTypeConverter?, String> i18n = GeneratedColumn('i18n', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false) .withConverter?>($MessagesTable.$converteri18n); - static const VerificationMeta _restrictedVisibilityMeta = - const VerificationMeta('restrictedVisibility'); @override late final GeneratedColumnWithTypeConverter?, String> restrictedVisibility = GeneratedColumn( @@ -872,8 +853,12 @@ class $MessagesTable extends Messages type: DriftSqlType.string, requiredDuringInsert: false) .withConverter?>( $MessagesTable.$converterrestrictedVisibilityn); - static const VerificationMeta _extraDataMeta = - const VerificationMeta('extraData'); + static const VerificationMeta _draftMessageIdMeta = + const VerificationMeta('draftMessageId'); + @override + late final GeneratedColumn draftMessageId = GeneratedColumn( + 'draft_message_id', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); @override late final GeneratedColumnWithTypeConverter?, String> extraData = GeneratedColumn('extra_data', aliasedName, true, @@ -912,6 +897,7 @@ class $MessagesTable extends Messages channelCid, i18n, restrictedVisibility, + draftMessageId, extraData ]; @override @@ -935,7 +921,6 @@ class $MessagesTable extends Messages messageText.isAcceptableOrUnknown( data['message_text']!, _messageTextMeta)); } - context.handle(_attachmentsMeta, const VerificationResult.success()); if (data.containsKey('state')) { context.handle( _stateMeta, state.isAcceptableOrUnknown(data['state']!, _stateMeta)); @@ -946,9 +931,6 @@ class $MessagesTable extends Messages context.handle( _typeMeta, type.isAcceptableOrUnknown(data['type']!, _typeMeta)); } - context.handle(_mentionedUsersMeta, const VerificationResult.success()); - context.handle(_reactionCountsMeta, const VerificationResult.success()); - context.handle(_reactionScoresMeta, const VerificationResult.success()); if (data.containsKey('parent_id')) { context.handle(_parentIdMeta, parentId.isAcceptableOrUnknown(data['parent_id']!, _parentIdMeta)); @@ -1057,10 +1039,12 @@ class $MessagesTable extends Messages } else if (isInserting) { context.missing(_channelCidMeta); } - context.handle(_i18nMeta, const VerificationResult.success()); - context.handle( - _restrictedVisibilityMeta, const VerificationResult.success()); - context.handle(_extraDataMeta, const VerificationResult.success()); + if (data.containsKey('draft_message_id')) { + context.handle( + _draftMessageIdMeta, + draftMessageId.isAcceptableOrUnknown( + data['draft_message_id']!, _draftMessageIdMeta)); + } return context; } @@ -1136,6 +1120,8 @@ class $MessagesTable extends Messages restrictedVisibility: $MessagesTable.$converterrestrictedVisibilityn .fromSql(attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}restricted_visibility'])), + draftMessageId: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}draft_message_id']), extraData: $MessagesTable.$converterextraDatan.fromSql(attachedDatabase .typeMapping .read(DriftSqlType.string, data['${effectivePrefix}extra_data'])), @@ -1263,6 +1249,9 @@ class MessageEntity extends DataClass implements Insertable { /// The list of user ids that should be able to see the message. final List? restrictedVisibility; + /// Id of the draft message if this message is a parent message. + final String? draftMessageId; + /// Message custom extraData final Map? extraData; const MessageEntity( @@ -1296,6 +1285,7 @@ class MessageEntity extends DataClass implements Insertable { required this.channelCid, this.i18n, this.restrictedVisibility, + this.draftMessageId, this.extraData}); @override Map toColumns(bool nullToAbsent) { @@ -1384,6 +1374,9 @@ class MessageEntity extends DataClass implements Insertable { .$converterrestrictedVisibilityn .toSql(restrictedVisibility)); } + if (!nullToAbsent || draftMessageId != null) { + map['draft_message_id'] = Variable(draftMessageId); + } if (!nullToAbsent || extraData != null) { map['extra_data'] = Variable( $MessagesTable.$converterextraDatan.toSql(extraData)); @@ -1429,6 +1422,7 @@ class MessageEntity extends DataClass implements Insertable { i18n: serializer.fromJson?>(json['i18n']), restrictedVisibility: serializer.fromJson?>(json['restrictedVisibility']), + draftMessageId: serializer.fromJson(json['draftMessageId']), extraData: serializer.fromJson?>(json['extraData']), ); } @@ -1468,6 +1462,7 @@ class MessageEntity extends DataClass implements Insertable { 'i18n': serializer.toJson?>(i18n), 'restrictedVisibility': serializer.toJson?>(restrictedVisibility), + 'draftMessageId': serializer.toJson(draftMessageId), 'extraData': serializer.toJson?>(extraData), }; } @@ -1503,6 +1498,7 @@ class MessageEntity extends DataClass implements Insertable { String? channelCid, Value?> i18n = const Value.absent(), Value?> restrictedVisibility = const Value.absent(), + Value draftMessageId = const Value.absent(), Value?> extraData = const Value.absent()}) => MessageEntity( id: id ?? this.id, @@ -1554,6 +1550,8 @@ class MessageEntity extends DataClass implements Insertable { restrictedVisibility: restrictedVisibility.present ? restrictedVisibility.value : this.restrictedVisibility, + draftMessageId: + draftMessageId.present ? draftMessageId.value : this.draftMessageId, extraData: extraData.present ? extraData.value : this.extraData, ); MessageEntity copyWithCompanion(MessagesCompanion data) { @@ -1621,6 +1619,9 @@ class MessageEntity extends DataClass implements Insertable { restrictedVisibility: data.restrictedVisibility.present ? data.restrictedVisibility.value : this.restrictedVisibility, + draftMessageId: data.draftMessageId.present + ? data.draftMessageId.value + : this.draftMessageId, extraData: data.extraData.present ? data.extraData.value : this.extraData, ); } @@ -1658,6 +1659,7 @@ class MessageEntity extends DataClass implements Insertable { ..write('channelCid: $channelCid, ') ..write('i18n: $i18n, ') ..write('restrictedVisibility: $restrictedVisibility, ') + ..write('draftMessageId: $draftMessageId, ') ..write('extraData: $extraData') ..write(')')) .toString(); @@ -1695,6 +1697,7 @@ class MessageEntity extends DataClass implements Insertable { channelCid, i18n, restrictedVisibility, + draftMessageId, extraData ]); @override @@ -1731,6 +1734,7 @@ class MessageEntity extends DataClass implements Insertable { other.channelCid == this.channelCid && other.i18n == this.i18n && other.restrictedVisibility == this.restrictedVisibility && + other.draftMessageId == this.draftMessageId && other.extraData == this.extraData); } @@ -1765,6 +1769,7 @@ class MessagesCompanion extends UpdateCompanion { final Value channelCid; final Value?> i18n; final Value?> restrictedVisibility; + final Value draftMessageId; final Value?> extraData; final Value rowid; const MessagesCompanion({ @@ -1798,6 +1803,7 @@ class MessagesCompanion extends UpdateCompanion { this.channelCid = const Value.absent(), this.i18n = const Value.absent(), this.restrictedVisibility = const Value.absent(), + this.draftMessageId = const Value.absent(), this.extraData = const Value.absent(), this.rowid = const Value.absent(), }); @@ -1832,6 +1838,7 @@ class MessagesCompanion extends UpdateCompanion { required String channelCid, this.i18n = const Value.absent(), this.restrictedVisibility = const Value.absent(), + this.draftMessageId = const Value.absent(), this.extraData = const Value.absent(), this.rowid = const Value.absent(), }) : id = Value(id), @@ -1870,6 +1877,7 @@ class MessagesCompanion extends UpdateCompanion { Expression? channelCid, Expression? i18n, Expression? restrictedVisibility, + Expression? draftMessageId, Expression? extraData, Expression? rowid, }) { @@ -1906,6 +1914,7 @@ class MessagesCompanion extends UpdateCompanion { if (i18n != null) 'i18n': i18n, if (restrictedVisibility != null) 'restricted_visibility': restrictedVisibility, + if (draftMessageId != null) 'draft_message_id': draftMessageId, if (extraData != null) 'extra_data': extraData, if (rowid != null) 'rowid': rowid, }); @@ -1942,6 +1951,7 @@ class MessagesCompanion extends UpdateCompanion { Value? channelCid, Value?>? i18n, Value?>? restrictedVisibility, + Value? draftMessageId, Value?>? extraData, Value? rowid}) { return MessagesCompanion( @@ -1975,6 +1985,7 @@ class MessagesCompanion extends UpdateCompanion { channelCid: channelCid ?? this.channelCid, i18n: i18n ?? this.i18n, restrictedVisibility: restrictedVisibility ?? this.restrictedVisibility, + draftMessageId: draftMessageId ?? this.draftMessageId, extraData: extraData ?? this.extraData, rowid: rowid ?? this.rowid, ); @@ -2081,6 +2092,9 @@ class MessagesCompanion extends UpdateCompanion { .$converterrestrictedVisibilityn .toSql(restrictedVisibility.value)); } + if (draftMessageId.present) { + map['draft_message_id'] = Variable(draftMessageId.value); + } if (extraData.present) { map['extra_data'] = Variable( $MessagesTable.$converterextraDatan.toSql(extraData.value)); @@ -2124,6 +2138,7 @@ class MessagesCompanion extends UpdateCompanion { ..write('channelCid: $channelCid, ') ..write('i18n: $i18n, ') ..write('restrictedVisibility: $restrictedVisibility, ') + ..write('draftMessageId: $draftMessageId, ') ..write('extraData: $extraData, ') ..write('rowid: $rowid') ..write(')')) @@ -2131,12 +2146,12 @@ class MessagesCompanion extends UpdateCompanion { } } -class $PinnedMessagesTable extends PinnedMessages - with TableInfo<$PinnedMessagesTable, PinnedMessageEntity> { +class $DraftMessagesTable extends DraftMessages + with TableInfo<$DraftMessagesTable, DraftMessageEntity> { @override final GeneratedDatabase attachedDatabase; final String? _alias; - $PinnedMessagesTable(this.attachedDatabase, [this._alias]); + $DraftMessagesTable(this.attachedDatabase, [this._alias]); static const VerificationMeta _idMeta = const VerificationMeta('id'); @override late final GeneratedColumn id = GeneratedColumn( @@ -2148,19 +2163,12 @@ class $PinnedMessagesTable extends PinnedMessages late final GeneratedColumn messageText = GeneratedColumn( 'message_text', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _attachmentsMeta = - const VerificationMeta('attachments'); @override late final GeneratedColumnWithTypeConverter, String> attachments = GeneratedColumn('attachments', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true) .withConverter>( - $PinnedMessagesTable.$converterattachments); - static const VerificationMeta _stateMeta = const VerificationMeta('state'); - @override - late final GeneratedColumn state = GeneratedColumn( - 'state', aliasedName, false, - type: DriftSqlType.string, requiredDuringInsert: true); + $DraftMessagesTable.$converterattachments); static const VerificationMeta _typeMeta = const VerificationMeta('type'); @override late final GeneratedColumn type = GeneratedColumn( @@ -2168,39 +2176,22 @@ class $PinnedMessagesTable extends PinnedMessages type: DriftSqlType.string, requiredDuringInsert: false, defaultValue: const Constant('regular')); - static const VerificationMeta _mentionedUsersMeta = - const VerificationMeta('mentionedUsers'); @override late final GeneratedColumnWithTypeConverter, String> mentionedUsers = GeneratedColumn( 'mentioned_users', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true) .withConverter>( - $PinnedMessagesTable.$convertermentionedUsers); - static const VerificationMeta _reactionCountsMeta = - const VerificationMeta('reactionCounts'); - @override - late final GeneratedColumnWithTypeConverter?, String> - reactionCounts = GeneratedColumn( - 'reaction_counts', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false) - .withConverter?>( - $PinnedMessagesTable.$converterreactionCountsn); - static const VerificationMeta _reactionScoresMeta = - const VerificationMeta('reactionScores'); - @override - late final GeneratedColumnWithTypeConverter?, String> - reactionScores = GeneratedColumn( - 'reaction_scores', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false) - .withConverter?>( - $PinnedMessagesTable.$converterreactionScoresn); + $DraftMessagesTable.$convertermentionedUsers); static const VerificationMeta _parentIdMeta = const VerificationMeta('parentId'); @override late final GeneratedColumn parentId = GeneratedColumn( 'parent_id', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES messages (id) ON DELETE CASCADE')); static const VerificationMeta _quotedMessageIdMeta = const VerificationMeta('quotedMessageId'); @override @@ -2212,12 +2203,6 @@ class $PinnedMessagesTable extends PinnedMessages late final GeneratedColumn pollId = GeneratedColumn( 'poll_id', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _replyCountMeta = - const VerificationMeta('replyCount'); - @override - late final GeneratedColumn replyCount = GeneratedColumn( - 'reply_count', aliasedName, true, - type: DriftSqlType.int, requiredDuringInsert: false); static const VerificationMeta _showInChannelMeta = const VerificationMeta('showInChannel'); @override @@ -2227,168 +2212,68 @@ class $PinnedMessagesTable extends PinnedMessages requiredDuringInsert: false, defaultConstraints: GeneratedColumn.constraintIsAlways( 'CHECK ("show_in_channel" IN (0, 1))')); - static const VerificationMeta _shadowedMeta = - const VerificationMeta('shadowed'); - @override - late final GeneratedColumn shadowed = GeneratedColumn( - 'shadowed', aliasedName, false, - type: DriftSqlType.bool, - requiredDuringInsert: false, - defaultConstraints: - GeneratedColumn.constraintIsAlways('CHECK ("shadowed" IN (0, 1))'), - defaultValue: const Constant(false)); static const VerificationMeta _commandMeta = const VerificationMeta('command'); @override late final GeneratedColumn command = GeneratedColumn( 'command', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _localCreatedAtMeta = - const VerificationMeta('localCreatedAt'); - @override - 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 remoteCreatedAt = - GeneratedColumn('remote_created_at', aliasedName, true, - type: DriftSqlType.dateTime, requiredDuringInsert: false); - static const VerificationMeta _localUpdatedAtMeta = - const VerificationMeta('localUpdatedAt'); - @override - 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 _messageTextUpdatedAtMeta = - const VerificationMeta('messageTextUpdatedAt'); - @override - late final GeneratedColumn messageTextUpdatedAt = - GeneratedColumn('message_text_updated_at', aliasedName, true, - type: DriftSqlType.dateTime, requiredDuringInsert: false); - static const VerificationMeta _userIdMeta = const VerificationMeta('userId'); - @override - late final GeneratedColumn userId = GeneratedColumn( - 'user_id', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _pinnedMeta = const VerificationMeta('pinned'); + static const VerificationMeta _silentMeta = const VerificationMeta('silent'); @override - late final GeneratedColumn pinned = GeneratedColumn( - 'pinned', aliasedName, false, + late final GeneratedColumn silent = GeneratedColumn( + 'silent', aliasedName, false, type: DriftSqlType.bool, requiredDuringInsert: false, defaultConstraints: - GeneratedColumn.constraintIsAlways('CHECK ("pinned" IN (0, 1))'), + GeneratedColumn.constraintIsAlways('CHECK ("silent" IN (0, 1))'), defaultValue: const Constant(false)); - static const VerificationMeta _pinnedAtMeta = - const VerificationMeta('pinnedAt'); - @override - late final GeneratedColumn pinnedAt = GeneratedColumn( - 'pinned_at', aliasedName, true, - type: DriftSqlType.dateTime, requiredDuringInsert: false); - static const VerificationMeta _pinExpiresMeta = - const VerificationMeta('pinExpires'); - @override - late final GeneratedColumn pinExpires = GeneratedColumn( - 'pin_expires', aliasedName, true, - type: DriftSqlType.dateTime, requiredDuringInsert: false); - static const VerificationMeta _pinnedByUserIdMeta = - const VerificationMeta('pinnedByUserId'); + static const VerificationMeta _createdAtMeta = + const VerificationMeta('createdAt'); @override - late final GeneratedColumn pinnedByUserId = GeneratedColumn( - 'pinned_by_user_id', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: currentDateAndTime); static const VerificationMeta _channelCidMeta = const VerificationMeta('channelCid'); @override late final GeneratedColumn channelCid = GeneratedColumn( 'channel_cid', aliasedName, false, - type: DriftSqlType.string, requiredDuringInsert: true); - static const VerificationMeta _i18nMeta = const VerificationMeta('i18n'); - @override - late final GeneratedColumnWithTypeConverter?, String> - i18n = GeneratedColumn('i18n', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false) - .withConverter?>( - $PinnedMessagesTable.$converteri18n); - static const VerificationMeta _restrictedVisibilityMeta = - const VerificationMeta('restrictedVisibility'); - @override - late final GeneratedColumnWithTypeConverter?, String> - restrictedVisibility = GeneratedColumn( - 'restricted_visibility', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false) - .withConverter?>( - $PinnedMessagesTable.$converterrestrictedVisibilityn); - static const VerificationMeta _extraDataMeta = - const VerificationMeta('extraData'); + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES channels (cid) ON DELETE CASCADE')); @override late final GeneratedColumnWithTypeConverter?, String> extraData = GeneratedColumn('extra_data', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false) .withConverter?>( - $PinnedMessagesTable.$converterextraDatan); + $DraftMessagesTable.$converterextraDatan); @override List get $columns => [ id, messageText, attachments, - state, type, mentionedUsers, - reactionCounts, - reactionScores, parentId, quotedMessageId, pollId, - replyCount, showInChannel, - shadowed, command, - localCreatedAt, - remoteCreatedAt, - localUpdatedAt, - remoteUpdatedAt, - localDeletedAt, - remoteDeletedAt, - messageTextUpdatedAt, - userId, - pinned, - pinnedAt, - pinExpires, - pinnedByUserId, + silent, + createdAt, channelCid, - i18n, - restrictedVisibility, extraData ]; @override String get aliasedName => _alias ?? actualTableName; @override String get actualTableName => $name; - static const String $name = 'pinned_messages'; + static const String $name = 'draft_messages'; @override - VerificationContext validateIntegrity( - Insertable instance, + VerificationContext validateIntegrity(Insertable instance, {bool isInserting = false}) { final context = VerificationContext(); final data = instance.toColumns(true); @@ -2403,20 +2288,10 @@ class $PinnedMessagesTable extends PinnedMessages messageText.isAcceptableOrUnknown( data['message_text']!, _messageTextMeta)); } - context.handle(_attachmentsMeta, const VerificationResult.success()); - if (data.containsKey('state')) { - context.handle( - _stateMeta, state.isAcceptableOrUnknown(data['state']!, _stateMeta)); - } else if (isInserting) { - context.missing(_stateMeta); - } if (data.containsKey('type')) { context.handle( _typeMeta, type.isAcceptableOrUnknown(data['type']!, _typeMeta)); } - context.handle(_mentionedUsersMeta, const VerificationResult.success()); - context.handle(_reactionCountsMeta, const VerificationResult.success()); - context.handle(_reactionScoresMeta, const VerificationResult.success()); if (data.containsKey('parent_id')) { context.handle(_parentIdMeta, parentId.isAcceptableOrUnknown(data['parent_id']!, _parentIdMeta)); @@ -2431,91 +2306,23 @@ class $PinnedMessagesTable extends PinnedMessages context.handle(_pollIdMeta, pollId.isAcceptableOrUnknown(data['poll_id']!, _pollIdMeta)); } - if (data.containsKey('reply_count')) { - context.handle( - _replyCountMeta, - replyCount.isAcceptableOrUnknown( - data['reply_count']!, _replyCountMeta)); - } if (data.containsKey('show_in_channel')) { context.handle( _showInChannelMeta, showInChannel.isAcceptableOrUnknown( data['show_in_channel']!, _showInChannelMeta)); } - if (data.containsKey('shadowed')) { - context.handle(_shadowedMeta, - shadowed.isAcceptableOrUnknown(data['shadowed']!, _shadowedMeta)); - } if (data.containsKey('command')) { context.handle(_commandMeta, command.isAcceptableOrUnknown(data['command']!, _commandMeta)); } - if (data.containsKey('local_created_at')) { - context.handle( - _localCreatedAtMeta, - localCreatedAt.isAcceptableOrUnknown( - data['local_created_at']!, _localCreatedAtMeta)); - } - if (data.containsKey('remote_created_at')) { - context.handle( - _remoteCreatedAtMeta, - remoteCreatedAt.isAcceptableOrUnknown( - data['remote_created_at']!, _remoteCreatedAtMeta)); - } - 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('message_text_updated_at')) { - context.handle( - _messageTextUpdatedAtMeta, - messageTextUpdatedAt.isAcceptableOrUnknown( - data['message_text_updated_at']!, _messageTextUpdatedAtMeta)); - } - if (data.containsKey('user_id')) { - context.handle(_userIdMeta, - userId.isAcceptableOrUnknown(data['user_id']!, _userIdMeta)); - } - if (data.containsKey('pinned')) { - context.handle(_pinnedMeta, - pinned.isAcceptableOrUnknown(data['pinned']!, _pinnedMeta)); - } - if (data.containsKey('pinned_at')) { - context.handle(_pinnedAtMeta, - pinnedAt.isAcceptableOrUnknown(data['pinned_at']!, _pinnedAtMeta)); - } - if (data.containsKey('pin_expires')) { - context.handle( - _pinExpiresMeta, - pinExpires.isAcceptableOrUnknown( - data['pin_expires']!, _pinExpiresMeta)); + if (data.containsKey('silent')) { + context.handle(_silentMeta, + silent.isAcceptableOrUnknown(data['silent']!, _silentMeta)); } - if (data.containsKey('pinned_by_user_id')) { - context.handle( - _pinnedByUserIdMeta, - pinnedByUserId.isAcceptableOrUnknown( - data['pinned_by_user_id']!, _pinnedByUserIdMeta)); + if (data.containsKey('created_at')) { + context.handle(_createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); } if (data.containsKey('channel_cid')) { context.handle( @@ -2525,123 +2332,66 @@ class $PinnedMessagesTable extends PinnedMessages } else if (isInserting) { context.missing(_channelCidMeta); } - context.handle(_i18nMeta, const VerificationResult.success()); - context.handle( - _restrictedVisibilityMeta, const VerificationResult.success()); - context.handle(_extraDataMeta, const VerificationResult.success()); return context; } @override Set get $primaryKey => {id}; @override - PinnedMessageEntity map(Map data, {String? tablePrefix}) { + DraftMessageEntity map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; - return PinnedMessageEntity( + return DraftMessageEntity( id: attachedDatabase.typeMapping .read(DriftSqlType.string, data['${effectivePrefix}id'])!, messageText: attachedDatabase.typeMapping .read(DriftSqlType.string, data['${effectivePrefix}message_text']), - attachments: $PinnedMessagesTable.$converterattachments.fromSql( + attachments: $DraftMessagesTable.$converterattachments.fromSql( attachedDatabase.typeMapping.read( DriftSqlType.string, data['${effectivePrefix}attachments'])!), - state: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}state'])!, type: attachedDatabase.typeMapping .read(DriftSqlType.string, data['${effectivePrefix}type'])!, - mentionedUsers: $PinnedMessagesTable.$convertermentionedUsers.fromSql( + mentionedUsers: $DraftMessagesTable.$convertermentionedUsers.fromSql( attachedDatabase.typeMapping.read( DriftSqlType.string, data['${effectivePrefix}mentioned_users'])!), - reactionCounts: $PinnedMessagesTable.$converterreactionCountsn.fromSql( - attachedDatabase.typeMapping.read( - DriftSqlType.string, data['${effectivePrefix}reaction_counts'])), - reactionScores: $PinnedMessagesTable.$converterreactionScoresn.fromSql( - attachedDatabase.typeMapping.read( - DriftSqlType.string, data['${effectivePrefix}reaction_scores'])), parentId: attachedDatabase.typeMapping .read(DriftSqlType.string, data['${effectivePrefix}parent_id']), quotedMessageId: attachedDatabase.typeMapping.read( DriftSqlType.string, data['${effectivePrefix}quoted_message_id']), pollId: attachedDatabase.typeMapping .read(DriftSqlType.string, data['${effectivePrefix}poll_id']), - replyCount: attachedDatabase.typeMapping - .read(DriftSqlType.int, data['${effectivePrefix}reply_count']), showInChannel: attachedDatabase.typeMapping .read(DriftSqlType.bool, data['${effectivePrefix}show_in_channel']), - shadowed: attachedDatabase.typeMapping - .read(DriftSqlType.bool, data['${effectivePrefix}shadowed'])!, command: attachedDatabase.typeMapping .read(DriftSqlType.string, data['${effectivePrefix}command']), - 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']), - messageTextUpdatedAt: attachedDatabase.typeMapping.read( - DriftSqlType.dateTime, - data['${effectivePrefix}message_text_updated_at']), - userId: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}user_id']), - pinned: attachedDatabase.typeMapping - .read(DriftSqlType.bool, data['${effectivePrefix}pinned'])!, - pinnedAt: attachedDatabase.typeMapping - .read(DriftSqlType.dateTime, data['${effectivePrefix}pinned_at']), - pinExpires: attachedDatabase.typeMapping - .read(DriftSqlType.dateTime, data['${effectivePrefix}pin_expires']), - pinnedByUserId: attachedDatabase.typeMapping.read( - DriftSqlType.string, data['${effectivePrefix}pinned_by_user_id']), + silent: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}silent'])!, + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, channelCid: attachedDatabase.typeMapping .read(DriftSqlType.string, data['${effectivePrefix}channel_cid'])!, - i18n: $PinnedMessagesTable.$converteri18n.fromSql(attachedDatabase - .typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}i18n'])), - restrictedVisibility: $PinnedMessagesTable.$converterrestrictedVisibilityn - .fromSql(attachedDatabase.typeMapping.read(DriftSqlType.string, - data['${effectivePrefix}restricted_visibility'])), - extraData: $PinnedMessagesTable.$converterextraDatan.fromSql( + extraData: $DraftMessagesTable.$converterextraDatan.fromSql( attachedDatabase.typeMapping .read(DriftSqlType.string, data['${effectivePrefix}extra_data'])), ); } @override - $PinnedMessagesTable createAlias(String alias) { - return $PinnedMessagesTable(attachedDatabase, alias); + $DraftMessagesTable createAlias(String alias) { + return $DraftMessagesTable(attachedDatabase, alias); } static TypeConverter, String> $converterattachments = ListConverter(); static TypeConverter, String> $convertermentionedUsers = ListConverter(); - static TypeConverter, String> $converterreactionCounts = - MapConverter(); - static TypeConverter?, String?> $converterreactionCountsn = - NullAwareTypeConverter.wrap($converterreactionCounts); - static TypeConverter, String> $converterreactionScores = - MapConverter(); - static TypeConverter?, String?> $converterreactionScoresn = - NullAwareTypeConverter.wrap($converterreactionScores); - static TypeConverter?, String?> $converteri18n = - NullableMapConverter(); - static TypeConverter, String> $converterrestrictedVisibility = - ListConverter(); - static TypeConverter?, String?> $converterrestrictedVisibilityn = - NullAwareTypeConverter.wrap($converterrestrictedVisibility); static TypeConverter, String> $converterextraData = MapConverter(); static TypeConverter?, String?> $converterextraDatan = NullAwareTypeConverter.wrap($converterextraData); } -class PinnedMessageEntity extends DataClass - implements Insertable { +class DraftMessageEntity extends DataClass + implements Insertable { /// The message id final String id; @@ -2652,21 +2402,12 @@ class PinnedMessageEntity extends DataClass /// or generated from a command or as a result of URL scraping. final List attachments; - /// The current state of the message. - final String state; - /// The message type final String type; /// The list of user mentioned in the message final List mentionedUsers; - /// A map describing the count of number of every reaction - final Map? reactionCounts; - - /// A map describing the count of score of every reaction - final Map? reactionScores; - /// The ID of the parent message, if the message is a thread reply. final String? parentId; @@ -2676,96 +2417,37 @@ class PinnedMessageEntity extends DataClass /// The ID of the poll, if the message is a poll. final String? pollId; - /// Number of replies for this message. - final int? replyCount; - /// Check if this message needs to show in the channel. final bool? showInChannel; - /// If true the message is shadowed - final bool shadowed; - /// A used command name. final String? command; - /// The DateTime on which the message was created on the client. - final DateTime? localCreatedAt; - - /// The DateTime on which the message was created on the server. - final DateTime? remoteCreatedAt; - - /// 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; - - /// The DateTime at which the message text was edited - final DateTime? messageTextUpdatedAt; - - /// Id of the User who sent the message - final String? userId; - - /// Whether the message is pinned or not - final bool pinned; - - /// The DateTime at which the message was pinned - final DateTime? pinnedAt; - - /// The DateTime on which the message pin expires - final DateTime? pinExpires; + /// If true the message is silent + final bool silent; - /// Id of the User who pinned the message - final String? pinnedByUserId; + /// The DateTime on which the message was created. + final DateTime createdAt; /// The channel cid of which this message is part of final String channelCid; - /// A Map of [messageText] translations. - final Map? i18n; - - /// The list of user ids that should be able to see the message. - final List? restrictedVisibility; - /// Message custom extraData final Map? extraData; - const PinnedMessageEntity( + const DraftMessageEntity( {required this.id, this.messageText, required this.attachments, - required this.state, required this.type, required this.mentionedUsers, - this.reactionCounts, - this.reactionScores, this.parentId, this.quotedMessageId, this.pollId, - this.replyCount, this.showInChannel, - required this.shadowed, this.command, - this.localCreatedAt, - this.remoteCreatedAt, - this.localUpdatedAt, - this.remoteUpdatedAt, - this.localDeletedAt, - this.remoteDeletedAt, - this.messageTextUpdatedAt, - this.userId, - required this.pinned, - this.pinnedAt, - this.pinExpires, - this.pinnedByUserId, + required this.silent, + required this.createdAt, required this.channelCid, - this.i18n, - this.restrictedVisibility, this.extraData}); @override Map toColumns(bool nullToAbsent) { @@ -2776,21 +2458,12 @@ class PinnedMessageEntity extends DataClass } { map['attachments'] = Variable( - $PinnedMessagesTable.$converterattachments.toSql(attachments)); + $DraftMessagesTable.$converterattachments.toSql(attachments)); } - map['state'] = Variable(state); map['type'] = Variable(type); { map['mentioned_users'] = Variable( - $PinnedMessagesTable.$convertermentionedUsers.toSql(mentionedUsers)); - } - if (!nullToAbsent || reactionCounts != null) { - map['reaction_counts'] = Variable( - $PinnedMessagesTable.$converterreactionCountsn.toSql(reactionCounts)); - } - if (!nullToAbsent || reactionScores != null) { - map['reaction_scores'] = Variable( - $PinnedMessagesTable.$converterreactionScoresn.toSql(reactionScores)); + $DraftMessagesTable.$convertermentionedUsers.toSql(mentionedUsers)); } if (!nullToAbsent || parentId != null) { map['parent_id'] = Variable(parentId); @@ -2801,105 +2474,39 @@ class PinnedMessageEntity extends DataClass if (!nullToAbsent || pollId != null) { map['poll_id'] = Variable(pollId); } - if (!nullToAbsent || replyCount != null) { - map['reply_count'] = Variable(replyCount); - } if (!nullToAbsent || showInChannel != null) { map['show_in_channel'] = Variable(showInChannel); } - map['shadowed'] = Variable(shadowed); if (!nullToAbsent || command != null) { map['command'] = Variable(command); } - 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 || messageTextUpdatedAt != null) { - map['message_text_updated_at'] = Variable(messageTextUpdatedAt); - } - if (!nullToAbsent || userId != null) { - map['user_id'] = Variable(userId); - } - map['pinned'] = Variable(pinned); - if (!nullToAbsent || pinnedAt != null) { - map['pinned_at'] = Variable(pinnedAt); - } - if (!nullToAbsent || pinExpires != null) { - map['pin_expires'] = Variable(pinExpires); - } - if (!nullToAbsent || pinnedByUserId != null) { - map['pinned_by_user_id'] = Variable(pinnedByUserId); - } + map['silent'] = Variable(silent); + map['created_at'] = Variable(createdAt); map['channel_cid'] = Variable(channelCid); - if (!nullToAbsent || i18n != null) { - map['i18n'] = - Variable($PinnedMessagesTable.$converteri18n.toSql(i18n)); - } - if (!nullToAbsent || restrictedVisibility != null) { - map['restricted_visibility'] = Variable($PinnedMessagesTable - .$converterrestrictedVisibilityn - .toSql(restrictedVisibility)); - } if (!nullToAbsent || extraData != null) { map['extra_data'] = Variable( - $PinnedMessagesTable.$converterextraDatan.toSql(extraData)); + $DraftMessagesTable.$converterextraDatan.toSql(extraData)); } return map; } - factory PinnedMessageEntity.fromJson(Map json, + factory DraftMessageEntity.fromJson(Map json, {ValueSerializer? serializer}) { serializer ??= driftRuntimeOptions.defaultSerializer; - return PinnedMessageEntity( + return DraftMessageEntity( id: serializer.fromJson(json['id']), messageText: serializer.fromJson(json['messageText']), attachments: serializer.fromJson>(json['attachments']), - state: serializer.fromJson(json['state']), type: serializer.fromJson(json['type']), mentionedUsers: serializer.fromJson>(json['mentionedUsers']), - reactionCounts: - serializer.fromJson?>(json['reactionCounts']), - reactionScores: - serializer.fromJson?>(json['reactionScores']), parentId: serializer.fromJson(json['parentId']), quotedMessageId: serializer.fromJson(json['quotedMessageId']), pollId: serializer.fromJson(json['pollId']), - replyCount: serializer.fromJson(json['replyCount']), showInChannel: serializer.fromJson(json['showInChannel']), - shadowed: serializer.fromJson(json['shadowed']), command: serializer.fromJson(json['command']), - 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']), - messageTextUpdatedAt: - serializer.fromJson(json['messageTextUpdatedAt']), - userId: serializer.fromJson(json['userId']), - pinned: serializer.fromJson(json['pinned']), - pinnedAt: serializer.fromJson(json['pinnedAt']), - pinExpires: serializer.fromJson(json['pinExpires']), - pinnedByUserId: serializer.fromJson(json['pinnedByUserId']), + silent: serializer.fromJson(json['silent']), + createdAt: serializer.fromJson(json['createdAt']), channelCid: serializer.fromJson(json['channelCid']), - i18n: serializer.fromJson?>(json['i18n']), - restrictedVisibility: - serializer.fromJson?>(json['restrictedVisibility']), extraData: serializer.fromJson?>(json['extraData']), ); } @@ -2910,437 +2517,206 @@ class PinnedMessageEntity extends DataClass 'id': serializer.toJson(id), 'messageText': serializer.toJson(messageText), 'attachments': serializer.toJson>(attachments), - 'state': serializer.toJson(state), 'type': serializer.toJson(type), 'mentionedUsers': serializer.toJson>(mentionedUsers), - 'reactionCounts': serializer.toJson?>(reactionCounts), - 'reactionScores': serializer.toJson?>(reactionScores), 'parentId': serializer.toJson(parentId), 'quotedMessageId': serializer.toJson(quotedMessageId), 'pollId': serializer.toJson(pollId), - 'replyCount': serializer.toJson(replyCount), 'showInChannel': serializer.toJson(showInChannel), - 'shadowed': serializer.toJson(shadowed), 'command': serializer.toJson(command), - 'localCreatedAt': serializer.toJson(localCreatedAt), - 'remoteCreatedAt': serializer.toJson(remoteCreatedAt), - 'localUpdatedAt': serializer.toJson(localUpdatedAt), - 'remoteUpdatedAt': serializer.toJson(remoteUpdatedAt), - 'localDeletedAt': serializer.toJson(localDeletedAt), - 'remoteDeletedAt': serializer.toJson(remoteDeletedAt), - 'messageTextUpdatedAt': - serializer.toJson(messageTextUpdatedAt), - 'userId': serializer.toJson(userId), - 'pinned': serializer.toJson(pinned), - 'pinnedAt': serializer.toJson(pinnedAt), - 'pinExpires': serializer.toJson(pinExpires), - 'pinnedByUserId': serializer.toJson(pinnedByUserId), + 'silent': serializer.toJson(silent), + 'createdAt': serializer.toJson(createdAt), 'channelCid': serializer.toJson(channelCid), - 'i18n': serializer.toJson?>(i18n), - 'restrictedVisibility': - serializer.toJson?>(restrictedVisibility), 'extraData': serializer.toJson?>(extraData), }; } - PinnedMessageEntity copyWith( + DraftMessageEntity copyWith( {String? id, Value messageText = const Value.absent(), List? attachments, - String? state, String? type, List? mentionedUsers, - Value?> reactionCounts = const Value.absent(), - Value?> reactionScores = const Value.absent(), Value parentId = const Value.absent(), Value quotedMessageId = const Value.absent(), Value pollId = const Value.absent(), - Value replyCount = const Value.absent(), Value showInChannel = const Value.absent(), - bool? shadowed, Value command = 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 messageTextUpdatedAt = const Value.absent(), - Value userId = const Value.absent(), - bool? pinned, - Value pinnedAt = const Value.absent(), - Value pinExpires = const Value.absent(), - Value pinnedByUserId = const Value.absent(), + bool? silent, + DateTime? createdAt, String? channelCid, - Value?> i18n = const Value.absent(), - Value?> restrictedVisibility = const Value.absent(), Value?> extraData = const Value.absent()}) => - PinnedMessageEntity( + DraftMessageEntity( id: id ?? this.id, messageText: messageText.present ? messageText.value : this.messageText, attachments: attachments ?? this.attachments, - state: state ?? this.state, type: type ?? this.type, mentionedUsers: mentionedUsers ?? this.mentionedUsers, - reactionCounts: - reactionCounts.present ? reactionCounts.value : this.reactionCounts, - reactionScores: - reactionScores.present ? reactionScores.value : this.reactionScores, parentId: parentId.present ? parentId.value : this.parentId, quotedMessageId: quotedMessageId.present ? quotedMessageId.value : this.quotedMessageId, pollId: pollId.present ? pollId.value : this.pollId, - replyCount: replyCount.present ? replyCount.value : this.replyCount, showInChannel: showInChannel.present ? showInChannel.value : this.showInChannel, - shadowed: shadowed ?? this.shadowed, command: command.present ? command.value : this.command, - 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, - messageTextUpdatedAt: messageTextUpdatedAt.present - ? messageTextUpdatedAt.value - : this.messageTextUpdatedAt, - userId: userId.present ? userId.value : this.userId, - pinned: pinned ?? this.pinned, - pinnedAt: pinnedAt.present ? pinnedAt.value : this.pinnedAt, - pinExpires: pinExpires.present ? pinExpires.value : this.pinExpires, - pinnedByUserId: - pinnedByUserId.present ? pinnedByUserId.value : this.pinnedByUserId, + silent: silent ?? this.silent, + createdAt: createdAt ?? this.createdAt, channelCid: channelCid ?? this.channelCid, - i18n: i18n.present ? i18n.value : this.i18n, - restrictedVisibility: restrictedVisibility.present - ? restrictedVisibility.value - : this.restrictedVisibility, extraData: extraData.present ? extraData.value : this.extraData, ); - PinnedMessageEntity copyWithCompanion(PinnedMessagesCompanion data) { - return PinnedMessageEntity( + DraftMessageEntity copyWithCompanion(DraftMessagesCompanion data) { + return DraftMessageEntity( id: data.id.present ? data.id.value : this.id, messageText: data.messageText.present ? data.messageText.value : this.messageText, attachments: data.attachments.present ? data.attachments.value : this.attachments, - state: data.state.present ? data.state.value : this.state, type: data.type.present ? data.type.value : this.type, mentionedUsers: data.mentionedUsers.present ? data.mentionedUsers.value : this.mentionedUsers, - reactionCounts: data.reactionCounts.present - ? data.reactionCounts.value - : this.reactionCounts, - reactionScores: data.reactionScores.present - ? data.reactionScores.value - : this.reactionScores, parentId: data.parentId.present ? data.parentId.value : this.parentId, quotedMessageId: data.quotedMessageId.present ? data.quotedMessageId.value : this.quotedMessageId, pollId: data.pollId.present ? data.pollId.value : this.pollId, - replyCount: - data.replyCount.present ? data.replyCount.value : this.replyCount, showInChannel: data.showInChannel.present ? data.showInChannel.value : this.showInChannel, - shadowed: data.shadowed.present ? data.shadowed.value : this.shadowed, command: data.command.present ? data.command.value : this.command, - localCreatedAt: data.localCreatedAt.present - ? data.localCreatedAt.value - : this.localCreatedAt, - remoteCreatedAt: data.remoteCreatedAt.present - ? data.remoteCreatedAt.value - : this.remoteCreatedAt, - localUpdatedAt: data.localUpdatedAt.present - ? data.localUpdatedAt.value - : this.localUpdatedAt, - remoteUpdatedAt: data.remoteUpdatedAt.present - ? data.remoteUpdatedAt.value - : this.remoteUpdatedAt, - localDeletedAt: data.localDeletedAt.present - ? data.localDeletedAt.value - : this.localDeletedAt, - remoteDeletedAt: data.remoteDeletedAt.present - ? data.remoteDeletedAt.value - : this.remoteDeletedAt, - messageTextUpdatedAt: data.messageTextUpdatedAt.present - ? data.messageTextUpdatedAt.value - : this.messageTextUpdatedAt, - userId: data.userId.present ? data.userId.value : this.userId, - pinned: data.pinned.present ? data.pinned.value : this.pinned, - pinnedAt: data.pinnedAt.present ? data.pinnedAt.value : this.pinnedAt, - pinExpires: - data.pinExpires.present ? data.pinExpires.value : this.pinExpires, - pinnedByUserId: data.pinnedByUserId.present - ? data.pinnedByUserId.value - : this.pinnedByUserId, + silent: data.silent.present ? data.silent.value : this.silent, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, channelCid: data.channelCid.present ? data.channelCid.value : this.channelCid, - i18n: data.i18n.present ? data.i18n.value : this.i18n, - restrictedVisibility: data.restrictedVisibility.present - ? data.restrictedVisibility.value - : this.restrictedVisibility, extraData: data.extraData.present ? data.extraData.value : this.extraData, ); } @override String toString() { - return (StringBuffer('PinnedMessageEntity(') + return (StringBuffer('DraftMessageEntity(') ..write('id: $id, ') ..write('messageText: $messageText, ') ..write('attachments: $attachments, ') - ..write('state: $state, ') ..write('type: $type, ') ..write('mentionedUsers: $mentionedUsers, ') - ..write('reactionCounts: $reactionCounts, ') - ..write('reactionScores: $reactionScores, ') ..write('parentId: $parentId, ') ..write('quotedMessageId: $quotedMessageId, ') ..write('pollId: $pollId, ') - ..write('replyCount: $replyCount, ') ..write('showInChannel: $showInChannel, ') - ..write('shadowed: $shadowed, ') ..write('command: $command, ') - ..write('localCreatedAt: $localCreatedAt, ') - ..write('remoteCreatedAt: $remoteCreatedAt, ') - ..write('localUpdatedAt: $localUpdatedAt, ') - ..write('remoteUpdatedAt: $remoteUpdatedAt, ') - ..write('localDeletedAt: $localDeletedAt, ') - ..write('remoteDeletedAt: $remoteDeletedAt, ') - ..write('messageTextUpdatedAt: $messageTextUpdatedAt, ') - ..write('userId: $userId, ') - ..write('pinned: $pinned, ') - ..write('pinnedAt: $pinnedAt, ') - ..write('pinExpires: $pinExpires, ') - ..write('pinnedByUserId: $pinnedByUserId, ') + ..write('silent: $silent, ') + ..write('createdAt: $createdAt, ') ..write('channelCid: $channelCid, ') - ..write('i18n: $i18n, ') - ..write('restrictedVisibility: $restrictedVisibility, ') ..write('extraData: $extraData') ..write(')')) .toString(); } @override - int get hashCode => Object.hashAll([ - id, - messageText, - attachments, - state, - type, - mentionedUsers, - reactionCounts, - reactionScores, - parentId, - quotedMessageId, - pollId, - replyCount, - showInChannel, - shadowed, - command, - localCreatedAt, - remoteCreatedAt, - localUpdatedAt, - remoteUpdatedAt, - localDeletedAt, - remoteDeletedAt, - messageTextUpdatedAt, - userId, - pinned, - pinnedAt, - pinExpires, - pinnedByUserId, - channelCid, - i18n, - restrictedVisibility, - extraData - ]); + int get hashCode => Object.hash( + id, + messageText, + attachments, + type, + mentionedUsers, + parentId, + quotedMessageId, + pollId, + showInChannel, + command, + silent, + createdAt, + channelCid, + extraData); @override bool operator ==(Object other) => identical(this, other) || - (other is PinnedMessageEntity && + (other is DraftMessageEntity && other.id == this.id && other.messageText == this.messageText && other.attachments == this.attachments && - other.state == this.state && other.type == this.type && other.mentionedUsers == this.mentionedUsers && - other.reactionCounts == this.reactionCounts && - other.reactionScores == this.reactionScores && other.parentId == this.parentId && other.quotedMessageId == this.quotedMessageId && other.pollId == this.pollId && - other.replyCount == this.replyCount && other.showInChannel == this.showInChannel && - other.shadowed == this.shadowed && other.command == this.command && - 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.messageTextUpdatedAt == this.messageTextUpdatedAt && - other.userId == this.userId && - other.pinned == this.pinned && - other.pinnedAt == this.pinnedAt && - other.pinExpires == this.pinExpires && - other.pinnedByUserId == this.pinnedByUserId && + other.silent == this.silent && + other.createdAt == this.createdAt && other.channelCid == this.channelCid && - other.i18n == this.i18n && - other.restrictedVisibility == this.restrictedVisibility && other.extraData == this.extraData); } -class PinnedMessagesCompanion extends UpdateCompanion { +class DraftMessagesCompanion extends UpdateCompanion { final Value id; final Value messageText; final Value> attachments; - final Value state; final Value type; final Value> mentionedUsers; - final Value?> reactionCounts; - final Value?> reactionScores; final Value parentId; final Value quotedMessageId; final Value pollId; - final Value replyCount; final Value showInChannel; - final Value shadowed; final Value command; - final Value localCreatedAt; - final Value remoteCreatedAt; - final Value localUpdatedAt; - final Value remoteUpdatedAt; - final Value localDeletedAt; - final Value remoteDeletedAt; - final Value messageTextUpdatedAt; - final Value userId; - final Value pinned; - final Value pinnedAt; - final Value pinExpires; - final Value pinnedByUserId; + final Value silent; + final Value createdAt; final Value channelCid; - final Value?> i18n; - final Value?> restrictedVisibility; final Value?> extraData; final Value rowid; - const PinnedMessagesCompanion({ + const DraftMessagesCompanion({ this.id = const Value.absent(), this.messageText = const Value.absent(), this.attachments = const Value.absent(), - this.state = const Value.absent(), this.type = const Value.absent(), this.mentionedUsers = const Value.absent(), - this.reactionCounts = const Value.absent(), - this.reactionScores = const Value.absent(), this.parentId = const Value.absent(), this.quotedMessageId = const Value.absent(), this.pollId = const Value.absent(), - this.replyCount = const Value.absent(), this.showInChannel = const Value.absent(), - this.shadowed = const Value.absent(), this.command = 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.messageTextUpdatedAt = const Value.absent(), - this.userId = const Value.absent(), - this.pinned = const Value.absent(), - this.pinnedAt = const Value.absent(), - this.pinExpires = const Value.absent(), - this.pinnedByUserId = const Value.absent(), + this.silent = const Value.absent(), + this.createdAt = const Value.absent(), this.channelCid = const Value.absent(), - this.i18n = const Value.absent(), - this.restrictedVisibility = const Value.absent(), this.extraData = const Value.absent(), this.rowid = const Value.absent(), }); - PinnedMessagesCompanion.insert({ + DraftMessagesCompanion.insert({ required String id, this.messageText = const Value.absent(), required List attachments, - required String state, this.type = const Value.absent(), required List mentionedUsers, - this.reactionCounts = const Value.absent(), - this.reactionScores = const Value.absent(), this.parentId = const Value.absent(), this.quotedMessageId = const Value.absent(), this.pollId = const Value.absent(), - this.replyCount = const Value.absent(), this.showInChannel = const Value.absent(), - this.shadowed = const Value.absent(), this.command = 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.messageTextUpdatedAt = const Value.absent(), - this.userId = const Value.absent(), - this.pinned = const Value.absent(), - this.pinnedAt = const Value.absent(), - this.pinExpires = const Value.absent(), - this.pinnedByUserId = const Value.absent(), + this.silent = const Value.absent(), + this.createdAt = const Value.absent(), required String channelCid, - this.i18n = const Value.absent(), - this.restrictedVisibility = const Value.absent(), this.extraData = const Value.absent(), this.rowid = const Value.absent(), }) : id = Value(id), attachments = Value(attachments), - state = Value(state), mentionedUsers = Value(mentionedUsers), channelCid = Value(channelCid); - static Insertable custom({ + static Insertable custom({ Expression? id, Expression? messageText, Expression? attachments, - Expression? state, Expression? type, Expression? mentionedUsers, - Expression? reactionCounts, - Expression? reactionScores, Expression? parentId, Expression? quotedMessageId, Expression? pollId, - Expression? replyCount, Expression? showInChannel, - Expression? shadowed, Expression? command, - Expression? localCreatedAt, - Expression? remoteCreatedAt, - Expression? localUpdatedAt, - Expression? remoteUpdatedAt, - Expression? localDeletedAt, - Expression? remoteDeletedAt, - Expression? messageTextUpdatedAt, - Expression? userId, - Expression? pinned, - Expression? pinnedAt, - Expression? pinExpires, - Expression? pinnedByUserId, + Expression? silent, + Expression? createdAt, Expression? channelCid, - Expression? i18n, - Expression? restrictedVisibility, Expression? extraData, Expression? rowid, }) { @@ -3348,104 +2724,51 @@ class PinnedMessagesCompanion extends UpdateCompanion { if (id != null) 'id': id, if (messageText != null) 'message_text': messageText, if (attachments != null) 'attachments': attachments, - if (state != null) 'state': state, if (type != null) 'type': type, if (mentionedUsers != null) 'mentioned_users': mentionedUsers, - if (reactionCounts != null) 'reaction_counts': reactionCounts, - if (reactionScores != null) 'reaction_scores': reactionScores, if (parentId != null) 'parent_id': parentId, if (quotedMessageId != null) 'quoted_message_id': quotedMessageId, if (pollId != null) 'poll_id': pollId, - if (replyCount != null) 'reply_count': replyCount, if (showInChannel != null) 'show_in_channel': showInChannel, - if (shadowed != null) 'shadowed': shadowed, if (command != null) 'command': command, - 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 (messageTextUpdatedAt != null) - 'message_text_updated_at': messageTextUpdatedAt, - if (userId != null) 'user_id': userId, - if (pinned != null) 'pinned': pinned, - if (pinnedAt != null) 'pinned_at': pinnedAt, - if (pinExpires != null) 'pin_expires': pinExpires, - if (pinnedByUserId != null) 'pinned_by_user_id': pinnedByUserId, + if (silent != null) 'silent': silent, + if (createdAt != null) 'created_at': createdAt, if (channelCid != null) 'channel_cid': channelCid, - if (i18n != null) 'i18n': i18n, - if (restrictedVisibility != null) - 'restricted_visibility': restrictedVisibility, if (extraData != null) 'extra_data': extraData, if (rowid != null) 'rowid': rowid, }); } - PinnedMessagesCompanion copyWith( + DraftMessagesCompanion copyWith( {Value? id, Value? messageText, Value>? attachments, - Value? state, Value? type, Value>? mentionedUsers, - Value?>? reactionCounts, - Value?>? reactionScores, Value? parentId, Value? quotedMessageId, Value? pollId, - Value? replyCount, Value? showInChannel, - Value? shadowed, Value? command, - Value? localCreatedAt, - Value? remoteCreatedAt, - Value? localUpdatedAt, - Value? remoteUpdatedAt, - Value? localDeletedAt, - Value? remoteDeletedAt, - Value? messageTextUpdatedAt, - Value? userId, - Value? pinned, - Value? pinnedAt, - Value? pinExpires, - Value? pinnedByUserId, + Value? silent, + Value? createdAt, Value? channelCid, - Value?>? i18n, - Value?>? restrictedVisibility, Value?>? extraData, Value? rowid}) { - return PinnedMessagesCompanion( + return DraftMessagesCompanion( id: id ?? this.id, messageText: messageText ?? this.messageText, attachments: attachments ?? this.attachments, - state: state ?? this.state, type: type ?? this.type, mentionedUsers: mentionedUsers ?? this.mentionedUsers, - reactionCounts: reactionCounts ?? this.reactionCounts, - reactionScores: reactionScores ?? this.reactionScores, parentId: parentId ?? this.parentId, quotedMessageId: quotedMessageId ?? this.quotedMessageId, pollId: pollId ?? this.pollId, - replyCount: replyCount ?? this.replyCount, showInChannel: showInChannel ?? this.showInChannel, - shadowed: shadowed ?? this.shadowed, command: command ?? this.command, - localCreatedAt: localCreatedAt ?? this.localCreatedAt, - remoteCreatedAt: remoteCreatedAt ?? this.remoteCreatedAt, - localUpdatedAt: localUpdatedAt ?? this.localUpdatedAt, - remoteUpdatedAt: remoteUpdatedAt ?? this.remoteUpdatedAt, - localDeletedAt: localDeletedAt ?? this.localDeletedAt, - remoteDeletedAt: remoteDeletedAt ?? this.remoteDeletedAt, - messageTextUpdatedAt: messageTextUpdatedAt ?? this.messageTextUpdatedAt, - userId: userId ?? this.userId, - pinned: pinned ?? this.pinned, - pinnedAt: pinnedAt ?? this.pinnedAt, - pinExpires: pinExpires ?? this.pinExpires, - pinnedByUserId: pinnedByUserId ?? this.pinnedByUserId, + silent: silent ?? this.silent, + createdAt: createdAt ?? this.createdAt, channelCid: channelCid ?? this.channelCid, - i18n: i18n ?? this.i18n, - restrictedVisibility: restrictedVisibility ?? this.restrictedVisibility, extraData: extraData ?? this.extraData, rowid: rowid ?? this.rowid, ); @@ -3462,29 +2785,16 @@ class PinnedMessagesCompanion extends UpdateCompanion { } if (attachments.present) { map['attachments'] = Variable( - $PinnedMessagesTable.$converterattachments.toSql(attachments.value)); - } - if (state.present) { - map['state'] = Variable(state.value); + $DraftMessagesTable.$converterattachments.toSql(attachments.value)); } if (type.present) { map['type'] = Variable(type.value); } if (mentionedUsers.present) { - map['mentioned_users'] = Variable($PinnedMessagesTable + map['mentioned_users'] = Variable($DraftMessagesTable .$convertermentionedUsers .toSql(mentionedUsers.value)); } - if (reactionCounts.present) { - map['reaction_counts'] = Variable($PinnedMessagesTable - .$converterreactionCountsn - .toSql(reactionCounts.value)); - } - if (reactionScores.present) { - map['reaction_scores'] = Variable($PinnedMessagesTable - .$converterreactionScoresn - .toSql(reactionScores.value)); - } if (parentId.present) { map['parent_id'] = Variable(parentId.value); } @@ -3494,70 +2804,24 @@ class PinnedMessagesCompanion extends UpdateCompanion { if (pollId.present) { map['poll_id'] = Variable(pollId.value); } - if (replyCount.present) { - map['reply_count'] = Variable(replyCount.value); - } if (showInChannel.present) { map['show_in_channel'] = Variable(showInChannel.value); } - if (shadowed.present) { - map['shadowed'] = Variable(shadowed.value); - } if (command.present) { map['command'] = Variable(command.value); } - if (localCreatedAt.present) { - map['local_created_at'] = Variable(localCreatedAt.value); - } - if (remoteCreatedAt.present) { - map['remote_created_at'] = Variable(remoteCreatedAt.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 (messageTextUpdatedAt.present) { - map['message_text_updated_at'] = - Variable(messageTextUpdatedAt.value); - } - if (userId.present) { - map['user_id'] = Variable(userId.value); - } - if (pinned.present) { - map['pinned'] = Variable(pinned.value); - } - if (pinnedAt.present) { - map['pinned_at'] = Variable(pinnedAt.value); - } - if (pinExpires.present) { - map['pin_expires'] = Variable(pinExpires.value); + if (silent.present) { + map['silent'] = Variable(silent.value); } - if (pinnedByUserId.present) { - map['pinned_by_user_id'] = Variable(pinnedByUserId.value); + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); } if (channelCid.present) { map['channel_cid'] = Variable(channelCid.value); } - if (i18n.present) { - map['i18n'] = Variable( - $PinnedMessagesTable.$converteri18n.toSql(i18n.value)); - } - if (restrictedVisibility.present) { - map['restricted_visibility'] = Variable($PinnedMessagesTable - .$converterrestrictedVisibilityn - .toSql(restrictedVisibility.value)); - } if (extraData.present) { map['extra_data'] = Variable( - $PinnedMessagesTable.$converterextraDatan.toSql(extraData.value)); + $DraftMessagesTable.$converterextraDatan.toSql(extraData.value)); } if (rowid.present) { map['rowid'] = Variable(rowid.value); @@ -3567,37 +2831,20 @@ class PinnedMessagesCompanion extends UpdateCompanion { @override String toString() { - return (StringBuffer('PinnedMessagesCompanion(') + return (StringBuffer('DraftMessagesCompanion(') ..write('id: $id, ') ..write('messageText: $messageText, ') ..write('attachments: $attachments, ') - ..write('state: $state, ') ..write('type: $type, ') ..write('mentionedUsers: $mentionedUsers, ') - ..write('reactionCounts: $reactionCounts, ') - ..write('reactionScores: $reactionScores, ') ..write('parentId: $parentId, ') ..write('quotedMessageId: $quotedMessageId, ') ..write('pollId: $pollId, ') - ..write('replyCount: $replyCount, ') ..write('showInChannel: $showInChannel, ') - ..write('shadowed: $shadowed, ') ..write('command: $command, ') - ..write('localCreatedAt: $localCreatedAt, ') - ..write('remoteCreatedAt: $remoteCreatedAt, ') - ..write('localUpdatedAt: $localUpdatedAt, ') - ..write('remoteUpdatedAt: $remoteUpdatedAt, ') - ..write('localDeletedAt: $localDeletedAt, ') - ..write('remoteDeletedAt: $remoteDeletedAt, ') - ..write('messageTextUpdatedAt: $messageTextUpdatedAt, ') - ..write('userId: $userId, ') - ..write('pinned: $pinned, ') - ..write('pinnedAt: $pinnedAt, ') - ..write('pinExpires: $pinExpires, ') - ..write('pinnedByUserId: $pinnedByUserId, ') + ..write('silent: $silent, ') + ..write('createdAt: $createdAt, ') ..write('channelCid: $channelCid, ') - ..write('i18n: $i18n, ') - ..write('restrictedVisibility: $restrictedVisibility, ') ..write('extraData: $extraData, ') ..write('rowid: $rowid') ..write(')')) @@ -3605,173 +2852,258 @@ class PinnedMessagesCompanion extends UpdateCompanion { } } -class $PollsTable extends Polls with TableInfo<$PollsTable, PollEntity> { +class $PinnedMessagesTable extends PinnedMessages + with TableInfo<$PinnedMessagesTable, PinnedMessageEntity> { @override final GeneratedDatabase attachedDatabase; final String? _alias; - $PollsTable(this.attachedDatabase, [this._alias]); + $PinnedMessagesTable(this.attachedDatabase, [this._alias]); static const VerificationMeta _idMeta = const VerificationMeta('id'); @override late final GeneratedColumn id = GeneratedColumn( 'id', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true); - static const VerificationMeta _nameMeta = const VerificationMeta('name'); - @override - late final GeneratedColumn name = GeneratedColumn( - 'name', aliasedName, false, - type: DriftSqlType.string, requiredDuringInsert: true); - static const VerificationMeta _descriptionMeta = - const VerificationMeta('description'); + static const VerificationMeta _messageTextMeta = + const VerificationMeta('messageText'); @override - late final GeneratedColumn description = GeneratedColumn( - 'description', aliasedName, true, + late final GeneratedColumn messageText = GeneratedColumn( + 'message_text', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _optionsMeta = - const VerificationMeta('options'); @override - late final GeneratedColumnWithTypeConverter, String> options = - GeneratedColumn('options', aliasedName, false, + late final GeneratedColumnWithTypeConverter, String> + attachments = GeneratedColumn('attachments', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true) - .withConverter>($PollsTable.$converteroptions); - static const VerificationMeta _votingVisibilityMeta = - const VerificationMeta('votingVisibility'); + .withConverter>( + $PinnedMessagesTable.$converterattachments); + static const VerificationMeta _stateMeta = const VerificationMeta('state'); @override - late final GeneratedColumnWithTypeConverter - votingVisibility = GeneratedColumn( - 'voting_visibility', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: false, - defaultValue: const Constant('public')) - .withConverter( - $PollsTable.$convertervotingVisibility); - static const VerificationMeta _enforceUniqueVoteMeta = - const VerificationMeta('enforceUniqueVote'); + late final GeneratedColumn state = GeneratedColumn( + 'state', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + static const VerificationMeta _typeMeta = const VerificationMeta('type'); @override - late final GeneratedColumn enforceUniqueVote = GeneratedColumn( - 'enforce_unique_vote', aliasedName, false, - type: DriftSqlType.bool, + late final GeneratedColumn type = GeneratedColumn( + 'type', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: false, - defaultConstraints: GeneratedColumn.constraintIsAlways( - 'CHECK ("enforce_unique_vote" IN (0, 1))'), - defaultValue: const Constant(false)); - static const VerificationMeta _maxVotesAllowedMeta = - const VerificationMeta('maxVotesAllowed'); + defaultValue: const Constant('regular')); @override - late final GeneratedColumn maxVotesAllowed = GeneratedColumn( - 'max_votes_allowed', aliasedName, true, - type: DriftSqlType.int, requiredDuringInsert: false); - static const VerificationMeta _allowUserSuggestedOptionsMeta = - const VerificationMeta('allowUserSuggestedOptions'); + late final GeneratedColumnWithTypeConverter, String> + mentionedUsers = GeneratedColumn( + 'mentioned_users', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true) + .withConverter>( + $PinnedMessagesTable.$convertermentionedUsers); @override - late final GeneratedColumn allowUserSuggestedOptions = - GeneratedColumn('allow_user_suggested_options', aliasedName, false, - type: DriftSqlType.bool, - requiredDuringInsert: false, - defaultConstraints: GeneratedColumn.constraintIsAlways( - 'CHECK ("allow_user_suggested_options" IN (0, 1))'), - defaultValue: const Constant(false)); - static const VerificationMeta _allowAnswersMeta = - const VerificationMeta('allowAnswers'); + late final GeneratedColumnWithTypeConverter?, String> + reactionCounts = GeneratedColumn( + 'reaction_counts', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false) + .withConverter?>( + $PinnedMessagesTable.$converterreactionCountsn); @override - late final GeneratedColumn allowAnswers = GeneratedColumn( - 'allow_answers', aliasedName, false, - type: DriftSqlType.bool, - requiredDuringInsert: false, - defaultConstraints: GeneratedColumn.constraintIsAlways( - 'CHECK ("allow_answers" IN (0, 1))'), - defaultValue: const Constant(false)); - static const VerificationMeta _isClosedMeta = - const VerificationMeta('isClosed'); + late final GeneratedColumnWithTypeConverter?, String> + reactionScores = GeneratedColumn( + 'reaction_scores', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false) + .withConverter?>( + $PinnedMessagesTable.$converterreactionScoresn); + static const VerificationMeta _parentIdMeta = + const VerificationMeta('parentId'); @override - late final GeneratedColumn isClosed = GeneratedColumn( - 'is_closed', aliasedName, false, + late final GeneratedColumn parentId = GeneratedColumn( + 'parent_id', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _quotedMessageIdMeta = + const VerificationMeta('quotedMessageId'); + @override + late final GeneratedColumn quotedMessageId = GeneratedColumn( + 'quoted_message_id', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _pollIdMeta = const VerificationMeta('pollId'); + @override + late final GeneratedColumn pollId = GeneratedColumn( + 'poll_id', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _replyCountMeta = + const VerificationMeta('replyCount'); + @override + late final GeneratedColumn replyCount = GeneratedColumn( + 'reply_count', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + static const VerificationMeta _showInChannelMeta = + const VerificationMeta('showInChannel'); + @override + late final GeneratedColumn showInChannel = GeneratedColumn( + 'show_in_channel', aliasedName, true, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("show_in_channel" IN (0, 1))')); + static const VerificationMeta _shadowedMeta = + const VerificationMeta('shadowed'); + @override + late final GeneratedColumn shadowed = GeneratedColumn( + 'shadowed', aliasedName, false, type: DriftSqlType.bool, requiredDuringInsert: false, defaultConstraints: - GeneratedColumn.constraintIsAlways('CHECK ("is_closed" IN (0, 1))'), + GeneratedColumn.constraintIsAlways('CHECK ("shadowed" IN (0, 1))'), defaultValue: const Constant(false)); - static const VerificationMeta _answersCountMeta = - const VerificationMeta('answersCount'); + static const VerificationMeta _commandMeta = + const VerificationMeta('command'); @override - late final GeneratedColumn answersCount = GeneratedColumn( - 'answers_count', aliasedName, false, - type: DriftSqlType.int, - requiredDuringInsert: false, - defaultValue: const Constant(0)); - static const VerificationMeta _voteCountsByOptionMeta = - const VerificationMeta('voteCountsByOption'); + late final GeneratedColumn command = GeneratedColumn( + 'command', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _localCreatedAtMeta = + const VerificationMeta('localCreatedAt'); @override - late final GeneratedColumnWithTypeConverter, String> - voteCountsByOption = GeneratedColumn( - 'vote_counts_by_option', aliasedName, false, - type: DriftSqlType.string, requiredDuringInsert: true) - .withConverter>( - $PollsTable.$convertervoteCountsByOption); - static const VerificationMeta _voteCountMeta = - const VerificationMeta('voteCount'); + 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 voteCount = GeneratedColumn( - 'vote_count', aliasedName, false, - type: DriftSqlType.int, - requiredDuringInsert: false, - defaultValue: const Constant(0)); - static const VerificationMeta _createdByIdMeta = - const VerificationMeta('createdById'); + 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 createdById = GeneratedColumn( - 'created_by_id', aliasedName, true, + 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 _messageTextUpdatedAtMeta = + const VerificationMeta('messageTextUpdatedAt'); + @override + late final GeneratedColumn messageTextUpdatedAt = + GeneratedColumn('message_text_updated_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _userIdMeta = const VerificationMeta('userId'); + @override + late final GeneratedColumn userId = GeneratedColumn( + 'user_id', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _createdAtMeta = - const VerificationMeta('createdAt'); + static const VerificationMeta _pinnedMeta = const VerificationMeta('pinned'); @override - late final GeneratedColumn createdAt = GeneratedColumn( - 'created_at', aliasedName, false, - type: DriftSqlType.dateTime, + late final GeneratedColumn pinned = GeneratedColumn( + 'pinned', aliasedName, false, + type: DriftSqlType.bool, requiredDuringInsert: false, - defaultValue: currentDateAndTime); - static const VerificationMeta _updatedAtMeta = - const VerificationMeta('updatedAt'); + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("pinned" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _pinnedAtMeta = + const VerificationMeta('pinnedAt'); @override - late final GeneratedColumn updatedAt = GeneratedColumn( - 'updated_at', aliasedName, false, - type: DriftSqlType.dateTime, - requiredDuringInsert: false, - defaultValue: currentDateAndTime); - static const VerificationMeta _extraDataMeta = - const VerificationMeta('extraData'); + late final GeneratedColumn pinnedAt = GeneratedColumn( + 'pinned_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _pinExpiresMeta = + const VerificationMeta('pinExpires'); + @override + late final GeneratedColumn pinExpires = GeneratedColumn( + 'pin_expires', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _pinnedByUserIdMeta = + const VerificationMeta('pinnedByUserId'); + @override + late final GeneratedColumn pinnedByUserId = GeneratedColumn( + 'pinned_by_user_id', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _channelCidMeta = + const VerificationMeta('channelCid'); + @override + late final GeneratedColumn channelCid = GeneratedColumn( + 'channel_cid', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + @override + late final GeneratedColumnWithTypeConverter?, String> + i18n = GeneratedColumn('i18n', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false) + .withConverter?>( + $PinnedMessagesTable.$converteri18n); + @override + late final GeneratedColumnWithTypeConverter?, String> + restrictedVisibility = GeneratedColumn( + 'restricted_visibility', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false) + .withConverter?>( + $PinnedMessagesTable.$converterrestrictedVisibilityn); + static const VerificationMeta _draftMessageIdMeta = + const VerificationMeta('draftMessageId'); + @override + late final GeneratedColumn draftMessageId = GeneratedColumn( + 'draft_message_id', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); @override late final GeneratedColumnWithTypeConverter?, String> extraData = GeneratedColumn('extra_data', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false) .withConverter?>( - $PollsTable.$converterextraDatan); + $PinnedMessagesTable.$converterextraDatan); @override List get $columns => [ id, - name, - description, - options, - votingVisibility, - enforceUniqueVote, - maxVotesAllowed, - allowUserSuggestedOptions, - allowAnswers, - isClosed, - answersCount, - voteCountsByOption, - voteCount, - createdById, - createdAt, - updatedAt, + messageText, + attachments, + state, + type, + mentionedUsers, + reactionCounts, + reactionScores, + parentId, + quotedMessageId, + pollId, + replyCount, + showInChannel, + shadowed, + command, + localCreatedAt, + remoteCreatedAt, + localUpdatedAt, + remoteUpdatedAt, + localDeletedAt, + remoteDeletedAt, + messageTextUpdatedAt, + userId, + pinned, + pinnedAt, + pinExpires, + pinnedByUserId, + channelCid, + i18n, + restrictedVisibility, + draftMessageId, extraData ]; @override String get aliasedName => _alias ?? actualTableName; @override String get actualTableName => $name; - static const String $name = 'polls'; + static const String $name = 'pinned_messages'; @override - VerificationContext validateIntegrity(Insertable instance, + VerificationContext validateIntegrity( + Insertable instance, {bool isInserting = false}) { final context = VerificationContext(); final data = instance.toColumns(true); @@ -3780,312 +3112,1712 @@ class $PollsTable extends Polls with TableInfo<$PollsTable, PollEntity> { } else if (isInserting) { context.missing(_idMeta); } - if (data.containsKey('name')) { + if (data.containsKey('message_text')) { context.handle( - _nameMeta, name.isAcceptableOrUnknown(data['name']!, _nameMeta)); - } else if (isInserting) { - context.missing(_nameMeta); + _messageTextMeta, + messageText.isAcceptableOrUnknown( + data['message_text']!, _messageTextMeta)); } - if (data.containsKey('description')) { + if (data.containsKey('state')) { context.handle( - _descriptionMeta, - description.isAcceptableOrUnknown( - data['description']!, _descriptionMeta)); + _stateMeta, state.isAcceptableOrUnknown(data['state']!, _stateMeta)); + } else if (isInserting) { + context.missing(_stateMeta); } - context.handle(_optionsMeta, const VerificationResult.success()); - context.handle(_votingVisibilityMeta, const VerificationResult.success()); - if (data.containsKey('enforce_unique_vote')) { + if (data.containsKey('type')) { context.handle( - _enforceUniqueVoteMeta, - enforceUniqueVote.isAcceptableOrUnknown( - data['enforce_unique_vote']!, _enforceUniqueVoteMeta)); + _typeMeta, type.isAcceptableOrUnknown(data['type']!, _typeMeta)); } - if (data.containsKey('max_votes_allowed')) { - context.handle( - _maxVotesAllowedMeta, - maxVotesAllowed.isAcceptableOrUnknown( - data['max_votes_allowed']!, _maxVotesAllowedMeta)); + if (data.containsKey('parent_id')) { + context.handle(_parentIdMeta, + parentId.isAcceptableOrUnknown(data['parent_id']!, _parentIdMeta)); } - if (data.containsKey('allow_user_suggested_options')) { + if (data.containsKey('quoted_message_id')) { context.handle( - _allowUserSuggestedOptionsMeta, - allowUserSuggestedOptions.isAcceptableOrUnknown( - data['allow_user_suggested_options']!, - _allowUserSuggestedOptionsMeta)); - } - if (data.containsKey('allow_answers')) { + _quotedMessageIdMeta, + quotedMessageId.isAcceptableOrUnknown( + data['quoted_message_id']!, _quotedMessageIdMeta)); + } + if (data.containsKey('poll_id')) { + context.handle(_pollIdMeta, + pollId.isAcceptableOrUnknown(data['poll_id']!, _pollIdMeta)); + } + if (data.containsKey('reply_count')) { context.handle( - _allowAnswersMeta, - allowAnswers.isAcceptableOrUnknown( - data['allow_answers']!, _allowAnswersMeta)); + _replyCountMeta, + replyCount.isAcceptableOrUnknown( + data['reply_count']!, _replyCountMeta)); } - if (data.containsKey('is_closed')) { - context.handle(_isClosedMeta, - isClosed.isAcceptableOrUnknown(data['is_closed']!, _isClosedMeta)); + if (data.containsKey('show_in_channel')) { + context.handle( + _showInChannelMeta, + showInChannel.isAcceptableOrUnknown( + data['show_in_channel']!, _showInChannelMeta)); } - if (data.containsKey('answers_count')) { + if (data.containsKey('shadowed')) { + context.handle(_shadowedMeta, + shadowed.isAcceptableOrUnknown(data['shadowed']!, _shadowedMeta)); + } + if (data.containsKey('command')) { + context.handle(_commandMeta, + command.isAcceptableOrUnknown(data['command']!, _commandMeta)); + } + if (data.containsKey('local_created_at')) { context.handle( - _answersCountMeta, - answersCount.isAcceptableOrUnknown( - data['answers_count']!, _answersCountMeta)); + _localCreatedAtMeta, + localCreatedAt.isAcceptableOrUnknown( + data['local_created_at']!, _localCreatedAtMeta)); } - context.handle(_voteCountsByOptionMeta, const VerificationResult.success()); - if (data.containsKey('vote_count')) { - context.handle(_voteCountMeta, - voteCount.isAcceptableOrUnknown(data['vote_count']!, _voteCountMeta)); + if (data.containsKey('remote_created_at')) { + context.handle( + _remoteCreatedAtMeta, + remoteCreatedAt.isAcceptableOrUnknown( + data['remote_created_at']!, _remoteCreatedAtMeta)); } - if (data.containsKey('created_by_id')) { + if (data.containsKey('local_updated_at')) { context.handle( - _createdByIdMeta, - createdById.isAcceptableOrUnknown( - data['created_by_id']!, _createdByIdMeta)); + _localUpdatedAtMeta, + localUpdatedAt.isAcceptableOrUnknown( + data['local_updated_at']!, _localUpdatedAtMeta)); } - if (data.containsKey('created_at')) { - context.handle(_createdAtMeta, - createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); + if (data.containsKey('remote_updated_at')) { + context.handle( + _remoteUpdatedAtMeta, + remoteUpdatedAt.isAcceptableOrUnknown( + data['remote_updated_at']!, _remoteUpdatedAtMeta)); } - if (data.containsKey('updated_at')) { - context.handle(_updatedAtMeta, - updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta)); + 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('message_text_updated_at')) { + context.handle( + _messageTextUpdatedAtMeta, + messageTextUpdatedAt.isAcceptableOrUnknown( + data['message_text_updated_at']!, _messageTextUpdatedAtMeta)); + } + if (data.containsKey('user_id')) { + context.handle(_userIdMeta, + userId.isAcceptableOrUnknown(data['user_id']!, _userIdMeta)); + } + if (data.containsKey('pinned')) { + context.handle(_pinnedMeta, + pinned.isAcceptableOrUnknown(data['pinned']!, _pinnedMeta)); + } + if (data.containsKey('pinned_at')) { + context.handle(_pinnedAtMeta, + pinnedAt.isAcceptableOrUnknown(data['pinned_at']!, _pinnedAtMeta)); + } + if (data.containsKey('pin_expires')) { + context.handle( + _pinExpiresMeta, + pinExpires.isAcceptableOrUnknown( + data['pin_expires']!, _pinExpiresMeta)); + } + if (data.containsKey('pinned_by_user_id')) { + context.handle( + _pinnedByUserIdMeta, + pinnedByUserId.isAcceptableOrUnknown( + data['pinned_by_user_id']!, _pinnedByUserIdMeta)); + } + if (data.containsKey('channel_cid')) { + context.handle( + _channelCidMeta, + channelCid.isAcceptableOrUnknown( + data['channel_cid']!, _channelCidMeta)); + } else if (isInserting) { + context.missing(_channelCidMeta); + } + if (data.containsKey('draft_message_id')) { + context.handle( + _draftMessageIdMeta, + draftMessageId.isAcceptableOrUnknown( + data['draft_message_id']!, _draftMessageIdMeta)); } - context.handle(_extraDataMeta, const VerificationResult.success()); return context; } @override Set get $primaryKey => {id}; @override - PollEntity map(Map data, {String? tablePrefix}) { + PinnedMessageEntity map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; - return PollEntity( + return PinnedMessageEntity( id: attachedDatabase.typeMapping .read(DriftSqlType.string, data['${effectivePrefix}id'])!, - name: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}name'])!, - description: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}description']), - options: $PollsTable.$converteroptions.fromSql(attachedDatabase - .typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}options'])!), - votingVisibility: $PollsTable.$convertervotingVisibility.fromSql( - attachedDatabase.typeMapping.read(DriftSqlType.string, - data['${effectivePrefix}voting_visibility'])!), - enforceUniqueVote: attachedDatabase.typeMapping.read( - DriftSqlType.bool, data['${effectivePrefix}enforce_unique_vote'])!, - maxVotesAllowed: attachedDatabase.typeMapping - .read(DriftSqlType.int, data['${effectivePrefix}max_votes_allowed']), - allowUserSuggestedOptions: attachedDatabase.typeMapping.read( - DriftSqlType.bool, - data['${effectivePrefix}allow_user_suggested_options'])!, - allowAnswers: attachedDatabase.typeMapping - .read(DriftSqlType.bool, data['${effectivePrefix}allow_answers'])!, - isClosed: attachedDatabase.typeMapping - .read(DriftSqlType.bool, data['${effectivePrefix}is_closed'])!, - answersCount: attachedDatabase.typeMapping - .read(DriftSqlType.int, data['${effectivePrefix}answers_count'])!, - voteCountsByOption: $PollsTable.$convertervoteCountsByOption.fromSql( - attachedDatabase.typeMapping.read(DriftSqlType.string, - data['${effectivePrefix}vote_counts_by_option'])!), - voteCount: attachedDatabase.typeMapping - .read(DriftSqlType.int, data['${effectivePrefix}vote_count'])!, - createdById: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}created_by_id']), - createdAt: attachedDatabase.typeMapping - .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, - updatedAt: attachedDatabase.typeMapping - .read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!, - extraData: $PollsTable.$converterextraDatan.fromSql(attachedDatabase + messageText: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}message_text']), + attachments: $PinnedMessagesTable.$converterattachments.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}attachments'])!), + state: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}state'])!, + type: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}type'])!, + mentionedUsers: $PinnedMessagesTable.$convertermentionedUsers.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}mentioned_users'])!), + reactionCounts: $PinnedMessagesTable.$converterreactionCountsn.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}reaction_counts'])), + reactionScores: $PinnedMessagesTable.$converterreactionScoresn.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}reaction_scores'])), + parentId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}parent_id']), + quotedMessageId: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}quoted_message_id']), + pollId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}poll_id']), + replyCount: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}reply_count']), + showInChannel: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}show_in_channel']), + shadowed: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}shadowed'])!, + command: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}command']), + 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']), + messageTextUpdatedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}message_text_updated_at']), + userId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}user_id']), + pinned: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}pinned'])!, + pinnedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}pinned_at']), + pinExpires: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}pin_expires']), + pinnedByUserId: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}pinned_by_user_id']), + channelCid: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}channel_cid'])!, + i18n: $PinnedMessagesTable.$converteri18n.fromSql(attachedDatabase .typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}extra_data'])), + .read(DriftSqlType.string, data['${effectivePrefix}i18n'])), + restrictedVisibility: $PinnedMessagesTable.$converterrestrictedVisibilityn + .fromSql(attachedDatabase.typeMapping.read(DriftSqlType.string, + data['${effectivePrefix}restricted_visibility'])), + draftMessageId: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}draft_message_id']), + extraData: $PinnedMessagesTable.$converterextraDatan.fromSql( + attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}extra_data'])), ); } @override - $PollsTable createAlias(String alias) { - return $PollsTable(attachedDatabase, alias); + $PinnedMessagesTable createAlias(String alias) { + return $PinnedMessagesTable(attachedDatabase, alias); } - static TypeConverter, String> $converteroptions = + static TypeConverter, String> $converterattachments = ListConverter(); - static TypeConverter $convertervotingVisibility = - const VotingVisibilityConverter(); - static TypeConverter, String> $convertervoteCountsByOption = + static TypeConverter, String> $convertermentionedUsers = + ListConverter(); + static TypeConverter, String> $converterreactionCounts = + MapConverter(); + static TypeConverter?, String?> $converterreactionCountsn = + NullAwareTypeConverter.wrap($converterreactionCounts); + static TypeConverter, String> $converterreactionScores = MapConverter(); + static TypeConverter?, String?> $converterreactionScoresn = + NullAwareTypeConverter.wrap($converterreactionScores); + static TypeConverter?, String?> $converteri18n = + NullableMapConverter(); + static TypeConverter, String> $converterrestrictedVisibility = + ListConverter(); + static TypeConverter?, String?> $converterrestrictedVisibilityn = + NullAwareTypeConverter.wrap($converterrestrictedVisibility); static TypeConverter, String> $converterextraData = MapConverter(); static TypeConverter?, String?> $converterextraDatan = NullAwareTypeConverter.wrap($converterextraData); } -class PollEntity extends DataClass implements Insertable { - /// The unique identifier of the poll. +class PinnedMessageEntity extends DataClass + implements Insertable { + /// The message id final String id; - /// The name of the poll. - final String name; - - /// The description of the poll. - final String? description; + /// The text of this message + final String? messageText; - /// The list of options available for the poll. - final List options; + /// The list of attachments, either provided by the user + /// or generated from a command or as a result of URL scraping. + final List attachments; - /// Represents the visibility of the voting process. - /// - /// Defaults to 'public'. - final VotingVisibility votingVisibility; + /// The current state of the message. + final String state; - /// If true, only unique votes are allowed. - /// - /// Defaults to false. - final bool enforceUniqueVote; + /// The message type + final String type; - /// The maximum number of votes allowed per user. - final int? maxVotesAllowed; + /// The list of user mentioned in the message + final List mentionedUsers; - /// If true, users can suggest their own options. - /// - /// Defaults to false. - final bool allowUserSuggestedOptions; + /// A map describing the count of number of every reaction + final Map? reactionCounts; - /// If true, users can provide their own answers/comments. - /// - /// Defaults to false. - final bool allowAnswers; + /// A map describing the count of score of every reaction + final Map? reactionScores; - /// Indicates if the poll is closed. - final bool isClosed; + /// The ID of the parent message, if the message is a thread reply. + final String? parentId; - /// The total number of answers received by the poll. - final int answersCount; + /// The ID of the quoted message, if the message is a quoted reply. + final String? quotedMessageId; - /// Map of vote counts by option. - final Map voteCountsByOption; + /// The ID of the poll, if the message is a poll. + final String? pollId; - /// The total number of votes received by the poll. - final int voteCount; + /// Number of replies for this message. + final int? replyCount; - /// The id of the user who created the poll. - final String? createdById; + /// Check if this message needs to show in the channel. + final bool? showInChannel; - /// The date when the poll was created. - final DateTime createdAt; + /// If true the message is shadowed + final bool shadowed; - /// The date when the poll was last updated. - final DateTime updatedAt; + /// A used command name. + final String? command; - /// Map of custom poll extraData + /// The DateTime on which the message was created on the client. + final DateTime? localCreatedAt; + + /// The DateTime on which the message was created on the server. + final DateTime? remoteCreatedAt; + + /// 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; + + /// The DateTime at which the message text was edited + final DateTime? messageTextUpdatedAt; + + /// Id of the User who sent the message + final String? userId; + + /// Whether the message is pinned or not + final bool pinned; + + /// The DateTime at which the message was pinned + final DateTime? pinnedAt; + + /// The DateTime on which the message pin expires + final DateTime? pinExpires; + + /// Id of the User who pinned the message + final String? pinnedByUserId; + + /// The channel cid of which this message is part of + final String channelCid; + + /// A Map of [messageText] translations. + final Map? i18n; + + /// The list of user ids that should be able to see the message. + final List? restrictedVisibility; + + /// Id of the draft message if this message is a parent message. + final String? draftMessageId; + + /// Message custom extraData final Map? extraData; - const PollEntity( + const PinnedMessageEntity( {required this.id, - required this.name, - this.description, - required this.options, - required this.votingVisibility, - required this.enforceUniqueVote, - this.maxVotesAllowed, - required this.allowUserSuggestedOptions, - required this.allowAnswers, - required this.isClosed, - required this.answersCount, - required this.voteCountsByOption, - required this.voteCount, - this.createdById, - required this.createdAt, - required this.updatedAt, + this.messageText, + required this.attachments, + required this.state, + required this.type, + required this.mentionedUsers, + this.reactionCounts, + this.reactionScores, + this.parentId, + this.quotedMessageId, + this.pollId, + this.replyCount, + this.showInChannel, + required this.shadowed, + this.command, + this.localCreatedAt, + this.remoteCreatedAt, + this.localUpdatedAt, + this.remoteUpdatedAt, + this.localDeletedAt, + this.remoteDeletedAt, + this.messageTextUpdatedAt, + this.userId, + required this.pinned, + this.pinnedAt, + this.pinExpires, + this.pinnedByUserId, + required this.channelCid, + this.i18n, + this.restrictedVisibility, + this.draftMessageId, this.extraData}); @override Map toColumns(bool nullToAbsent) { final map = {}; map['id'] = Variable(id); - map['name'] = Variable(name); - if (!nullToAbsent || description != null) { - map['description'] = Variable(description); + if (!nullToAbsent || messageText != null) { + map['message_text'] = Variable(messageText); } { - map['options'] = - Variable($PollsTable.$converteroptions.toSql(options)); + map['attachments'] = Variable( + $PinnedMessagesTable.$converterattachments.toSql(attachments)); } + map['state'] = Variable(state); + map['type'] = Variable(type); { - map['voting_visibility'] = Variable( - $PollsTable.$convertervotingVisibility.toSql(votingVisibility)); + map['mentioned_users'] = Variable( + $PinnedMessagesTable.$convertermentionedUsers.toSql(mentionedUsers)); } - map['enforce_unique_vote'] = Variable(enforceUniqueVote); - if (!nullToAbsent || maxVotesAllowed != null) { - map['max_votes_allowed'] = Variable(maxVotesAllowed); + if (!nullToAbsent || reactionCounts != null) { + map['reaction_counts'] = Variable( + $PinnedMessagesTable.$converterreactionCountsn.toSql(reactionCounts)); } - map['allow_user_suggested_options'] = - Variable(allowUserSuggestedOptions); - map['allow_answers'] = Variable(allowAnswers); - map['is_closed'] = Variable(isClosed); - map['answers_count'] = Variable(answersCount); - { - map['vote_counts_by_option'] = Variable( - $PollsTable.$convertervoteCountsByOption.toSql(voteCountsByOption)); + if (!nullToAbsent || reactionScores != null) { + map['reaction_scores'] = Variable( + $PinnedMessagesTable.$converterreactionScoresn.toSql(reactionScores)); } - map['vote_count'] = Variable(voteCount); - if (!nullToAbsent || createdById != null) { - map['created_by_id'] = Variable(createdById); + if (!nullToAbsent || parentId != null) { + map['parent_id'] = Variable(parentId); } - map['created_at'] = Variable(createdAt); - map['updated_at'] = Variable(updatedAt); - if (!nullToAbsent || extraData != null) { - map['extra_data'] = - Variable($PollsTable.$converterextraDatan.toSql(extraData)); + if (!nullToAbsent || quotedMessageId != null) { + map['quoted_message_id'] = Variable(quotedMessageId); } - return map; - } - - factory PollEntity.fromJson(Map json, - {ValueSerializer? serializer}) { - serializer ??= driftRuntimeOptions.defaultSerializer; - return PollEntity( - id: serializer.fromJson(json['id']), - name: serializer.fromJson(json['name']), - description: serializer.fromJson(json['description']), - options: serializer.fromJson>(json['options']), - votingVisibility: - serializer.fromJson(json['votingVisibility']), - enforceUniqueVote: serializer.fromJson(json['enforceUniqueVote']), - maxVotesAllowed: serializer.fromJson(json['maxVotesAllowed']), - allowUserSuggestedOptions: - serializer.fromJson(json['allowUserSuggestedOptions']), - allowAnswers: serializer.fromJson(json['allowAnswers']), - isClosed: serializer.fromJson(json['isClosed']), - answersCount: serializer.fromJson(json['answersCount']), - voteCountsByOption: - serializer.fromJson>(json['voteCountsByOption']), - voteCount: serializer.fromJson(json['voteCount']), - createdById: serializer.fromJson(json['createdById']), - createdAt: serializer.fromJson(json['createdAt']), - updatedAt: serializer.fromJson(json['updatedAt']), - extraData: serializer.fromJson?>(json['extraData']), - ); - } - @override - Map toJson({ValueSerializer? serializer}) { - serializer ??= driftRuntimeOptions.defaultSerializer; - return { - 'id': serializer.toJson(id), - 'name': serializer.toJson(name), - 'description': serializer.toJson(description), - 'options': serializer.toJson>(options), - 'votingVisibility': serializer.toJson(votingVisibility), - 'enforceUniqueVote': serializer.toJson(enforceUniqueVote), - 'maxVotesAllowed': serializer.toJson(maxVotesAllowed), - 'allowUserSuggestedOptions': - serializer.toJson(allowUserSuggestedOptions), - 'allowAnswers': serializer.toJson(allowAnswers), - 'isClosed': serializer.toJson(isClosed), - 'answersCount': serializer.toJson(answersCount), - 'voteCountsByOption': - serializer.toJson>(voteCountsByOption), - 'voteCount': serializer.toJson(voteCount), - 'createdById': serializer.toJson(createdById), - 'createdAt': serializer.toJson(createdAt), - 'updatedAt': serializer.toJson(updatedAt), - 'extraData': serializer.toJson?>(extraData), - }; + if (!nullToAbsent || pollId != null) { + map['poll_id'] = Variable(pollId); + } + if (!nullToAbsent || replyCount != null) { + map['reply_count'] = Variable(replyCount); + } + if (!nullToAbsent || showInChannel != null) { + map['show_in_channel'] = Variable(showInChannel); + } + map['shadowed'] = Variable(shadowed); + if (!nullToAbsent || command != null) { + map['command'] = Variable(command); + } + 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 || messageTextUpdatedAt != null) { + map['message_text_updated_at'] = Variable(messageTextUpdatedAt); + } + if (!nullToAbsent || userId != null) { + map['user_id'] = Variable(userId); + } + map['pinned'] = Variable(pinned); + if (!nullToAbsent || pinnedAt != null) { + map['pinned_at'] = Variable(pinnedAt); + } + if (!nullToAbsent || pinExpires != null) { + map['pin_expires'] = Variable(pinExpires); + } + if (!nullToAbsent || pinnedByUserId != null) { + map['pinned_by_user_id'] = Variable(pinnedByUserId); + } + map['channel_cid'] = Variable(channelCid); + if (!nullToAbsent || i18n != null) { + map['i18n'] = + Variable($PinnedMessagesTable.$converteri18n.toSql(i18n)); + } + if (!nullToAbsent || restrictedVisibility != null) { + map['restricted_visibility'] = Variable($PinnedMessagesTable + .$converterrestrictedVisibilityn + .toSql(restrictedVisibility)); + } + if (!nullToAbsent || draftMessageId != null) { + map['draft_message_id'] = Variable(draftMessageId); + } + if (!nullToAbsent || extraData != null) { + map['extra_data'] = Variable( + $PinnedMessagesTable.$converterextraDatan.toSql(extraData)); + } + return map; + } + + factory PinnedMessageEntity.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return PinnedMessageEntity( + id: serializer.fromJson(json['id']), + messageText: serializer.fromJson(json['messageText']), + attachments: serializer.fromJson>(json['attachments']), + state: serializer.fromJson(json['state']), + type: serializer.fromJson(json['type']), + mentionedUsers: serializer.fromJson>(json['mentionedUsers']), + reactionCounts: + serializer.fromJson?>(json['reactionCounts']), + reactionScores: + serializer.fromJson?>(json['reactionScores']), + parentId: serializer.fromJson(json['parentId']), + quotedMessageId: serializer.fromJson(json['quotedMessageId']), + pollId: serializer.fromJson(json['pollId']), + replyCount: serializer.fromJson(json['replyCount']), + showInChannel: serializer.fromJson(json['showInChannel']), + shadowed: serializer.fromJson(json['shadowed']), + command: serializer.fromJson(json['command']), + 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']), + messageTextUpdatedAt: + serializer.fromJson(json['messageTextUpdatedAt']), + userId: serializer.fromJson(json['userId']), + pinned: serializer.fromJson(json['pinned']), + pinnedAt: serializer.fromJson(json['pinnedAt']), + pinExpires: serializer.fromJson(json['pinExpires']), + pinnedByUserId: serializer.fromJson(json['pinnedByUserId']), + channelCid: serializer.fromJson(json['channelCid']), + i18n: serializer.fromJson?>(json['i18n']), + restrictedVisibility: + serializer.fromJson?>(json['restrictedVisibility']), + draftMessageId: serializer.fromJson(json['draftMessageId']), + extraData: serializer.fromJson?>(json['extraData']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'messageText': serializer.toJson(messageText), + 'attachments': serializer.toJson>(attachments), + 'state': serializer.toJson(state), + 'type': serializer.toJson(type), + 'mentionedUsers': serializer.toJson>(mentionedUsers), + 'reactionCounts': serializer.toJson?>(reactionCounts), + 'reactionScores': serializer.toJson?>(reactionScores), + 'parentId': serializer.toJson(parentId), + 'quotedMessageId': serializer.toJson(quotedMessageId), + 'pollId': serializer.toJson(pollId), + 'replyCount': serializer.toJson(replyCount), + 'showInChannel': serializer.toJson(showInChannel), + 'shadowed': serializer.toJson(shadowed), + 'command': serializer.toJson(command), + 'localCreatedAt': serializer.toJson(localCreatedAt), + 'remoteCreatedAt': serializer.toJson(remoteCreatedAt), + 'localUpdatedAt': serializer.toJson(localUpdatedAt), + 'remoteUpdatedAt': serializer.toJson(remoteUpdatedAt), + 'localDeletedAt': serializer.toJson(localDeletedAt), + 'remoteDeletedAt': serializer.toJson(remoteDeletedAt), + 'messageTextUpdatedAt': + serializer.toJson(messageTextUpdatedAt), + 'userId': serializer.toJson(userId), + 'pinned': serializer.toJson(pinned), + 'pinnedAt': serializer.toJson(pinnedAt), + 'pinExpires': serializer.toJson(pinExpires), + 'pinnedByUserId': serializer.toJson(pinnedByUserId), + 'channelCid': serializer.toJson(channelCid), + 'i18n': serializer.toJson?>(i18n), + 'restrictedVisibility': + serializer.toJson?>(restrictedVisibility), + 'draftMessageId': serializer.toJson(draftMessageId), + 'extraData': serializer.toJson?>(extraData), + }; + } + + PinnedMessageEntity copyWith( + {String? id, + Value messageText = const Value.absent(), + List? attachments, + String? state, + String? type, + List? mentionedUsers, + Value?> reactionCounts = const Value.absent(), + Value?> reactionScores = const Value.absent(), + Value parentId = const Value.absent(), + Value quotedMessageId = const Value.absent(), + Value pollId = const Value.absent(), + Value replyCount = const Value.absent(), + Value showInChannel = const Value.absent(), + bool? shadowed, + Value command = 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 messageTextUpdatedAt = const Value.absent(), + Value userId = const Value.absent(), + bool? pinned, + Value pinnedAt = const Value.absent(), + Value pinExpires = const Value.absent(), + Value pinnedByUserId = const Value.absent(), + String? channelCid, + Value?> i18n = const Value.absent(), + Value?> restrictedVisibility = const Value.absent(), + Value draftMessageId = const Value.absent(), + Value?> extraData = const Value.absent()}) => + PinnedMessageEntity( + id: id ?? this.id, + messageText: messageText.present ? messageText.value : this.messageText, + attachments: attachments ?? this.attachments, + state: state ?? this.state, + type: type ?? this.type, + mentionedUsers: mentionedUsers ?? this.mentionedUsers, + reactionCounts: + reactionCounts.present ? reactionCounts.value : this.reactionCounts, + reactionScores: + reactionScores.present ? reactionScores.value : this.reactionScores, + parentId: parentId.present ? parentId.value : this.parentId, + quotedMessageId: quotedMessageId.present + ? quotedMessageId.value + : this.quotedMessageId, + pollId: pollId.present ? pollId.value : this.pollId, + replyCount: replyCount.present ? replyCount.value : this.replyCount, + showInChannel: + showInChannel.present ? showInChannel.value : this.showInChannel, + shadowed: shadowed ?? this.shadowed, + command: command.present ? command.value : this.command, + 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, + messageTextUpdatedAt: messageTextUpdatedAt.present + ? messageTextUpdatedAt.value + : this.messageTextUpdatedAt, + userId: userId.present ? userId.value : this.userId, + pinned: pinned ?? this.pinned, + pinnedAt: pinnedAt.present ? pinnedAt.value : this.pinnedAt, + pinExpires: pinExpires.present ? pinExpires.value : this.pinExpires, + pinnedByUserId: + pinnedByUserId.present ? pinnedByUserId.value : this.pinnedByUserId, + channelCid: channelCid ?? this.channelCid, + i18n: i18n.present ? i18n.value : this.i18n, + restrictedVisibility: restrictedVisibility.present + ? restrictedVisibility.value + : this.restrictedVisibility, + draftMessageId: + draftMessageId.present ? draftMessageId.value : this.draftMessageId, + extraData: extraData.present ? extraData.value : this.extraData, + ); + PinnedMessageEntity copyWithCompanion(PinnedMessagesCompanion data) { + return PinnedMessageEntity( + id: data.id.present ? data.id.value : this.id, + messageText: + data.messageText.present ? data.messageText.value : this.messageText, + attachments: + data.attachments.present ? data.attachments.value : this.attachments, + state: data.state.present ? data.state.value : this.state, + type: data.type.present ? data.type.value : this.type, + mentionedUsers: data.mentionedUsers.present + ? data.mentionedUsers.value + : this.mentionedUsers, + reactionCounts: data.reactionCounts.present + ? data.reactionCounts.value + : this.reactionCounts, + reactionScores: data.reactionScores.present + ? data.reactionScores.value + : this.reactionScores, + parentId: data.parentId.present ? data.parentId.value : this.parentId, + quotedMessageId: data.quotedMessageId.present + ? data.quotedMessageId.value + : this.quotedMessageId, + pollId: data.pollId.present ? data.pollId.value : this.pollId, + replyCount: + data.replyCount.present ? data.replyCount.value : this.replyCount, + showInChannel: data.showInChannel.present + ? data.showInChannel.value + : this.showInChannel, + shadowed: data.shadowed.present ? data.shadowed.value : this.shadowed, + command: data.command.present ? data.command.value : this.command, + localCreatedAt: data.localCreatedAt.present + ? data.localCreatedAt.value + : this.localCreatedAt, + remoteCreatedAt: data.remoteCreatedAt.present + ? data.remoteCreatedAt.value + : this.remoteCreatedAt, + localUpdatedAt: data.localUpdatedAt.present + ? data.localUpdatedAt.value + : this.localUpdatedAt, + remoteUpdatedAt: data.remoteUpdatedAt.present + ? data.remoteUpdatedAt.value + : this.remoteUpdatedAt, + localDeletedAt: data.localDeletedAt.present + ? data.localDeletedAt.value + : this.localDeletedAt, + remoteDeletedAt: data.remoteDeletedAt.present + ? data.remoteDeletedAt.value + : this.remoteDeletedAt, + messageTextUpdatedAt: data.messageTextUpdatedAt.present + ? data.messageTextUpdatedAt.value + : this.messageTextUpdatedAt, + userId: data.userId.present ? data.userId.value : this.userId, + pinned: data.pinned.present ? data.pinned.value : this.pinned, + pinnedAt: data.pinnedAt.present ? data.pinnedAt.value : this.pinnedAt, + pinExpires: + data.pinExpires.present ? data.pinExpires.value : this.pinExpires, + pinnedByUserId: data.pinnedByUserId.present + ? data.pinnedByUserId.value + : this.pinnedByUserId, + channelCid: + data.channelCid.present ? data.channelCid.value : this.channelCid, + i18n: data.i18n.present ? data.i18n.value : this.i18n, + restrictedVisibility: data.restrictedVisibility.present + ? data.restrictedVisibility.value + : this.restrictedVisibility, + draftMessageId: data.draftMessageId.present + ? data.draftMessageId.value + : this.draftMessageId, + extraData: data.extraData.present ? data.extraData.value : this.extraData, + ); + } + + @override + String toString() { + return (StringBuffer('PinnedMessageEntity(') + ..write('id: $id, ') + ..write('messageText: $messageText, ') + ..write('attachments: $attachments, ') + ..write('state: $state, ') + ..write('type: $type, ') + ..write('mentionedUsers: $mentionedUsers, ') + ..write('reactionCounts: $reactionCounts, ') + ..write('reactionScores: $reactionScores, ') + ..write('parentId: $parentId, ') + ..write('quotedMessageId: $quotedMessageId, ') + ..write('pollId: $pollId, ') + ..write('replyCount: $replyCount, ') + ..write('showInChannel: $showInChannel, ') + ..write('shadowed: $shadowed, ') + ..write('command: $command, ') + ..write('localCreatedAt: $localCreatedAt, ') + ..write('remoteCreatedAt: $remoteCreatedAt, ') + ..write('localUpdatedAt: $localUpdatedAt, ') + ..write('remoteUpdatedAt: $remoteUpdatedAt, ') + ..write('localDeletedAt: $localDeletedAt, ') + ..write('remoteDeletedAt: $remoteDeletedAt, ') + ..write('messageTextUpdatedAt: $messageTextUpdatedAt, ') + ..write('userId: $userId, ') + ..write('pinned: $pinned, ') + ..write('pinnedAt: $pinnedAt, ') + ..write('pinExpires: $pinExpires, ') + ..write('pinnedByUserId: $pinnedByUserId, ') + ..write('channelCid: $channelCid, ') + ..write('i18n: $i18n, ') + ..write('restrictedVisibility: $restrictedVisibility, ') + ..write('draftMessageId: $draftMessageId, ') + ..write('extraData: $extraData') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hashAll([ + id, + messageText, + attachments, + state, + type, + mentionedUsers, + reactionCounts, + reactionScores, + parentId, + quotedMessageId, + pollId, + replyCount, + showInChannel, + shadowed, + command, + localCreatedAt, + remoteCreatedAt, + localUpdatedAt, + remoteUpdatedAt, + localDeletedAt, + remoteDeletedAt, + messageTextUpdatedAt, + userId, + pinned, + pinnedAt, + pinExpires, + pinnedByUserId, + channelCid, + i18n, + restrictedVisibility, + draftMessageId, + extraData + ]); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is PinnedMessageEntity && + other.id == this.id && + other.messageText == this.messageText && + other.attachments == this.attachments && + other.state == this.state && + other.type == this.type && + other.mentionedUsers == this.mentionedUsers && + other.reactionCounts == this.reactionCounts && + other.reactionScores == this.reactionScores && + other.parentId == this.parentId && + other.quotedMessageId == this.quotedMessageId && + other.pollId == this.pollId && + other.replyCount == this.replyCount && + other.showInChannel == this.showInChannel && + other.shadowed == this.shadowed && + other.command == this.command && + 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.messageTextUpdatedAt == this.messageTextUpdatedAt && + other.userId == this.userId && + other.pinned == this.pinned && + other.pinnedAt == this.pinnedAt && + other.pinExpires == this.pinExpires && + other.pinnedByUserId == this.pinnedByUserId && + other.channelCid == this.channelCid && + other.i18n == this.i18n && + other.restrictedVisibility == this.restrictedVisibility && + other.draftMessageId == this.draftMessageId && + other.extraData == this.extraData); +} + +class PinnedMessagesCompanion extends UpdateCompanion { + final Value id; + final Value messageText; + final Value> attachments; + final Value state; + final Value type; + final Value> mentionedUsers; + final Value?> reactionCounts; + final Value?> reactionScores; + final Value parentId; + final Value quotedMessageId; + final Value pollId; + final Value replyCount; + final Value showInChannel; + final Value shadowed; + final Value command; + final Value localCreatedAt; + final Value remoteCreatedAt; + final Value localUpdatedAt; + final Value remoteUpdatedAt; + final Value localDeletedAt; + final Value remoteDeletedAt; + final Value messageTextUpdatedAt; + final Value userId; + final Value pinned; + final Value pinnedAt; + final Value pinExpires; + final Value pinnedByUserId; + final Value channelCid; + final Value?> i18n; + final Value?> restrictedVisibility; + final Value draftMessageId; + final Value?> extraData; + final Value rowid; + const PinnedMessagesCompanion({ + this.id = const Value.absent(), + this.messageText = const Value.absent(), + this.attachments = const Value.absent(), + this.state = const Value.absent(), + this.type = const Value.absent(), + this.mentionedUsers = const Value.absent(), + this.reactionCounts = const Value.absent(), + this.reactionScores = const Value.absent(), + this.parentId = const Value.absent(), + this.quotedMessageId = const Value.absent(), + this.pollId = const Value.absent(), + this.replyCount = const Value.absent(), + this.showInChannel = const Value.absent(), + this.shadowed = const Value.absent(), + this.command = 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.messageTextUpdatedAt = const Value.absent(), + this.userId = const Value.absent(), + this.pinned = const Value.absent(), + this.pinnedAt = const Value.absent(), + this.pinExpires = const Value.absent(), + this.pinnedByUserId = const Value.absent(), + this.channelCid = const Value.absent(), + this.i18n = const Value.absent(), + this.restrictedVisibility = const Value.absent(), + this.draftMessageId = const Value.absent(), + this.extraData = const Value.absent(), + this.rowid = const Value.absent(), + }); + PinnedMessagesCompanion.insert({ + required String id, + this.messageText = const Value.absent(), + required List attachments, + required String state, + this.type = const Value.absent(), + required List mentionedUsers, + this.reactionCounts = const Value.absent(), + this.reactionScores = const Value.absent(), + this.parentId = const Value.absent(), + this.quotedMessageId = const Value.absent(), + this.pollId = const Value.absent(), + this.replyCount = const Value.absent(), + this.showInChannel = const Value.absent(), + this.shadowed = const Value.absent(), + this.command = 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.messageTextUpdatedAt = const Value.absent(), + this.userId = const Value.absent(), + this.pinned = const Value.absent(), + this.pinnedAt = const Value.absent(), + this.pinExpires = const Value.absent(), + this.pinnedByUserId = const Value.absent(), + required String channelCid, + this.i18n = const Value.absent(), + this.restrictedVisibility = const Value.absent(), + this.draftMessageId = const Value.absent(), + this.extraData = const Value.absent(), + this.rowid = const Value.absent(), + }) : id = Value(id), + attachments = Value(attachments), + state = Value(state), + mentionedUsers = Value(mentionedUsers), + channelCid = Value(channelCid); + static Insertable custom({ + Expression? id, + Expression? messageText, + Expression? attachments, + Expression? state, + Expression? type, + Expression? mentionedUsers, + Expression? reactionCounts, + Expression? reactionScores, + Expression? parentId, + Expression? quotedMessageId, + Expression? pollId, + Expression? replyCount, + Expression? showInChannel, + Expression? shadowed, + Expression? command, + Expression? localCreatedAt, + Expression? remoteCreatedAt, + Expression? localUpdatedAt, + Expression? remoteUpdatedAt, + Expression? localDeletedAt, + Expression? remoteDeletedAt, + Expression? messageTextUpdatedAt, + Expression? userId, + Expression? pinned, + Expression? pinnedAt, + Expression? pinExpires, + Expression? pinnedByUserId, + Expression? channelCid, + Expression? i18n, + Expression? restrictedVisibility, + Expression? draftMessageId, + Expression? extraData, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (messageText != null) 'message_text': messageText, + if (attachments != null) 'attachments': attachments, + if (state != null) 'state': state, + if (type != null) 'type': type, + if (mentionedUsers != null) 'mentioned_users': mentionedUsers, + if (reactionCounts != null) 'reaction_counts': reactionCounts, + if (reactionScores != null) 'reaction_scores': reactionScores, + if (parentId != null) 'parent_id': parentId, + if (quotedMessageId != null) 'quoted_message_id': quotedMessageId, + if (pollId != null) 'poll_id': pollId, + if (replyCount != null) 'reply_count': replyCount, + if (showInChannel != null) 'show_in_channel': showInChannel, + if (shadowed != null) 'shadowed': shadowed, + if (command != null) 'command': command, + 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 (messageTextUpdatedAt != null) + 'message_text_updated_at': messageTextUpdatedAt, + if (userId != null) 'user_id': userId, + if (pinned != null) 'pinned': pinned, + if (pinnedAt != null) 'pinned_at': pinnedAt, + if (pinExpires != null) 'pin_expires': pinExpires, + if (pinnedByUserId != null) 'pinned_by_user_id': pinnedByUserId, + if (channelCid != null) 'channel_cid': channelCid, + if (i18n != null) 'i18n': i18n, + if (restrictedVisibility != null) + 'restricted_visibility': restrictedVisibility, + if (draftMessageId != null) 'draft_message_id': draftMessageId, + if (extraData != null) 'extra_data': extraData, + if (rowid != null) 'rowid': rowid, + }); + } + + PinnedMessagesCompanion copyWith( + {Value? id, + Value? messageText, + Value>? attachments, + Value? state, + Value? type, + Value>? mentionedUsers, + Value?>? reactionCounts, + Value?>? reactionScores, + Value? parentId, + Value? quotedMessageId, + Value? pollId, + Value? replyCount, + Value? showInChannel, + Value? shadowed, + Value? command, + Value? localCreatedAt, + Value? remoteCreatedAt, + Value? localUpdatedAt, + Value? remoteUpdatedAt, + Value? localDeletedAt, + Value? remoteDeletedAt, + Value? messageTextUpdatedAt, + Value? userId, + Value? pinned, + Value? pinnedAt, + Value? pinExpires, + Value? pinnedByUserId, + Value? channelCid, + Value?>? i18n, + Value?>? restrictedVisibility, + Value? draftMessageId, + Value?>? extraData, + Value? rowid}) { + return PinnedMessagesCompanion( + id: id ?? this.id, + messageText: messageText ?? this.messageText, + attachments: attachments ?? this.attachments, + state: state ?? this.state, + type: type ?? this.type, + mentionedUsers: mentionedUsers ?? this.mentionedUsers, + reactionCounts: reactionCounts ?? this.reactionCounts, + reactionScores: reactionScores ?? this.reactionScores, + parentId: parentId ?? this.parentId, + quotedMessageId: quotedMessageId ?? this.quotedMessageId, + pollId: pollId ?? this.pollId, + replyCount: replyCount ?? this.replyCount, + showInChannel: showInChannel ?? this.showInChannel, + shadowed: shadowed ?? this.shadowed, + command: command ?? this.command, + localCreatedAt: localCreatedAt ?? this.localCreatedAt, + remoteCreatedAt: remoteCreatedAt ?? this.remoteCreatedAt, + localUpdatedAt: localUpdatedAt ?? this.localUpdatedAt, + remoteUpdatedAt: remoteUpdatedAt ?? this.remoteUpdatedAt, + localDeletedAt: localDeletedAt ?? this.localDeletedAt, + remoteDeletedAt: remoteDeletedAt ?? this.remoteDeletedAt, + messageTextUpdatedAt: messageTextUpdatedAt ?? this.messageTextUpdatedAt, + userId: userId ?? this.userId, + pinned: pinned ?? this.pinned, + pinnedAt: pinnedAt ?? this.pinnedAt, + pinExpires: pinExpires ?? this.pinExpires, + pinnedByUserId: pinnedByUserId ?? this.pinnedByUserId, + channelCid: channelCid ?? this.channelCid, + i18n: i18n ?? this.i18n, + restrictedVisibility: restrictedVisibility ?? this.restrictedVisibility, + draftMessageId: draftMessageId ?? this.draftMessageId, + extraData: extraData ?? this.extraData, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (messageText.present) { + map['message_text'] = Variable(messageText.value); + } + if (attachments.present) { + map['attachments'] = Variable( + $PinnedMessagesTable.$converterattachments.toSql(attachments.value)); + } + if (state.present) { + map['state'] = Variable(state.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (mentionedUsers.present) { + map['mentioned_users'] = Variable($PinnedMessagesTable + .$convertermentionedUsers + .toSql(mentionedUsers.value)); + } + if (reactionCounts.present) { + map['reaction_counts'] = Variable($PinnedMessagesTable + .$converterreactionCountsn + .toSql(reactionCounts.value)); + } + if (reactionScores.present) { + map['reaction_scores'] = Variable($PinnedMessagesTable + .$converterreactionScoresn + .toSql(reactionScores.value)); + } + if (parentId.present) { + map['parent_id'] = Variable(parentId.value); + } + if (quotedMessageId.present) { + map['quoted_message_id'] = Variable(quotedMessageId.value); + } + if (pollId.present) { + map['poll_id'] = Variable(pollId.value); + } + if (replyCount.present) { + map['reply_count'] = Variable(replyCount.value); + } + if (showInChannel.present) { + map['show_in_channel'] = Variable(showInChannel.value); + } + if (shadowed.present) { + map['shadowed'] = Variable(shadowed.value); + } + if (command.present) { + map['command'] = Variable(command.value); + } + if (localCreatedAt.present) { + map['local_created_at'] = Variable(localCreatedAt.value); + } + if (remoteCreatedAt.present) { + map['remote_created_at'] = Variable(remoteCreatedAt.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 (messageTextUpdatedAt.present) { + map['message_text_updated_at'] = + Variable(messageTextUpdatedAt.value); + } + if (userId.present) { + map['user_id'] = Variable(userId.value); + } + if (pinned.present) { + map['pinned'] = Variable(pinned.value); + } + if (pinnedAt.present) { + map['pinned_at'] = Variable(pinnedAt.value); + } + if (pinExpires.present) { + map['pin_expires'] = Variable(pinExpires.value); + } + if (pinnedByUserId.present) { + map['pinned_by_user_id'] = Variable(pinnedByUserId.value); + } + if (channelCid.present) { + map['channel_cid'] = Variable(channelCid.value); + } + if (i18n.present) { + map['i18n'] = Variable( + $PinnedMessagesTable.$converteri18n.toSql(i18n.value)); + } + if (restrictedVisibility.present) { + map['restricted_visibility'] = Variable($PinnedMessagesTable + .$converterrestrictedVisibilityn + .toSql(restrictedVisibility.value)); + } + if (draftMessageId.present) { + map['draft_message_id'] = Variable(draftMessageId.value); + } + if (extraData.present) { + map['extra_data'] = Variable( + $PinnedMessagesTable.$converterextraDatan.toSql(extraData.value)); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('PinnedMessagesCompanion(') + ..write('id: $id, ') + ..write('messageText: $messageText, ') + ..write('attachments: $attachments, ') + ..write('state: $state, ') + ..write('type: $type, ') + ..write('mentionedUsers: $mentionedUsers, ') + ..write('reactionCounts: $reactionCounts, ') + ..write('reactionScores: $reactionScores, ') + ..write('parentId: $parentId, ') + ..write('quotedMessageId: $quotedMessageId, ') + ..write('pollId: $pollId, ') + ..write('replyCount: $replyCount, ') + ..write('showInChannel: $showInChannel, ') + ..write('shadowed: $shadowed, ') + ..write('command: $command, ') + ..write('localCreatedAt: $localCreatedAt, ') + ..write('remoteCreatedAt: $remoteCreatedAt, ') + ..write('localUpdatedAt: $localUpdatedAt, ') + ..write('remoteUpdatedAt: $remoteUpdatedAt, ') + ..write('localDeletedAt: $localDeletedAt, ') + ..write('remoteDeletedAt: $remoteDeletedAt, ') + ..write('messageTextUpdatedAt: $messageTextUpdatedAt, ') + ..write('userId: $userId, ') + ..write('pinned: $pinned, ') + ..write('pinnedAt: $pinnedAt, ') + ..write('pinExpires: $pinExpires, ') + ..write('pinnedByUserId: $pinnedByUserId, ') + ..write('channelCid: $channelCid, ') + ..write('i18n: $i18n, ') + ..write('restrictedVisibility: $restrictedVisibility, ') + ..write('draftMessageId: $draftMessageId, ') + ..write('extraData: $extraData, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $PollsTable extends Polls with TableInfo<$PollsTable, PollEntity> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $PollsTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + static const VerificationMeta _nameMeta = const VerificationMeta('name'); + @override + late final GeneratedColumn name = GeneratedColumn( + 'name', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + static const VerificationMeta _descriptionMeta = + const VerificationMeta('description'); + @override + late final GeneratedColumn description = GeneratedColumn( + 'description', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + @override + late final GeneratedColumnWithTypeConverter, String> options = + GeneratedColumn('options', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true) + .withConverter>($PollsTable.$converteroptions); + @override + late final GeneratedColumnWithTypeConverter + votingVisibility = GeneratedColumn( + 'voting_visibility', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const Constant('public')) + .withConverter( + $PollsTable.$convertervotingVisibility); + static const VerificationMeta _enforceUniqueVoteMeta = + const VerificationMeta('enforceUniqueVote'); + @override + late final GeneratedColumn enforceUniqueVote = GeneratedColumn( + 'enforce_unique_vote', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("enforce_unique_vote" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _maxVotesAllowedMeta = + const VerificationMeta('maxVotesAllowed'); + @override + late final GeneratedColumn maxVotesAllowed = GeneratedColumn( + 'max_votes_allowed', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + static const VerificationMeta _allowUserSuggestedOptionsMeta = + const VerificationMeta('allowUserSuggestedOptions'); + @override + late final GeneratedColumn allowUserSuggestedOptions = + GeneratedColumn('allow_user_suggested_options', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("allow_user_suggested_options" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _allowAnswersMeta = + const VerificationMeta('allowAnswers'); + @override + late final GeneratedColumn allowAnswers = GeneratedColumn( + 'allow_answers', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("allow_answers" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _isClosedMeta = + const VerificationMeta('isClosed'); + @override + late final GeneratedColumn isClosed = GeneratedColumn( + 'is_closed', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("is_closed" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _answersCountMeta = + const VerificationMeta('answersCount'); + @override + late final GeneratedColumn answersCount = GeneratedColumn( + 'answers_count', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const Constant(0)); + @override + late final GeneratedColumnWithTypeConverter, String> + voteCountsByOption = GeneratedColumn( + 'vote_counts_by_option', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true) + .withConverter>( + $PollsTable.$convertervoteCountsByOption); + static const VerificationMeta _voteCountMeta = + const VerificationMeta('voteCount'); + @override + late final GeneratedColumn voteCount = GeneratedColumn( + 'vote_count', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const Constant(0)); + static const VerificationMeta _createdByIdMeta = + const VerificationMeta('createdById'); + @override + late final GeneratedColumn createdById = GeneratedColumn( + 'created_by_id', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _createdAtMeta = + const VerificationMeta('createdAt'); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: currentDateAndTime); + static const VerificationMeta _updatedAtMeta = + const VerificationMeta('updatedAt'); + @override + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: currentDateAndTime); + @override + late final GeneratedColumnWithTypeConverter?, String> + extraData = GeneratedColumn('extra_data', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false) + .withConverter?>( + $PollsTable.$converterextraDatan); + @override + List get $columns => [ + id, + name, + description, + options, + votingVisibility, + enforceUniqueVote, + maxVotesAllowed, + allowUserSuggestedOptions, + allowAnswers, + isClosed, + answersCount, + voteCountsByOption, + voteCount, + createdById, + createdAt, + updatedAt, + extraData + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'polls'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } else if (isInserting) { + context.missing(_idMeta); + } + if (data.containsKey('name')) { + context.handle( + _nameMeta, name.isAcceptableOrUnknown(data['name']!, _nameMeta)); + } else if (isInserting) { + context.missing(_nameMeta); + } + if (data.containsKey('description')) { + context.handle( + _descriptionMeta, + description.isAcceptableOrUnknown( + data['description']!, _descriptionMeta)); + } + if (data.containsKey('enforce_unique_vote')) { + context.handle( + _enforceUniqueVoteMeta, + enforceUniqueVote.isAcceptableOrUnknown( + data['enforce_unique_vote']!, _enforceUniqueVoteMeta)); + } + if (data.containsKey('max_votes_allowed')) { + context.handle( + _maxVotesAllowedMeta, + maxVotesAllowed.isAcceptableOrUnknown( + data['max_votes_allowed']!, _maxVotesAllowedMeta)); + } + if (data.containsKey('allow_user_suggested_options')) { + context.handle( + _allowUserSuggestedOptionsMeta, + allowUserSuggestedOptions.isAcceptableOrUnknown( + data['allow_user_suggested_options']!, + _allowUserSuggestedOptionsMeta)); + } + if (data.containsKey('allow_answers')) { + context.handle( + _allowAnswersMeta, + allowAnswers.isAcceptableOrUnknown( + data['allow_answers']!, _allowAnswersMeta)); + } + if (data.containsKey('is_closed')) { + context.handle(_isClosedMeta, + isClosed.isAcceptableOrUnknown(data['is_closed']!, _isClosedMeta)); + } + if (data.containsKey('answers_count')) { + context.handle( + _answersCountMeta, + answersCount.isAcceptableOrUnknown( + data['answers_count']!, _answersCountMeta)); + } + if (data.containsKey('vote_count')) { + context.handle(_voteCountMeta, + voteCount.isAcceptableOrUnknown(data['vote_count']!, _voteCountMeta)); + } + if (data.containsKey('created_by_id')) { + context.handle( + _createdByIdMeta, + createdById.isAcceptableOrUnknown( + data['created_by_id']!, _createdByIdMeta)); + } + if (data.containsKey('created_at')) { + context.handle(_createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); + } + if (data.containsKey('updated_at')) { + context.handle(_updatedAtMeta, + updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta)); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + PollEntity map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return PollEntity( + id: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}id'])!, + name: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}name'])!, + description: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}description']), + options: $PollsTable.$converteroptions.fromSql(attachedDatabase + .typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}options'])!), + votingVisibility: $PollsTable.$convertervotingVisibility.fromSql( + attachedDatabase.typeMapping.read(DriftSqlType.string, + data['${effectivePrefix}voting_visibility'])!), + enforceUniqueVote: attachedDatabase.typeMapping.read( + DriftSqlType.bool, data['${effectivePrefix}enforce_unique_vote'])!, + maxVotesAllowed: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}max_votes_allowed']), + allowUserSuggestedOptions: attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}allow_user_suggested_options'])!, + allowAnswers: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}allow_answers'])!, + isClosed: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}is_closed'])!, + answersCount: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}answers_count'])!, + voteCountsByOption: $PollsTable.$convertervoteCountsByOption.fromSql( + attachedDatabase.typeMapping.read(DriftSqlType.string, + data['${effectivePrefix}vote_counts_by_option'])!), + voteCount: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}vote_count'])!, + createdById: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}created_by_id']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + updatedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!, + extraData: $PollsTable.$converterextraDatan.fromSql(attachedDatabase + .typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}extra_data'])), + ); + } + + @override + $PollsTable createAlias(String alias) { + return $PollsTable(attachedDatabase, alias); + } + + static TypeConverter, String> $converteroptions = + ListConverter(); + static TypeConverter $convertervotingVisibility = + const VotingVisibilityConverter(); + static TypeConverter, String> $convertervoteCountsByOption = + MapConverter(); + static TypeConverter, String> $converterextraData = + MapConverter(); + static TypeConverter?, String?> $converterextraDatan = + NullAwareTypeConverter.wrap($converterextraData); +} + +class PollEntity extends DataClass implements Insertable { + /// The unique identifier of the poll. + final String id; + + /// The name of the poll. + final String name; + + /// The description of the poll. + final String? description; + + /// The list of options available for the poll. + final List options; + + /// Represents the visibility of the voting process. + /// + /// Defaults to 'public'. + final VotingVisibility votingVisibility; + + /// If true, only unique votes are allowed. + /// + /// Defaults to false. + final bool enforceUniqueVote; + + /// The maximum number of votes allowed per user. + final int? maxVotesAllowed; + + /// If true, users can suggest their own options. + /// + /// Defaults to false. + final bool allowUserSuggestedOptions; + + /// If true, users can provide their own answers/comments. + /// + /// Defaults to false. + final bool allowAnswers; + + /// Indicates if the poll is closed. + final bool isClosed; + + /// The total number of answers received by the poll. + final int answersCount; + + /// Map of vote counts by option. + final Map voteCountsByOption; + + /// The total number of votes received by the poll. + final int voteCount; + + /// The id of the user who created the poll. + final String? createdById; + + /// The date when the poll was created. + final DateTime createdAt; + + /// The date when the poll was last updated. + final DateTime updatedAt; + + /// Map of custom poll extraData + final Map? extraData; + const PollEntity( + {required this.id, + required this.name, + this.description, + required this.options, + required this.votingVisibility, + required this.enforceUniqueVote, + this.maxVotesAllowed, + required this.allowUserSuggestedOptions, + required this.allowAnswers, + required this.isClosed, + required this.answersCount, + required this.voteCountsByOption, + required this.voteCount, + this.createdById, + required this.createdAt, + required this.updatedAt, + this.extraData}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['name'] = Variable(name); + if (!nullToAbsent || description != null) { + map['description'] = Variable(description); + } + { + map['options'] = + Variable($PollsTable.$converteroptions.toSql(options)); + } + { + map['voting_visibility'] = Variable( + $PollsTable.$convertervotingVisibility.toSql(votingVisibility)); + } + map['enforce_unique_vote'] = Variable(enforceUniqueVote); + if (!nullToAbsent || maxVotesAllowed != null) { + map['max_votes_allowed'] = Variable(maxVotesAllowed); + } + map['allow_user_suggested_options'] = + Variable(allowUserSuggestedOptions); + map['allow_answers'] = Variable(allowAnswers); + map['is_closed'] = Variable(isClosed); + map['answers_count'] = Variable(answersCount); + { + map['vote_counts_by_option'] = Variable( + $PollsTable.$convertervoteCountsByOption.toSql(voteCountsByOption)); + } + map['vote_count'] = Variable(voteCount); + if (!nullToAbsent || createdById != null) { + map['created_by_id'] = Variable(createdById); + } + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || extraData != null) { + map['extra_data'] = + Variable($PollsTable.$converterextraDatan.toSql(extraData)); + } + return map; + } + + factory PollEntity.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return PollEntity( + id: serializer.fromJson(json['id']), + name: serializer.fromJson(json['name']), + description: serializer.fromJson(json['description']), + options: serializer.fromJson>(json['options']), + votingVisibility: + serializer.fromJson(json['votingVisibility']), + enforceUniqueVote: serializer.fromJson(json['enforceUniqueVote']), + maxVotesAllowed: serializer.fromJson(json['maxVotesAllowed']), + allowUserSuggestedOptions: + serializer.fromJson(json['allowUserSuggestedOptions']), + allowAnswers: serializer.fromJson(json['allowAnswers']), + isClosed: serializer.fromJson(json['isClosed']), + answersCount: serializer.fromJson(json['answersCount']), + voteCountsByOption: + serializer.fromJson>(json['voteCountsByOption']), + voteCount: serializer.fromJson(json['voteCount']), + createdById: serializer.fromJson(json['createdById']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + extraData: serializer.fromJson?>(json['extraData']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'name': serializer.toJson(name), + 'description': serializer.toJson(description), + 'options': serializer.toJson>(options), + 'votingVisibility': serializer.toJson(votingVisibility), + 'enforceUniqueVote': serializer.toJson(enforceUniqueVote), + 'maxVotesAllowed': serializer.toJson(maxVotesAllowed), + 'allowUserSuggestedOptions': + serializer.toJson(allowUserSuggestedOptions), + 'allowAnswers': serializer.toJson(allowAnswers), + 'isClosed': serializer.toJson(isClosed), + 'answersCount': serializer.toJson(answersCount), + 'voteCountsByOption': + serializer.toJson>(voteCountsByOption), + 'voteCount': serializer.toJson(voteCount), + 'createdById': serializer.toJson(createdById), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'extraData': serializer.toJson?>(extraData), + }; } PollEntity copyWith( @@ -4901,8 +5633,6 @@ class $PinnedMessageReactionsTable extends PinnedMessageReactions type: DriftSqlType.int, requiredDuringInsert: false, defaultValue: const Constant(0)); - static const VerificationMeta _extraDataMeta = - const VerificationMeta('extraData'); @override late final GeneratedColumnWithTypeConverter?, String> extraData = GeneratedColumn('extra_data', aliasedName, true, @@ -4949,7 +5679,6 @@ class $PinnedMessageReactionsTable extends PinnedMessageReactions context.handle( _scoreMeta, score.isAcceptableOrUnknown(data['score']!, _scoreMeta)); } - context.handle(_extraDataMeta, const VerificationResult.success()); return context; } @@ -5260,8 +5989,6 @@ class $ReactionsTable extends Reactions type: DriftSqlType.int, requiredDuringInsert: false, defaultValue: const Constant(0)); - static const VerificationMeta _extraDataMeta = - const VerificationMeta('extraData'); @override late final GeneratedColumnWithTypeConverter?, String> extraData = GeneratedColumn('extra_data', aliasedName, true, @@ -5307,7 +6034,6 @@ class $ReactionsTable extends Reactions context.handle( _scoreMeta, score.isAcceptableOrUnknown(data['score']!, _scoreMeta)); } - context.handle(_extraDataMeta, const VerificationResult.success()); return context; } @@ -5630,8 +6356,6 @@ class $UsersTable extends Users with TableInfo<$UsersTable, UserEntity> { defaultConstraints: GeneratedColumn.constraintIsAlways('CHECK ("banned" IN (0, 1))'), defaultValue: const Constant(false)); - static const VerificationMeta _extraDataMeta = - const VerificationMeta('extraData'); @override late final GeneratedColumnWithTypeConverter, String> extraData = GeneratedColumn('extra_data', aliasedName, false, @@ -5694,7 +6418,6 @@ class $UsersTable extends Users with TableInfo<$UsersTable, UserEntity> { context.handle(_bannedMeta, banned.isAcceptableOrUnknown(data['banned']!, _bannedMeta)); } - context.handle(_extraDataMeta, const VerificationResult.success()); return context; } @@ -6136,8 +6859,6 @@ class $MembersTable extends Members defaultConstraints: GeneratedColumn.constraintIsAlways( 'CHECK ("is_moderator" IN (0, 1))'), defaultValue: const Constant(false)); - static const VerificationMeta _extraDataMeta = - const VerificationMeta('extraData'); @override late final GeneratedColumnWithTypeConverter?, String> extraData = GeneratedColumn('extra_data', aliasedName, true, @@ -6249,7 +6970,6 @@ class $MembersTable extends Members isModerator.isAcceptableOrUnknown( data['is_moderator']!, _isModeratorMeta)); } - context.handle(_extraDataMeta, const VerificationResult.success()); if (data.containsKey('created_at')) { context.handle(_createdAtMeta, createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); @@ -6991,58 +7711,265 @@ class ReadsCompanion extends UpdateCompanion { final Value lastRead; final Value userId; final Value channelCid; - final Value unreadMessages; - final Value lastReadMessageId; + final Value unreadMessages; + final Value lastReadMessageId; + final Value rowid; + const ReadsCompanion({ + this.lastRead = const Value.absent(), + this.userId = const Value.absent(), + this.channelCid = const Value.absent(), + this.unreadMessages = const Value.absent(), + this.lastReadMessageId = const Value.absent(), + this.rowid = const Value.absent(), + }); + ReadsCompanion.insert({ + required DateTime lastRead, + required String userId, + required String channelCid, + this.unreadMessages = const Value.absent(), + this.lastReadMessageId = const Value.absent(), + this.rowid = const Value.absent(), + }) : lastRead = Value(lastRead), + userId = Value(userId), + channelCid = Value(channelCid); + static Insertable custom({ + Expression? lastRead, + Expression? userId, + Expression? channelCid, + Expression? unreadMessages, + Expression? lastReadMessageId, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (lastRead != null) 'last_read': lastRead, + if (userId != null) 'user_id': userId, + if (channelCid != null) 'channel_cid': channelCid, + if (unreadMessages != null) 'unread_messages': unreadMessages, + if (lastReadMessageId != null) 'last_read_message_id': lastReadMessageId, + if (rowid != null) 'rowid': rowid, + }); + } + + ReadsCompanion copyWith( + {Value? lastRead, + Value? userId, + Value? channelCid, + Value? unreadMessages, + Value? lastReadMessageId, + Value? rowid}) { + return ReadsCompanion( + lastRead: lastRead ?? this.lastRead, + userId: userId ?? this.userId, + channelCid: channelCid ?? this.channelCid, + unreadMessages: unreadMessages ?? this.unreadMessages, + lastReadMessageId: lastReadMessageId ?? this.lastReadMessageId, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (lastRead.present) { + map['last_read'] = Variable(lastRead.value); + } + if (userId.present) { + map['user_id'] = Variable(userId.value); + } + if (channelCid.present) { + map['channel_cid'] = Variable(channelCid.value); + } + if (unreadMessages.present) { + map['unread_messages'] = Variable(unreadMessages.value); + } + if (lastReadMessageId.present) { + map['last_read_message_id'] = Variable(lastReadMessageId.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ReadsCompanion(') + ..write('lastRead: $lastRead, ') + ..write('userId: $userId, ') + ..write('channelCid: $channelCid, ') + ..write('unreadMessages: $unreadMessages, ') + ..write('lastReadMessageId: $lastReadMessageId, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $ChannelQueriesTable extends ChannelQueries + with TableInfo<$ChannelQueriesTable, ChannelQueryEntity> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $ChannelQueriesTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _queryHashMeta = + const VerificationMeta('queryHash'); + @override + late final GeneratedColumn queryHash = GeneratedColumn( + 'query_hash', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + static const VerificationMeta _channelCidMeta = + const VerificationMeta('channelCid'); + @override + late final GeneratedColumn channelCid = GeneratedColumn( + 'channel_cid', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + @override + List get $columns => [queryHash, channelCid]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'channel_queries'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('query_hash')) { + context.handle(_queryHashMeta, + queryHash.isAcceptableOrUnknown(data['query_hash']!, _queryHashMeta)); + } else if (isInserting) { + context.missing(_queryHashMeta); + } + if (data.containsKey('channel_cid')) { + context.handle( + _channelCidMeta, + channelCid.isAcceptableOrUnknown( + data['channel_cid']!, _channelCidMeta)); + } else if (isInserting) { + context.missing(_channelCidMeta); + } + return context; + } + + @override + Set get $primaryKey => {queryHash, channelCid}; + @override + ChannelQueryEntity map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ChannelQueryEntity( + queryHash: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}query_hash'])!, + channelCid: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}channel_cid'])!, + ); + } + + @override + $ChannelQueriesTable createAlias(String alias) { + return $ChannelQueriesTable(attachedDatabase, alias); + } +} + +class ChannelQueryEntity extends DataClass + implements Insertable { + /// The unique hash of this query + final String queryHash; + + /// The channel cid of this query + final String channelCid; + const ChannelQueryEntity({required this.queryHash, required this.channelCid}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['query_hash'] = Variable(queryHash); + map['channel_cid'] = Variable(channelCid); + return map; + } + + factory ChannelQueryEntity.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ChannelQueryEntity( + queryHash: serializer.fromJson(json['queryHash']), + channelCid: serializer.fromJson(json['channelCid']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'queryHash': serializer.toJson(queryHash), + 'channelCid': serializer.toJson(channelCid), + }; + } + + ChannelQueryEntity copyWith({String? queryHash, String? channelCid}) => + ChannelQueryEntity( + queryHash: queryHash ?? this.queryHash, + channelCid: channelCid ?? this.channelCid, + ); + ChannelQueryEntity copyWithCompanion(ChannelQueriesCompanion data) { + return ChannelQueryEntity( + queryHash: data.queryHash.present ? data.queryHash.value : this.queryHash, + channelCid: + data.channelCid.present ? data.channelCid.value : this.channelCid, + ); + } + + @override + String toString() { + return (StringBuffer('ChannelQueryEntity(') + ..write('queryHash: $queryHash, ') + ..write('channelCid: $channelCid') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(queryHash, channelCid); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ChannelQueryEntity && + other.queryHash == this.queryHash && + other.channelCid == this.channelCid); +} + +class ChannelQueriesCompanion extends UpdateCompanion { + final Value queryHash; + final Value channelCid; final Value rowid; - const ReadsCompanion({ - this.lastRead = const Value.absent(), - this.userId = const Value.absent(), + const ChannelQueriesCompanion({ + this.queryHash = const Value.absent(), this.channelCid = const Value.absent(), - this.unreadMessages = const Value.absent(), - this.lastReadMessageId = const Value.absent(), this.rowid = const Value.absent(), }); - ReadsCompanion.insert({ - required DateTime lastRead, - required String userId, + ChannelQueriesCompanion.insert({ + required String queryHash, required String channelCid, - this.unreadMessages = const Value.absent(), - this.lastReadMessageId = const Value.absent(), this.rowid = const Value.absent(), - }) : lastRead = Value(lastRead), - userId = Value(userId), + }) : queryHash = Value(queryHash), channelCid = Value(channelCid); - static Insertable custom({ - Expression? lastRead, - Expression? userId, + static Insertable custom({ + Expression? queryHash, Expression? channelCid, - Expression? unreadMessages, - Expression? lastReadMessageId, Expression? rowid, }) { return RawValuesInsertable({ - if (lastRead != null) 'last_read': lastRead, - if (userId != null) 'user_id': userId, + if (queryHash != null) 'query_hash': queryHash, if (channelCid != null) 'channel_cid': channelCid, - if (unreadMessages != null) 'unread_messages': unreadMessages, - if (lastReadMessageId != null) 'last_read_message_id': lastReadMessageId, if (rowid != null) 'rowid': rowid, }); } - ReadsCompanion copyWith( - {Value? lastRead, - Value? userId, + ChannelQueriesCompanion copyWith( + {Value? queryHash, Value? channelCid, - Value? unreadMessages, - Value? lastReadMessageId, Value? rowid}) { - return ReadsCompanion( - lastRead: lastRead ?? this.lastRead, - userId: userId ?? this.userId, + return ChannelQueriesCompanion( + queryHash: queryHash ?? this.queryHash, channelCid: channelCid ?? this.channelCid, - unreadMessages: unreadMessages ?? this.unreadMessages, - lastReadMessageId: lastReadMessageId ?? this.lastReadMessageId, rowid: rowid ?? this.rowid, ); } @@ -7050,21 +7977,12 @@ class ReadsCompanion extends UpdateCompanion { @override Map toColumns(bool nullToAbsent) { final map = {}; - if (lastRead.present) { - map['last_read'] = Variable(lastRead.value); - } - if (userId.present) { - map['user_id'] = Variable(userId.value); + if (queryHash.present) { + map['query_hash'] = Variable(queryHash.value); } if (channelCid.present) { map['channel_cid'] = Variable(channelCid.value); } - if (unreadMessages.present) { - map['unread_messages'] = Variable(unreadMessages.value); - } - if (lastReadMessageId.present) { - map['last_read_message_id'] = Variable(lastReadMessageId.value); - } if (rowid.present) { map['rowid'] = Variable(rowid.value); } @@ -7073,1049 +7991,1729 @@ class ReadsCompanion extends UpdateCompanion { @override String toString() { - return (StringBuffer('ReadsCompanion(') - ..write('lastRead: $lastRead, ') - ..write('userId: $userId, ') + return (StringBuffer('ChannelQueriesCompanion(') + ..write('queryHash: $queryHash, ') ..write('channelCid: $channelCid, ') - ..write('unreadMessages: $unreadMessages, ') - ..write('lastReadMessageId: $lastReadMessageId, ') ..write('rowid: $rowid') ..write(')')) .toString(); } } -class $ChannelQueriesTable extends ChannelQueries - with TableInfo<$ChannelQueriesTable, ChannelQueryEntity> { +class $ConnectionEventsTable extends ConnectionEvents + with TableInfo<$ConnectionEventsTable, ConnectionEventEntity> { @override final GeneratedDatabase attachedDatabase; final String? _alias; - $ChannelQueriesTable(this.attachedDatabase, [this._alias]); - static const VerificationMeta _queryHashMeta = - const VerificationMeta('queryHash'); + $ConnectionEventsTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); @override - late final GeneratedColumn queryHash = GeneratedColumn( - 'query_hash', aliasedName, false, - type: DriftSqlType.string, requiredDuringInsert: true); - static const VerificationMeta _channelCidMeta = - const VerificationMeta('channelCid'); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + type: DriftSqlType.int, requiredDuringInsert: false); + static const VerificationMeta _typeMeta = const VerificationMeta('type'); @override - late final GeneratedColumn channelCid = GeneratedColumn( - 'channel_cid', aliasedName, false, + late final GeneratedColumn type = GeneratedColumn( + 'type', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true); @override - List get $columns => [queryHash, channelCid]; + late final GeneratedColumnWithTypeConverter?, String> + ownUser = GeneratedColumn('own_user', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false) + .withConverter?>( + $ConnectionEventsTable.$converterownUsern); + static const VerificationMeta _totalUnreadCountMeta = + const VerificationMeta('totalUnreadCount'); + @override + late final GeneratedColumn totalUnreadCount = GeneratedColumn( + 'total_unread_count', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + static const VerificationMeta _unreadChannelsMeta = + const VerificationMeta('unreadChannels'); + @override + late final GeneratedColumn unreadChannels = GeneratedColumn( + 'unread_channels', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + static const VerificationMeta _lastEventAtMeta = + const VerificationMeta('lastEventAt'); + @override + late final GeneratedColumn lastEventAt = GeneratedColumn( + 'last_event_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _lastSyncAtMeta = + const VerificationMeta('lastSyncAt'); + @override + late final GeneratedColumn lastSyncAt = GeneratedColumn( + 'last_sync_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + @override + List get $columns => [ + id, + type, + ownUser, + totalUnreadCount, + unreadChannels, + lastEventAt, + lastSyncAt + ]; @override String get aliasedName => _alias ?? actualTableName; @override String get actualTableName => $name; - static const String $name = 'channel_queries'; + static const String $name = 'connection_events'; @override - VerificationContext validateIntegrity(Insertable instance, + VerificationContext validateIntegrity( + Insertable instance, {bool isInserting = false}) { final context = VerificationContext(); final data = instance.toColumns(true); - if (data.containsKey('query_hash')) { - context.handle(_queryHashMeta, - queryHash.isAcceptableOrUnknown(data['query_hash']!, _queryHashMeta)); - } else if (isInserting) { - context.missing(_queryHashMeta); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); } - if (data.containsKey('channel_cid')) { + if (data.containsKey('type')) { context.handle( - _channelCidMeta, - channelCid.isAcceptableOrUnknown( - data['channel_cid']!, _channelCidMeta)); + _typeMeta, type.isAcceptableOrUnknown(data['type']!, _typeMeta)); } else if (isInserting) { - context.missing(_channelCidMeta); + context.missing(_typeMeta); + } + if (data.containsKey('total_unread_count')) { + context.handle( + _totalUnreadCountMeta, + totalUnreadCount.isAcceptableOrUnknown( + data['total_unread_count']!, _totalUnreadCountMeta)); + } + if (data.containsKey('unread_channels')) { + context.handle( + _unreadChannelsMeta, + unreadChannels.isAcceptableOrUnknown( + data['unread_channels']!, _unreadChannelsMeta)); + } + if (data.containsKey('last_event_at')) { + context.handle( + _lastEventAtMeta, + lastEventAt.isAcceptableOrUnknown( + data['last_event_at']!, _lastEventAtMeta)); + } + if (data.containsKey('last_sync_at')) { + context.handle( + _lastSyncAtMeta, + lastSyncAt.isAcceptableOrUnknown( + data['last_sync_at']!, _lastSyncAtMeta)); } return context; } @override - Set get $primaryKey => {queryHash, channelCid}; + Set get $primaryKey => {id}; @override - ChannelQueryEntity map(Map data, {String? tablePrefix}) { + ConnectionEventEntity map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; - return ChannelQueryEntity( - queryHash: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}query_hash'])!, - channelCid: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}channel_cid'])!, + return ConnectionEventEntity( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id'])!, + type: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}type'])!, + ownUser: $ConnectionEventsTable.$converterownUsern.fromSql( + attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}own_user'])), + totalUnreadCount: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}total_unread_count']), + unreadChannels: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}unread_channels']), + lastEventAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}last_event_at']), + lastSyncAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}last_sync_at']), ); } @override - $ChannelQueriesTable createAlias(String alias) { - return $ChannelQueriesTable(attachedDatabase, alias); + $ConnectionEventsTable createAlias(String alias) { + return $ConnectionEventsTable(attachedDatabase, alias); } + + static TypeConverter, String> $converterownUser = + MapConverter(); + static TypeConverter?, String?> $converterownUsern = + NullAwareTypeConverter.wrap($converterownUser); } -class ChannelQueryEntity extends DataClass - implements Insertable { - /// The unique hash of this query - final String queryHash; +class ConnectionEventEntity extends DataClass + implements Insertable { + /// event id + final int id; - /// The channel cid of this query - final String channelCid; - const ChannelQueryEntity({required this.queryHash, required this.channelCid}); + /// event type + final String type; + + /// User object of the current user + final Map? ownUser; + + /// The number of unread messages for current user + final int? totalUnreadCount; + + /// User total unread channels for current user + final int? unreadChannels; + + /// DateTime of the last event + final DateTime? lastEventAt; + + /// DateTime of the last sync + final DateTime? lastSyncAt; + const ConnectionEventEntity( + {required this.id, + required this.type, + this.ownUser, + this.totalUnreadCount, + this.unreadChannels, + this.lastEventAt, + this.lastSyncAt}); @override Map toColumns(bool nullToAbsent) { final map = {}; - map['query_hash'] = Variable(queryHash); - map['channel_cid'] = Variable(channelCid); + map['id'] = Variable(id); + map['type'] = Variable(type); + if (!nullToAbsent || ownUser != null) { + map['own_user'] = Variable( + $ConnectionEventsTable.$converterownUsern.toSql(ownUser)); + } + if (!nullToAbsent || totalUnreadCount != null) { + map['total_unread_count'] = Variable(totalUnreadCount); + } + if (!nullToAbsent || unreadChannels != null) { + map['unread_channels'] = Variable(unreadChannels); + } + if (!nullToAbsent || lastEventAt != null) { + map['last_event_at'] = Variable(lastEventAt); + } + if (!nullToAbsent || lastSyncAt != null) { + map['last_sync_at'] = Variable(lastSyncAt); + } return map; } - factory ChannelQueryEntity.fromJson(Map json, + factory ConnectionEventEntity.fromJson(Map json, {ValueSerializer? serializer}) { serializer ??= driftRuntimeOptions.defaultSerializer; - return ChannelQueryEntity( - queryHash: serializer.fromJson(json['queryHash']), - channelCid: serializer.fromJson(json['channelCid']), + return ConnectionEventEntity( + id: serializer.fromJson(json['id']), + type: serializer.fromJson(json['type']), + ownUser: serializer.fromJson?>(json['ownUser']), + totalUnreadCount: serializer.fromJson(json['totalUnreadCount']), + unreadChannels: serializer.fromJson(json['unreadChannels']), + lastEventAt: serializer.fromJson(json['lastEventAt']), + lastSyncAt: serializer.fromJson(json['lastSyncAt']), ); } @override Map toJson({ValueSerializer? serializer}) { serializer ??= driftRuntimeOptions.defaultSerializer; return { - 'queryHash': serializer.toJson(queryHash), - 'channelCid': serializer.toJson(channelCid), + 'id': serializer.toJson(id), + 'type': serializer.toJson(type), + 'ownUser': serializer.toJson?>(ownUser), + 'totalUnreadCount': serializer.toJson(totalUnreadCount), + 'unreadChannels': serializer.toJson(unreadChannels), + 'lastEventAt': serializer.toJson(lastEventAt), + 'lastSyncAt': serializer.toJson(lastSyncAt), }; } - ChannelQueryEntity copyWith({String? queryHash, String? channelCid}) => - ChannelQueryEntity( - queryHash: queryHash ?? this.queryHash, - channelCid: channelCid ?? this.channelCid, + ConnectionEventEntity copyWith( + {int? id, + String? type, + Value?> ownUser = const Value.absent(), + Value totalUnreadCount = const Value.absent(), + Value unreadChannels = const Value.absent(), + Value lastEventAt = const Value.absent(), + Value lastSyncAt = const Value.absent()}) => + ConnectionEventEntity( + id: id ?? this.id, + type: type ?? this.type, + ownUser: ownUser.present ? ownUser.value : this.ownUser, + totalUnreadCount: totalUnreadCount.present + ? totalUnreadCount.value + : this.totalUnreadCount, + unreadChannels: + unreadChannels.present ? unreadChannels.value : this.unreadChannels, + lastEventAt: lastEventAt.present ? lastEventAt.value : this.lastEventAt, + lastSyncAt: lastSyncAt.present ? lastSyncAt.value : this.lastSyncAt, ); - ChannelQueryEntity copyWithCompanion(ChannelQueriesCompanion data) { - return ChannelQueryEntity( - queryHash: data.queryHash.present ? data.queryHash.value : this.queryHash, - channelCid: - data.channelCid.present ? data.channelCid.value : this.channelCid, + ConnectionEventEntity copyWithCompanion(ConnectionEventsCompanion data) { + return ConnectionEventEntity( + id: data.id.present ? data.id.value : this.id, + type: data.type.present ? data.type.value : this.type, + ownUser: data.ownUser.present ? data.ownUser.value : this.ownUser, + totalUnreadCount: data.totalUnreadCount.present + ? data.totalUnreadCount.value + : this.totalUnreadCount, + unreadChannels: data.unreadChannels.present + ? data.unreadChannels.value + : this.unreadChannels, + lastEventAt: + data.lastEventAt.present ? data.lastEventAt.value : this.lastEventAt, + lastSyncAt: + data.lastSyncAt.present ? data.lastSyncAt.value : this.lastSyncAt, ); } @override String toString() { - return (StringBuffer('ChannelQueryEntity(') - ..write('queryHash: $queryHash, ') - ..write('channelCid: $channelCid') + return (StringBuffer('ConnectionEventEntity(') + ..write('id: $id, ') + ..write('type: $type, ') + ..write('ownUser: $ownUser, ') + ..write('totalUnreadCount: $totalUnreadCount, ') + ..write('unreadChannels: $unreadChannels, ') + ..write('lastEventAt: $lastEventAt, ') + ..write('lastSyncAt: $lastSyncAt') ..write(')')) .toString(); } @override - int get hashCode => Object.hash(queryHash, channelCid); + int get hashCode => Object.hash(id, type, ownUser, totalUnreadCount, + unreadChannels, lastEventAt, lastSyncAt); @override bool operator ==(Object other) => identical(this, other) || - (other is ChannelQueryEntity && - other.queryHash == this.queryHash && - other.channelCid == this.channelCid); + (other is ConnectionEventEntity && + other.id == this.id && + other.type == this.type && + other.ownUser == this.ownUser && + other.totalUnreadCount == this.totalUnreadCount && + other.unreadChannels == this.unreadChannels && + other.lastEventAt == this.lastEventAt && + other.lastSyncAt == this.lastSyncAt); } -class ChannelQueriesCompanion extends UpdateCompanion { - final Value queryHash; - final Value channelCid; - final Value rowid; - const ChannelQueriesCompanion({ - this.queryHash = const Value.absent(), - this.channelCid = const Value.absent(), - this.rowid = const Value.absent(), +class ConnectionEventsCompanion extends UpdateCompanion { + final Value id; + final Value type; + final Value?> ownUser; + final Value totalUnreadCount; + final Value unreadChannels; + final Value lastEventAt; + final Value lastSyncAt; + const ConnectionEventsCompanion({ + this.id = const Value.absent(), + this.type = const Value.absent(), + this.ownUser = const Value.absent(), + this.totalUnreadCount = const Value.absent(), + this.unreadChannels = const Value.absent(), + this.lastEventAt = const Value.absent(), + this.lastSyncAt = const Value.absent(), }); - ChannelQueriesCompanion.insert({ - required String queryHash, - required String channelCid, - this.rowid = const Value.absent(), - }) : queryHash = Value(queryHash), - channelCid = Value(channelCid); - static Insertable custom({ - Expression? queryHash, - Expression? channelCid, - Expression? rowid, + ConnectionEventsCompanion.insert({ + this.id = const Value.absent(), + required String type, + this.ownUser = const Value.absent(), + this.totalUnreadCount = const Value.absent(), + this.unreadChannels = const Value.absent(), + this.lastEventAt = const Value.absent(), + this.lastSyncAt = const Value.absent(), + }) : type = Value(type); + static Insertable custom({ + Expression? id, + Expression? type, + Expression? ownUser, + Expression? totalUnreadCount, + Expression? unreadChannels, + Expression? lastEventAt, + Expression? lastSyncAt, }) { return RawValuesInsertable({ - if (queryHash != null) 'query_hash': queryHash, - if (channelCid != null) 'channel_cid': channelCid, - if (rowid != null) 'rowid': rowid, + if (id != null) 'id': id, + if (type != null) 'type': type, + if (ownUser != null) 'own_user': ownUser, + if (totalUnreadCount != null) 'total_unread_count': totalUnreadCount, + if (unreadChannels != null) 'unread_channels': unreadChannels, + if (lastEventAt != null) 'last_event_at': lastEventAt, + if (lastSyncAt != null) 'last_sync_at': lastSyncAt, }); } - ChannelQueriesCompanion copyWith( - {Value? queryHash, - Value? channelCid, - Value? rowid}) { - return ChannelQueriesCompanion( - queryHash: queryHash ?? this.queryHash, - channelCid: channelCid ?? this.channelCid, - rowid: rowid ?? this.rowid, - ); - } - - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - if (queryHash.present) { - map['query_hash'] = Variable(queryHash.value); - } - if (channelCid.present) { - map['channel_cid'] = Variable(channelCid.value); - } - if (rowid.present) { - map['rowid'] = Variable(rowid.value); - } - return map; - } - - @override - String toString() { - return (StringBuffer('ChannelQueriesCompanion(') - ..write('queryHash: $queryHash, ') - ..write('channelCid: $channelCid, ') - ..write('rowid: $rowid') - ..write(')')) - .toString(); - } -} - -class $ConnectionEventsTable extends ConnectionEvents - with TableInfo<$ConnectionEventsTable, ConnectionEventEntity> { - @override - final GeneratedDatabase attachedDatabase; - final String? _alias; - $ConnectionEventsTable(this.attachedDatabase, [this._alias]); - static const VerificationMeta _idMeta = const VerificationMeta('id'); - @override - late final GeneratedColumn id = GeneratedColumn( - 'id', aliasedName, false, - type: DriftSqlType.int, requiredDuringInsert: false); - static const VerificationMeta _typeMeta = const VerificationMeta('type'); - @override - late final GeneratedColumn type = GeneratedColumn( - 'type', aliasedName, false, - type: DriftSqlType.string, requiredDuringInsert: true); - static const VerificationMeta _ownUserMeta = - const VerificationMeta('ownUser'); - @override - late final GeneratedColumnWithTypeConverter?, String> - ownUser = GeneratedColumn('own_user', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false) - .withConverter?>( - $ConnectionEventsTable.$converterownUsern); - static const VerificationMeta _totalUnreadCountMeta = - const VerificationMeta('totalUnreadCount'); - @override - late final GeneratedColumn totalUnreadCount = GeneratedColumn( - 'total_unread_count', aliasedName, true, - type: DriftSqlType.int, requiredDuringInsert: false); - static const VerificationMeta _unreadChannelsMeta = - const VerificationMeta('unreadChannels'); - @override - late final GeneratedColumn unreadChannels = GeneratedColumn( - 'unread_channels', aliasedName, true, - type: DriftSqlType.int, requiredDuringInsert: false); - static const VerificationMeta _lastEventAtMeta = - const VerificationMeta('lastEventAt'); - @override - late final GeneratedColumn lastEventAt = GeneratedColumn( - 'last_event_at', aliasedName, true, - type: DriftSqlType.dateTime, requiredDuringInsert: false); - static const VerificationMeta _lastSyncAtMeta = - const VerificationMeta('lastSyncAt'); - @override - late final GeneratedColumn lastSyncAt = GeneratedColumn( - 'last_sync_at', aliasedName, true, - type: DriftSqlType.dateTime, requiredDuringInsert: false); - @override - List get $columns => [ - id, - type, - ownUser, - totalUnreadCount, - unreadChannels, - lastEventAt, - lastSyncAt - ]; - @override - String get aliasedName => _alias ?? actualTableName; - @override - String get actualTableName => $name; - static const String $name = 'connection_events'; + ConnectionEventsCompanion copyWith( + {Value? id, + Value? type, + Value?>? ownUser, + Value? totalUnreadCount, + Value? unreadChannels, + Value? lastEventAt, + Value? lastSyncAt}) { + return ConnectionEventsCompanion( + id: id ?? this.id, + type: type ?? this.type, + ownUser: ownUser ?? this.ownUser, + totalUnreadCount: totalUnreadCount ?? this.totalUnreadCount, + unreadChannels: unreadChannels ?? this.unreadChannels, + lastEventAt: lastEventAt ?? this.lastEventAt, + lastSyncAt: lastSyncAt ?? this.lastSyncAt, + ); + } + @override - VerificationContext validateIntegrity( - Insertable instance, - {bool isInserting = false}) { - final context = VerificationContext(); - final data = instance.toColumns(true); - if (data.containsKey('id')) { - context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); } - if (data.containsKey('type')) { - context.handle( - _typeMeta, type.isAcceptableOrUnknown(data['type']!, _typeMeta)); - } else if (isInserting) { - context.missing(_typeMeta); + if (type.present) { + map['type'] = Variable(type.value); } - context.handle(_ownUserMeta, const VerificationResult.success()); - if (data.containsKey('total_unread_count')) { - context.handle( - _totalUnreadCountMeta, - totalUnreadCount.isAcceptableOrUnknown( - data['total_unread_count']!, _totalUnreadCountMeta)); + if (ownUser.present) { + map['own_user'] = Variable( + $ConnectionEventsTable.$converterownUsern.toSql(ownUser.value)); } - if (data.containsKey('unread_channels')) { - context.handle( - _unreadChannelsMeta, - unreadChannels.isAcceptableOrUnknown( - data['unread_channels']!, _unreadChannelsMeta)); + if (totalUnreadCount.present) { + map['total_unread_count'] = Variable(totalUnreadCount.value); } - if (data.containsKey('last_event_at')) { - context.handle( - _lastEventAtMeta, - lastEventAt.isAcceptableOrUnknown( - data['last_event_at']!, _lastEventAtMeta)); + if (unreadChannels.present) { + map['unread_channels'] = Variable(unreadChannels.value); } - if (data.containsKey('last_sync_at')) { - context.handle( - _lastSyncAtMeta, - lastSyncAt.isAcceptableOrUnknown( - data['last_sync_at']!, _lastSyncAtMeta)); + if (lastEventAt.present) { + map['last_event_at'] = Variable(lastEventAt.value); } - return context; + if (lastSyncAt.present) { + map['last_sync_at'] = Variable(lastSyncAt.value); + } + return map; } @override - Set get $primaryKey => {id}; + String toString() { + return (StringBuffer('ConnectionEventsCompanion(') + ..write('id: $id, ') + ..write('type: $type, ') + ..write('ownUser: $ownUser, ') + ..write('totalUnreadCount: $totalUnreadCount, ') + ..write('unreadChannels: $unreadChannels, ') + ..write('lastEventAt: $lastEventAt, ') + ..write('lastSyncAt: $lastSyncAt') + ..write(')')) + .toString(); + } +} + +abstract class _$DriftChatDatabase extends GeneratedDatabase { + _$DriftChatDatabase(QueryExecutor e) : super(e); + $DriftChatDatabaseManager get managers => $DriftChatDatabaseManager(this); + late final $ChannelsTable channels = $ChannelsTable(this); + late final $MessagesTable messages = $MessagesTable(this); + late final $DraftMessagesTable draftMessages = $DraftMessagesTable(this); + late final $PinnedMessagesTable pinnedMessages = $PinnedMessagesTable(this); + late final $PollsTable polls = $PollsTable(this); + late final $PollVotesTable pollVotes = $PollVotesTable(this); + late final $PinnedMessageReactionsTable pinnedMessageReactions = + $PinnedMessageReactionsTable(this); + late final $ReactionsTable reactions = $ReactionsTable(this); + late final $UsersTable users = $UsersTable(this); + late final $MembersTable members = $MembersTable(this); + late final $ReadsTable reads = $ReadsTable(this); + late final $ChannelQueriesTable channelQueries = $ChannelQueriesTable(this); + late final $ConnectionEventsTable connectionEvents = + $ConnectionEventsTable(this); + late final UserDao userDao = UserDao(this as DriftChatDatabase); + late final ChannelDao channelDao = ChannelDao(this as DriftChatDatabase); + late final MessageDao messageDao = MessageDao(this as DriftChatDatabase); + late final DraftMessageDao draftMessageDao = + DraftMessageDao(this as DriftChatDatabase); + late final PinnedMessageDao pinnedMessageDao = + PinnedMessageDao(this as DriftChatDatabase); + late final PinnedMessageReactionDao pinnedMessageReactionDao = + PinnedMessageReactionDao(this as DriftChatDatabase); + late final MemberDao memberDao = MemberDao(this as DriftChatDatabase); + late final PollDao pollDao = PollDao(this as DriftChatDatabase); + late final PollVoteDao pollVoteDao = PollVoteDao(this as DriftChatDatabase); + late final ReactionDao reactionDao = ReactionDao(this as DriftChatDatabase); + late final ReadDao readDao = ReadDao(this as DriftChatDatabase); + late final ChannelQueryDao channelQueryDao = + ChannelQueryDao(this as DriftChatDatabase); + late final ConnectionEventDao connectionEventDao = + ConnectionEventDao(this as DriftChatDatabase); @override - ConnectionEventEntity map(Map data, {String? tablePrefix}) { - final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; - return ConnectionEventEntity( - id: attachedDatabase.typeMapping - .read(DriftSqlType.int, data['${effectivePrefix}id'])!, - type: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}type'])!, - ownUser: $ConnectionEventsTable.$converterownUsern.fromSql( - attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}own_user'])), - totalUnreadCount: attachedDatabase.typeMapping - .read(DriftSqlType.int, data['${effectivePrefix}total_unread_count']), - unreadChannels: attachedDatabase.typeMapping - .read(DriftSqlType.int, data['${effectivePrefix}unread_channels']), - lastEventAt: attachedDatabase.typeMapping - .read(DriftSqlType.dateTime, data['${effectivePrefix}last_event_at']), - lastSyncAt: attachedDatabase.typeMapping - .read(DriftSqlType.dateTime, data['${effectivePrefix}last_sync_at']), - ); + Iterable> get allTables => + allSchemaEntities.whereType>(); + @override + List get allSchemaEntities => [ + channels, + messages, + draftMessages, + pinnedMessages, + polls, + pollVotes, + pinnedMessageReactions, + reactions, + users, + members, + reads, + channelQueries, + connectionEvents + ]; + @override + StreamQueryUpdateRules get streamUpdateRules => const StreamQueryUpdateRules( + [ + WritePropagation( + on: TableUpdateQuery.onTableName('channels', + limitUpdateKind: UpdateKind.delete), + result: [ + TableUpdate('messages', kind: UpdateKind.delete), + ], + ), + WritePropagation( + on: TableUpdateQuery.onTableName('messages', + limitUpdateKind: UpdateKind.delete), + result: [ + TableUpdate('draft_messages', kind: UpdateKind.delete), + ], + ), + WritePropagation( + on: TableUpdateQuery.onTableName('channels', + limitUpdateKind: UpdateKind.delete), + result: [ + TableUpdate('draft_messages', kind: UpdateKind.delete), + ], + ), + WritePropagation( + on: TableUpdateQuery.onTableName('polls', + limitUpdateKind: UpdateKind.delete), + result: [ + TableUpdate('poll_votes', kind: UpdateKind.delete), + ], + ), + WritePropagation( + on: TableUpdateQuery.onTableName('pinned_messages', + limitUpdateKind: UpdateKind.delete), + result: [ + TableUpdate('pinned_message_reactions', kind: UpdateKind.delete), + ], + ), + WritePropagation( + on: TableUpdateQuery.onTableName('messages', + limitUpdateKind: UpdateKind.delete), + result: [ + TableUpdate('reactions', kind: UpdateKind.delete), + ], + ), + WritePropagation( + on: TableUpdateQuery.onTableName('channels', + limitUpdateKind: UpdateKind.delete), + result: [ + TableUpdate('members', kind: UpdateKind.delete), + ], + ), + WritePropagation( + on: TableUpdateQuery.onTableName('channels', + limitUpdateKind: UpdateKind.delete), + result: [ + TableUpdate('reads', kind: UpdateKind.delete), + ], + ), + ], + ); +} + +typedef $$ChannelsTableCreateCompanionBuilder = ChannelsCompanion Function({ + required String id, + required String type, + required String cid, + Value?> ownCapabilities, + required Map config, + Value frozen, + Value lastMessageAt, + Value createdAt, + Value updatedAt, + Value deletedAt, + Value memberCount, + Value createdById, + Value?> extraData, + Value rowid, +}); +typedef $$ChannelsTableUpdateCompanionBuilder = ChannelsCompanion Function({ + Value id, + Value type, + Value cid, + Value?> ownCapabilities, + Value> config, + Value frozen, + Value lastMessageAt, + Value createdAt, + Value updatedAt, + Value deletedAt, + Value memberCount, + Value createdById, + Value?> extraData, + Value rowid, +}); + +final class $$ChannelsTableReferences + extends BaseReferences<_$DriftChatDatabase, $ChannelsTable, ChannelEntity> { + $$ChannelsTableReferences(super.$_db, super.$_table, super.$_typedResult); + + static MultiTypedResultKey<$MessagesTable, List> + _messagesRefsTable(_$DriftChatDatabase db) => + MultiTypedResultKey.fromTable(db.messages, + aliasName: $_aliasNameGenerator( + db.channels.cid, db.messages.channelCid)); + + $$MessagesTableProcessedTableManager get messagesRefs { + final manager = $$MessagesTableTableManager($_db, $_db.messages).filter( + (f) => f.channelCid.cid.sqlEquals($_itemColumn('cid')!)); + + final cache = $_typedResult.readTableOrNull(_messagesRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache)); } - @override - $ConnectionEventsTable createAlias(String alias) { - return $ConnectionEventsTable(attachedDatabase, alias); + static MultiTypedResultKey<$DraftMessagesTable, List> + _draftMessagesRefsTable(_$DriftChatDatabase db) => + MultiTypedResultKey.fromTable(db.draftMessages, + aliasName: $_aliasNameGenerator( + db.channels.cid, db.draftMessages.channelCid)); + + $$DraftMessagesTableProcessedTableManager get draftMessagesRefs { + final manager = $$DraftMessagesTableTableManager($_db, $_db.draftMessages) + .filter( + (f) => f.channelCid.cid.sqlEquals($_itemColumn('cid')!)); + + final cache = $_typedResult.readTableOrNull(_draftMessagesRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache)); } - static TypeConverter, String> $converterownUser = - MapConverter(); - static TypeConverter?, String?> $converterownUsern = - NullAwareTypeConverter.wrap($converterownUser); + static MultiTypedResultKey<$MembersTable, List> + _membersRefsTable(_$DriftChatDatabase db) => + MultiTypedResultKey.fromTable(db.members, + aliasName: + $_aliasNameGenerator(db.channels.cid, db.members.channelCid)); + + $$MembersTableProcessedTableManager get membersRefs { + final manager = $$MembersTableTableManager($_db, $_db.members).filter( + (f) => f.channelCid.cid.sqlEquals($_itemColumn('cid')!)); + + final cache = $_typedResult.readTableOrNull(_membersRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache)); + } + + static MultiTypedResultKey<$ReadsTable, List> _readsRefsTable( + _$DriftChatDatabase db) => + MultiTypedResultKey.fromTable(db.reads, + aliasName: + $_aliasNameGenerator(db.channels.cid, db.reads.channelCid)); + + $$ReadsTableProcessedTableManager get readsRefs { + final manager = $$ReadsTableTableManager($_db, $_db.reads).filter( + (f) => f.channelCid.cid.sqlEquals($_itemColumn('cid')!)); + + final cache = $_typedResult.readTableOrNull(_readsRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache)); + } } -class ConnectionEventEntity extends DataClass - implements Insertable { - /// event id - final int id; +class $$ChannelsTableFilterComposer + extends Composer<_$DriftChatDatabase, $ChannelsTable> { + $$ChannelsTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, builder: (column) => ColumnFilters(column)); - /// event type - final String type; + ColumnFilters get type => $composableBuilder( + column: $table.type, builder: (column) => ColumnFilters(column)); - /// User object of the current user - final Map? ownUser; + ColumnFilters get cid => $composableBuilder( + column: $table.cid, builder: (column) => ColumnFilters(column)); - /// The number of unread messages for current user - final int? totalUnreadCount; + ColumnWithTypeConverterFilters?, List, String> + get ownCapabilities => $composableBuilder( + column: $table.ownCapabilities, + builder: (column) => ColumnWithTypeConverterFilters(column)); - /// User total unread channels for current user - final int? unreadChannels; + ColumnWithTypeConverterFilters, Map, + String> + get config => $composableBuilder( + column: $table.config, + builder: (column) => ColumnWithTypeConverterFilters(column)); - /// DateTime of the last event - final DateTime? lastEventAt; + ColumnFilters get frozen => $composableBuilder( + column: $table.frozen, builder: (column) => ColumnFilters(column)); - /// DateTime of the last sync - final DateTime? lastSyncAt; - const ConnectionEventEntity( - {required this.id, - required this.type, - this.ownUser, - this.totalUnreadCount, - this.unreadChannels, - this.lastEventAt, - this.lastSyncAt}); - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - map['id'] = Variable(id); - map['type'] = Variable(type); - if (!nullToAbsent || ownUser != null) { - map['own_user'] = Variable( - $ConnectionEventsTable.$converterownUsern.toSql(ownUser)); - } - if (!nullToAbsent || totalUnreadCount != null) { - map['total_unread_count'] = Variable(totalUnreadCount); - } - if (!nullToAbsent || unreadChannels != null) { - map['unread_channels'] = Variable(unreadChannels); - } - if (!nullToAbsent || lastEventAt != null) { - map['last_event_at'] = Variable(lastEventAt); - } - if (!nullToAbsent || lastSyncAt != null) { - map['last_sync_at'] = Variable(lastSyncAt); - } - return map; - } + ColumnFilters get lastMessageAt => $composableBuilder( + column: $table.lastMessageAt, builder: (column) => ColumnFilters(column)); - factory ConnectionEventEntity.fromJson(Map json, - {ValueSerializer? serializer}) { - serializer ??= driftRuntimeOptions.defaultSerializer; - return ConnectionEventEntity( - id: serializer.fromJson(json['id']), - type: serializer.fromJson(json['type']), - ownUser: serializer.fromJson?>(json['ownUser']), - totalUnreadCount: serializer.fromJson(json['totalUnreadCount']), - unreadChannels: serializer.fromJson(json['unreadChannels']), - lastEventAt: serializer.fromJson(json['lastEventAt']), - lastSyncAt: serializer.fromJson(json['lastSyncAt']), - ); + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnFilters(column)); + + ColumnFilters get updatedAt => $composableBuilder( + column: $table.updatedAt, builder: (column) => ColumnFilters(column)); + + ColumnFilters get deletedAt => $composableBuilder( + column: $table.deletedAt, builder: (column) => ColumnFilters(column)); + + ColumnFilters get memberCount => $composableBuilder( + column: $table.memberCount, builder: (column) => ColumnFilters(column)); + + ColumnFilters get createdById => $composableBuilder( + column: $table.createdById, builder: (column) => ColumnFilters(column)); + + ColumnWithTypeConverterFilters?, Map, + String> + get extraData => $composableBuilder( + column: $table.extraData, + builder: (column) => ColumnWithTypeConverterFilters(column)); + + Expression messagesRefs( + Expression Function($$MessagesTableFilterComposer f) f) { + final $$MessagesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.cid, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.channelCid, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableFilterComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); } - @override - Map toJson({ValueSerializer? serializer}) { - serializer ??= driftRuntimeOptions.defaultSerializer; - return { - 'id': serializer.toJson(id), - 'type': serializer.toJson(type), - 'ownUser': serializer.toJson?>(ownUser), - 'totalUnreadCount': serializer.toJson(totalUnreadCount), - 'unreadChannels': serializer.toJson(unreadChannels), - 'lastEventAt': serializer.toJson(lastEventAt), - 'lastSyncAt': serializer.toJson(lastSyncAt), - }; + + Expression draftMessagesRefs( + Expression Function($$DraftMessagesTableFilterComposer f) f) { + final $$DraftMessagesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.cid, + referencedTable: $db.draftMessages, + getReferencedColumn: (t) => t.channelCid, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$DraftMessagesTableFilterComposer( + $db: $db, + $table: $db.draftMessages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); } - ConnectionEventEntity copyWith( - {int? id, - String? type, - Value?> ownUser = const Value.absent(), - Value totalUnreadCount = const Value.absent(), - Value unreadChannels = const Value.absent(), - Value lastEventAt = const Value.absent(), - Value lastSyncAt = const Value.absent()}) => - ConnectionEventEntity( - id: id ?? this.id, - type: type ?? this.type, - ownUser: ownUser.present ? ownUser.value : this.ownUser, - totalUnreadCount: totalUnreadCount.present - ? totalUnreadCount.value - : this.totalUnreadCount, - unreadChannels: - unreadChannels.present ? unreadChannels.value : this.unreadChannels, - lastEventAt: lastEventAt.present ? lastEventAt.value : this.lastEventAt, - lastSyncAt: lastSyncAt.present ? lastSyncAt.value : this.lastSyncAt, - ); - ConnectionEventEntity copyWithCompanion(ConnectionEventsCompanion data) { - return ConnectionEventEntity( - id: data.id.present ? data.id.value : this.id, - type: data.type.present ? data.type.value : this.type, - ownUser: data.ownUser.present ? data.ownUser.value : this.ownUser, - totalUnreadCount: data.totalUnreadCount.present - ? data.totalUnreadCount.value - : this.totalUnreadCount, - unreadChannels: data.unreadChannels.present - ? data.unreadChannels.value - : this.unreadChannels, - lastEventAt: - data.lastEventAt.present ? data.lastEventAt.value : this.lastEventAt, - lastSyncAt: - data.lastSyncAt.present ? data.lastSyncAt.value : this.lastSyncAt, - ); + Expression membersRefs( + Expression Function($$MembersTableFilterComposer f) f) { + final $$MembersTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.cid, + referencedTable: $db.members, + getReferencedColumn: (t) => t.channelCid, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MembersTableFilterComposer( + $db: $db, + $table: $db.members, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); } - @override - String toString() { - return (StringBuffer('ConnectionEventEntity(') - ..write('id: $id, ') - ..write('type: $type, ') - ..write('ownUser: $ownUser, ') - ..write('totalUnreadCount: $totalUnreadCount, ') - ..write('unreadChannels: $unreadChannels, ') - ..write('lastEventAt: $lastEventAt, ') - ..write('lastSyncAt: $lastSyncAt') - ..write(')')) - .toString(); + Expression readsRefs( + Expression Function($$ReadsTableFilterComposer f) f) { + final $$ReadsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.cid, + referencedTable: $db.reads, + getReferencedColumn: (t) => t.channelCid, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ReadsTableFilterComposer( + $db: $db, + $table: $db.reads, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); } +} - @override - int get hashCode => Object.hash(id, type, ownUser, totalUnreadCount, - unreadChannels, lastEventAt, lastSyncAt); - @override - bool operator ==(Object other) => - identical(this, other) || - (other is ConnectionEventEntity && - other.id == this.id && - other.type == this.type && - other.ownUser == this.ownUser && - other.totalUnreadCount == this.totalUnreadCount && - other.unreadChannels == this.unreadChannels && - other.lastEventAt == this.lastEventAt && - other.lastSyncAt == this.lastSyncAt); +class $$ChannelsTableOrderingComposer + extends Composer<_$DriftChatDatabase, $ChannelsTable> { + $$ChannelsTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get type => $composableBuilder( + column: $table.type, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get cid => $composableBuilder( + column: $table.cid, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get ownCapabilities => $composableBuilder( + column: $table.ownCapabilities, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get config => $composableBuilder( + column: $table.config, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get frozen => $composableBuilder( + column: $table.frozen, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get lastMessageAt => $composableBuilder( + column: $table.lastMessageAt, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get updatedAt => $composableBuilder( + column: $table.updatedAt, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get deletedAt => $composableBuilder( + column: $table.deletedAt, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get memberCount => $composableBuilder( + column: $table.memberCount, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get createdById => $composableBuilder( + column: $table.createdById, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get extraData => $composableBuilder( + column: $table.extraData, builder: (column) => ColumnOrderings(column)); } -class ConnectionEventsCompanion extends UpdateCompanion { - final Value id; - final Value type; - final Value?> ownUser; - final Value totalUnreadCount; - final Value unreadChannels; - final Value lastEventAt; - final Value lastSyncAt; - const ConnectionEventsCompanion({ - this.id = const Value.absent(), - this.type = const Value.absent(), - this.ownUser = const Value.absent(), - this.totalUnreadCount = const Value.absent(), - this.unreadChannels = const Value.absent(), - this.lastEventAt = const Value.absent(), - this.lastSyncAt = const Value.absent(), +class $$ChannelsTableAnnotationComposer + extends Composer<_$DriftChatDatabase, $ChannelsTable> { + $$ChannelsTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, }); - ConnectionEventsCompanion.insert({ - this.id = const Value.absent(), - required String type, - this.ownUser = const Value.absent(), - this.totalUnreadCount = const Value.absent(), - this.unreadChannels = const Value.absent(), - this.lastEventAt = const Value.absent(), - this.lastSyncAt = const Value.absent(), - }) : type = Value(type); - static Insertable custom({ - Expression? id, - Expression? type, - Expression? ownUser, - Expression? totalUnreadCount, - Expression? unreadChannels, - Expression? lastEventAt, - Expression? lastSyncAt, - }) { - return RawValuesInsertable({ - if (id != null) 'id': id, - if (type != null) 'type': type, - if (ownUser != null) 'own_user': ownUser, - if (totalUnreadCount != null) 'total_unread_count': totalUnreadCount, - if (unreadChannels != null) 'unread_channels': unreadChannels, - if (lastEventAt != null) 'last_event_at': lastEventAt, - if (lastSyncAt != null) 'last_sync_at': lastSyncAt, - }); - } + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); - ConnectionEventsCompanion copyWith( - {Value? id, - Value? type, - Value?>? ownUser, - Value? totalUnreadCount, - Value? unreadChannels, - Value? lastEventAt, - Value? lastSyncAt}) { - return ConnectionEventsCompanion( - id: id ?? this.id, - type: type ?? this.type, - ownUser: ownUser ?? this.ownUser, - totalUnreadCount: totalUnreadCount ?? this.totalUnreadCount, - unreadChannels: unreadChannels ?? this.unreadChannels, - lastEventAt: lastEventAt ?? this.lastEventAt, - lastSyncAt: lastSyncAt ?? this.lastSyncAt, - ); + GeneratedColumn get type => + $composableBuilder(column: $table.type, builder: (column) => column); + + GeneratedColumn get cid => + $composableBuilder(column: $table.cid, builder: (column) => column); + + GeneratedColumnWithTypeConverter?, String> get ownCapabilities => + $composableBuilder( + column: $table.ownCapabilities, builder: (column) => column); + + GeneratedColumnWithTypeConverter, String> get config => + $composableBuilder(column: $table.config, builder: (column) => column); + + GeneratedColumn get frozen => + $composableBuilder(column: $table.frozen, builder: (column) => column); + + GeneratedColumn get lastMessageAt => $composableBuilder( + column: $table.lastMessageAt, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); + + GeneratedColumn get updatedAt => + $composableBuilder(column: $table.updatedAt, builder: (column) => column); + + GeneratedColumn get deletedAt => + $composableBuilder(column: $table.deletedAt, builder: (column) => column); + + GeneratedColumn get memberCount => $composableBuilder( + column: $table.memberCount, builder: (column) => column); + + GeneratedColumn get createdById => $composableBuilder( + column: $table.createdById, builder: (column) => column); + + GeneratedColumnWithTypeConverter?, String> + get extraData => $composableBuilder( + column: $table.extraData, builder: (column) => column); + + Expression messagesRefs( + Expression Function($$MessagesTableAnnotationComposer a) f) { + final $$MessagesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.cid, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.channelCid, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableAnnotationComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); } - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - if (id.present) { - map['id'] = Variable(id.value); - } - if (type.present) { - map['type'] = Variable(type.value); - } - if (ownUser.present) { - map['own_user'] = Variable( - $ConnectionEventsTable.$converterownUsern.toSql(ownUser.value)); - } - if (totalUnreadCount.present) { - map['total_unread_count'] = Variable(totalUnreadCount.value); - } - if (unreadChannels.present) { - map['unread_channels'] = Variable(unreadChannels.value); - } - if (lastEventAt.present) { - map['last_event_at'] = Variable(lastEventAt.value); - } - if (lastSyncAt.present) { - map['last_sync_at'] = Variable(lastSyncAt.value); - } - return map; + Expression draftMessagesRefs( + Expression Function($$DraftMessagesTableAnnotationComposer a) f) { + final $$DraftMessagesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.cid, + referencedTable: $db.draftMessages, + getReferencedColumn: (t) => t.channelCid, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$DraftMessagesTableAnnotationComposer( + $db: $db, + $table: $db.draftMessages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); } - @override - String toString() { - return (StringBuffer('ConnectionEventsCompanion(') - ..write('id: $id, ') - ..write('type: $type, ') - ..write('ownUser: $ownUser, ') - ..write('totalUnreadCount: $totalUnreadCount, ') - ..write('unreadChannels: $unreadChannels, ') - ..write('lastEventAt: $lastEventAt, ') - ..write('lastSyncAt: $lastSyncAt') - ..write(')')) - .toString(); + Expression membersRefs( + Expression Function($$MembersTableAnnotationComposer a) f) { + final $$MembersTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.cid, + referencedTable: $db.members, + getReferencedColumn: (t) => t.channelCid, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MembersTableAnnotationComposer( + $db: $db, + $table: $db.members, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } + + Expression readsRefs( + Expression Function($$ReadsTableAnnotationComposer a) f) { + final $$ReadsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.cid, + referencedTable: $db.reads, + getReferencedColumn: (t) => t.channelCid, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ReadsTableAnnotationComposer( + $db: $db, + $table: $db.reads, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); } } -abstract class _$DriftChatDatabase extends GeneratedDatabase { - _$DriftChatDatabase(QueryExecutor e) : super(e); - $DriftChatDatabaseManager get managers => $DriftChatDatabaseManager(this); - late final $ChannelsTable channels = $ChannelsTable(this); - late final $MessagesTable messages = $MessagesTable(this); - late final $PinnedMessagesTable pinnedMessages = $PinnedMessagesTable(this); - late final $PollsTable polls = $PollsTable(this); - late final $PollVotesTable pollVotes = $PollVotesTable(this); - late final $PinnedMessageReactionsTable pinnedMessageReactions = - $PinnedMessageReactionsTable(this); - late final $ReactionsTable reactions = $ReactionsTable(this); - late final $UsersTable users = $UsersTable(this); - late final $MembersTable members = $MembersTable(this); - late final $ReadsTable reads = $ReadsTable(this); - late final $ChannelQueriesTable channelQueries = $ChannelQueriesTable(this); - late final $ConnectionEventsTable connectionEvents = - $ConnectionEventsTable(this); - late final UserDao userDao = UserDao(this as DriftChatDatabase); - late final ChannelDao channelDao = ChannelDao(this as DriftChatDatabase); - late final MessageDao messageDao = MessageDao(this as DriftChatDatabase); - late final PinnedMessageDao pinnedMessageDao = - PinnedMessageDao(this as DriftChatDatabase); - late final PinnedMessageReactionDao pinnedMessageReactionDao = - PinnedMessageReactionDao(this as DriftChatDatabase); - late final MemberDao memberDao = MemberDao(this as DriftChatDatabase); - late final PollDao pollDao = PollDao(this as DriftChatDatabase); - late final PollVoteDao pollVoteDao = PollVoteDao(this as DriftChatDatabase); - late final ReactionDao reactionDao = ReactionDao(this as DriftChatDatabase); - late final ReadDao readDao = ReadDao(this as DriftChatDatabase); - late final ChannelQueryDao channelQueryDao = - ChannelQueryDao(this as DriftChatDatabase); - late final ConnectionEventDao connectionEventDao = - ConnectionEventDao(this as DriftChatDatabase); - @override - Iterable> get allTables => - allSchemaEntities.whereType>(); - @override - List get allSchemaEntities => [ - channels, - messages, - pinnedMessages, - polls, - pollVotes, - pinnedMessageReactions, - reactions, - users, - members, - reads, - channelQueries, - connectionEvents - ]; - @override - StreamQueryUpdateRules get streamUpdateRules => const StreamQueryUpdateRules( - [ - WritePropagation( - on: TableUpdateQuery.onTableName('channels', - limitUpdateKind: UpdateKind.delete), - result: [ - TableUpdate('messages', kind: UpdateKind.delete), - ], - ), - WritePropagation( - on: TableUpdateQuery.onTableName('polls', - limitUpdateKind: UpdateKind.delete), - result: [ - TableUpdate('poll_votes', kind: UpdateKind.delete), - ], - ), - WritePropagation( - on: TableUpdateQuery.onTableName('pinned_messages', - limitUpdateKind: UpdateKind.delete), - result: [ - TableUpdate('pinned_message_reactions', kind: UpdateKind.delete), - ], - ), - WritePropagation( - on: TableUpdateQuery.onTableName('messages', - limitUpdateKind: UpdateKind.delete), - result: [ - TableUpdate('reactions', kind: UpdateKind.delete), - ], - ), - WritePropagation( - on: TableUpdateQuery.onTableName('channels', - limitUpdateKind: UpdateKind.delete), - result: [ - TableUpdate('members', kind: UpdateKind.delete), - ], +class $$ChannelsTableTableManager extends RootTableManager< + _$DriftChatDatabase, + $ChannelsTable, + ChannelEntity, + $$ChannelsTableFilterComposer, + $$ChannelsTableOrderingComposer, + $$ChannelsTableAnnotationComposer, + $$ChannelsTableCreateCompanionBuilder, + $$ChannelsTableUpdateCompanionBuilder, + (ChannelEntity, $$ChannelsTableReferences), + ChannelEntity, + PrefetchHooks Function( + {bool messagesRefs, + bool draftMessagesRefs, + bool membersRefs, + bool readsRefs})> { + $$ChannelsTableTableManager(_$DriftChatDatabase db, $ChannelsTable table) + : super(TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$ChannelsTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$ChannelsTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => + $$ChannelsTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: ({ + Value id = const Value.absent(), + Value type = const Value.absent(), + Value cid = const Value.absent(), + Value?> ownCapabilities = const Value.absent(), + Value> config = const Value.absent(), + Value frozen = const Value.absent(), + Value lastMessageAt = const Value.absent(), + Value createdAt = const Value.absent(), + Value updatedAt = const Value.absent(), + Value deletedAt = const Value.absent(), + Value memberCount = const Value.absent(), + Value createdById = const Value.absent(), + Value?> extraData = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ChannelsCompanion( + id: id, + type: type, + cid: cid, + ownCapabilities: ownCapabilities, + config: config, + frozen: frozen, + lastMessageAt: lastMessageAt, + createdAt: createdAt, + updatedAt: updatedAt, + deletedAt: deletedAt, + memberCount: memberCount, + createdById: createdById, + extraData: extraData, + rowid: rowid, ), - WritePropagation( - on: TableUpdateQuery.onTableName('channels', - limitUpdateKind: UpdateKind.delete), - result: [ - TableUpdate('reads', kind: UpdateKind.delete), - ], + createCompanionCallback: ({ + required String id, + required String type, + required String cid, + Value?> ownCapabilities = const Value.absent(), + required Map config, + Value frozen = const Value.absent(), + Value lastMessageAt = const Value.absent(), + Value createdAt = const Value.absent(), + Value updatedAt = const Value.absent(), + Value deletedAt = const Value.absent(), + Value memberCount = const Value.absent(), + Value createdById = const Value.absent(), + Value?> extraData = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ChannelsCompanion.insert( + id: id, + type: type, + cid: cid, + ownCapabilities: ownCapabilities, + config: config, + frozen: frozen, + lastMessageAt: lastMessageAt, + createdAt: createdAt, + updatedAt: updatedAt, + deletedAt: deletedAt, + memberCount: memberCount, + createdById: createdById, + extraData: extraData, + rowid: rowid, ), - ], - ); + withReferenceMapper: (p0) => p0 + .map((e) => + (e.readTable(table), $$ChannelsTableReferences(db, table, e))) + .toList(), + prefetchHooksCallback: ( + {messagesRefs = false, + draftMessagesRefs = false, + membersRefs = false, + readsRefs = false}) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [ + if (messagesRefs) db.messages, + if (draftMessagesRefs) db.draftMessages, + if (membersRefs) db.members, + if (readsRefs) db.reads + ], + addJoins: null, + getPrefetchedDataCallback: (items) async { + return [ + if (messagesRefs) + await $_getPrefetchedData( + currentTable: table, + referencedTable: + $$ChannelsTableReferences._messagesRefsTable(db), + managerFromTypedResult: (p0) => + $$ChannelsTableReferences(db, table, p0) + .messagesRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems + .where((e) => e.channelCid == item.cid), + typedResults: items), + if (draftMessagesRefs) + await $_getPrefetchedData( + currentTable: table, + referencedTable: $$ChannelsTableReferences + ._draftMessagesRefsTable(db), + managerFromTypedResult: (p0) => + $$ChannelsTableReferences(db, table, p0) + .draftMessagesRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems + .where((e) => e.channelCid == item.cid), + typedResults: items), + if (membersRefs) + await $_getPrefetchedData( + currentTable: table, + referencedTable: + $$ChannelsTableReferences._membersRefsTable(db), + managerFromTypedResult: (p0) => + $$ChannelsTableReferences(db, table, p0) + .membersRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems + .where((e) => e.channelCid == item.cid), + typedResults: items), + if (readsRefs) + await $_getPrefetchedData( + currentTable: table, + referencedTable: + $$ChannelsTableReferences._readsRefsTable(db), + managerFromTypedResult: (p0) => + $$ChannelsTableReferences(db, table, p0).readsRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems + .where((e) => e.channelCid == item.cid), + typedResults: items) + ]; + }, + ); + }, + )); } -typedef $$ChannelsTableCreateCompanionBuilder = ChannelsCompanion Function({ +typedef $$ChannelsTableProcessedTableManager = ProcessedTableManager< + _$DriftChatDatabase, + $ChannelsTable, + ChannelEntity, + $$ChannelsTableFilterComposer, + $$ChannelsTableOrderingComposer, + $$ChannelsTableAnnotationComposer, + $$ChannelsTableCreateCompanionBuilder, + $$ChannelsTableUpdateCompanionBuilder, + (ChannelEntity, $$ChannelsTableReferences), + ChannelEntity, + PrefetchHooks Function( + {bool messagesRefs, + bool draftMessagesRefs, + bool membersRefs, + bool readsRefs})>; +typedef $$MessagesTableCreateCompanionBuilder = MessagesCompanion Function({ required String id, - required String type, - required String cid, - Value?> ownCapabilities, - required Map config, - Value frozen, - Value lastMessageAt, - Value createdAt, - Value updatedAt, - Value deletedAt, - Value memberCount, - Value createdById, + Value messageText, + required List attachments, + required String state, + Value type, + required List mentionedUsers, + Value?> reactionCounts, + Value?> reactionScores, + Value parentId, + Value quotedMessageId, + Value pollId, + Value replyCount, + Value showInChannel, + Value shadowed, + Value command, + Value localCreatedAt, + Value remoteCreatedAt, + Value localUpdatedAt, + Value remoteUpdatedAt, + Value localDeletedAt, + Value remoteDeletedAt, + Value messageTextUpdatedAt, + Value userId, + Value pinned, + Value pinnedAt, + Value pinExpires, + Value pinnedByUserId, + required String channelCid, + Value?> i18n, + Value?> restrictedVisibility, + Value draftMessageId, Value?> extraData, Value rowid, }); -typedef $$ChannelsTableUpdateCompanionBuilder = ChannelsCompanion Function({ +typedef $$MessagesTableUpdateCompanionBuilder = MessagesCompanion Function({ Value id, + Value messageText, + Value> attachments, + Value state, Value type, - Value cid, - Value?> ownCapabilities, - Value> config, - Value frozen, - Value lastMessageAt, - Value createdAt, - Value updatedAt, - Value deletedAt, - Value memberCount, - Value createdById, + Value> mentionedUsers, + Value?> reactionCounts, + Value?> reactionScores, + Value parentId, + Value quotedMessageId, + Value pollId, + Value replyCount, + Value showInChannel, + Value shadowed, + Value command, + Value localCreatedAt, + Value remoteCreatedAt, + Value localUpdatedAt, + Value remoteUpdatedAt, + Value localDeletedAt, + Value remoteDeletedAt, + Value messageTextUpdatedAt, + Value userId, + Value pinned, + Value pinnedAt, + Value pinExpires, + Value pinnedByUserId, + Value channelCid, + Value?> i18n, + Value?> restrictedVisibility, + Value draftMessageId, Value?> extraData, Value rowid, }); -final class $$ChannelsTableReferences - extends BaseReferences<_$DriftChatDatabase, $ChannelsTable, ChannelEntity> { - $$ChannelsTableReferences(super.$_db, super.$_table, super.$_typedResult); +final class $$MessagesTableReferences + extends BaseReferences<_$DriftChatDatabase, $MessagesTable, MessageEntity> { + $$MessagesTableReferences(super.$_db, super.$_table, super.$_typedResult); + + static $ChannelsTable _channelCidTable(_$DriftChatDatabase db) => + db.channels.createAlias( + $_aliasNameGenerator(db.messages.channelCid, db.channels.cid)); + + $$ChannelsTableProcessedTableManager get channelCid { + final $_column = $_itemColumn('channel_cid')!; + + final manager = $$ChannelsTableTableManager($_db, $_db.channels) + .filter((f) => f.cid.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_channelCidTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item])); + } + + static MultiTypedResultKey<$DraftMessagesTable, List> + _draftMessagesRefsTable(_$DriftChatDatabase db) => + MultiTypedResultKey.fromTable(db.draftMessages, + aliasName: $_aliasNameGenerator( + db.messages.id, db.draftMessages.parentId)); + + $$DraftMessagesTableProcessedTableManager get draftMessagesRefs { + final manager = $$DraftMessagesTableTableManager($_db, $_db.draftMessages) + .filter((f) => f.parentId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull(_draftMessagesRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache)); + } + + static MultiTypedResultKey<$ReactionsTable, List> + _reactionsRefsTable(_$DriftChatDatabase db) => + MultiTypedResultKey.fromTable(db.reactions, + aliasName: + $_aliasNameGenerator(db.messages.id, db.reactions.messageId)); + + $$ReactionsTableProcessedTableManager get reactionsRefs { + final manager = $$ReactionsTableTableManager($_db, $_db.reactions) + .filter((f) => f.messageId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull(_reactionsRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache)); + } +} + +class $$MessagesTableFilterComposer + extends Composer<_$DriftChatDatabase, $MessagesTable> { + $$MessagesTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, builder: (column) => ColumnFilters(column)); + + ColumnFilters get messageText => $composableBuilder( + column: $table.messageText, builder: (column) => ColumnFilters(column)); + + ColumnWithTypeConverterFilters, List, String> + get attachments => $composableBuilder( + column: $table.attachments, + builder: (column) => ColumnWithTypeConverterFilters(column)); + + ColumnFilters get state => $composableBuilder( + column: $table.state, builder: (column) => ColumnFilters(column)); + + ColumnFilters get type => $composableBuilder( + column: $table.type, builder: (column) => ColumnFilters(column)); + + ColumnWithTypeConverterFilters, List, String> + get mentionedUsers => $composableBuilder( + column: $table.mentionedUsers, + builder: (column) => ColumnWithTypeConverterFilters(column)); + + ColumnWithTypeConverterFilters?, Map, String> + get reactionCounts => $composableBuilder( + column: $table.reactionCounts, + builder: (column) => ColumnWithTypeConverterFilters(column)); + + ColumnWithTypeConverterFilters?, Map, String> + get reactionScores => $composableBuilder( + column: $table.reactionScores, + builder: (column) => ColumnWithTypeConverterFilters(column)); + + ColumnFilters get parentId => $composableBuilder( + column: $table.parentId, builder: (column) => ColumnFilters(column)); + + ColumnFilters get quotedMessageId => $composableBuilder( + column: $table.quotedMessageId, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get pollId => $composableBuilder( + column: $table.pollId, builder: (column) => ColumnFilters(column)); + + ColumnFilters get replyCount => $composableBuilder( + column: $table.replyCount, builder: (column) => ColumnFilters(column)); + + ColumnFilters get showInChannel => $composableBuilder( + column: $table.showInChannel, builder: (column) => ColumnFilters(column)); + + ColumnFilters get shadowed => $composableBuilder( + column: $table.shadowed, builder: (column) => ColumnFilters(column)); + + ColumnFilters get command => $composableBuilder( + column: $table.command, builder: (column) => ColumnFilters(column)); + + ColumnFilters get localCreatedAt => $composableBuilder( + column: $table.localCreatedAt, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get remoteCreatedAt => $composableBuilder( + column: $table.remoteCreatedAt, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get localUpdatedAt => $composableBuilder( + column: $table.localUpdatedAt, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get remoteUpdatedAt => $composableBuilder( + column: $table.remoteUpdatedAt, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get localDeletedAt => $composableBuilder( + column: $table.localDeletedAt, + builder: (column) => ColumnFilters(column)); - static MultiTypedResultKey<$MessagesTable, List> - _messagesRefsTable(_$DriftChatDatabase db) => - MultiTypedResultKey.fromTable(db.messages, - aliasName: $_aliasNameGenerator( - db.channels.cid, db.messages.channelCid)); + ColumnFilters get remoteDeletedAt => $composableBuilder( + column: $table.remoteDeletedAt, + builder: (column) => ColumnFilters(column)); - $$MessagesTableProcessedTableManager get messagesRefs { - final manager = $$MessagesTableTableManager($_db, $_db.messages).filter( - (f) => f.channelCid.cid.sqlEquals($_itemColumn('cid')!)); + ColumnFilters get messageTextUpdatedAt => $composableBuilder( + column: $table.messageTextUpdatedAt, + builder: (column) => ColumnFilters(column)); - final cache = $_typedResult.readTableOrNull(_messagesRefsTable($_db)); - return ProcessedTableManager( - manager.$state.copyWith(prefetchedData: cache)); - } + ColumnFilters get userId => $composableBuilder( + column: $table.userId, builder: (column) => ColumnFilters(column)); - static MultiTypedResultKey<$MembersTable, List> - _membersRefsTable(_$DriftChatDatabase db) => - MultiTypedResultKey.fromTable(db.members, - aliasName: - $_aliasNameGenerator(db.channels.cid, db.members.channelCid)); + ColumnFilters get pinned => $composableBuilder( + column: $table.pinned, builder: (column) => ColumnFilters(column)); - $$MembersTableProcessedTableManager get membersRefs { - final manager = $$MembersTableTableManager($_db, $_db.members).filter( - (f) => f.channelCid.cid.sqlEquals($_itemColumn('cid')!)); + ColumnFilters get pinnedAt => $composableBuilder( + column: $table.pinnedAt, builder: (column) => ColumnFilters(column)); - final cache = $_typedResult.readTableOrNull(_membersRefsTable($_db)); - return ProcessedTableManager( - manager.$state.copyWith(prefetchedData: cache)); - } + ColumnFilters get pinExpires => $composableBuilder( + column: $table.pinExpires, builder: (column) => ColumnFilters(column)); - static MultiTypedResultKey<$ReadsTable, List> _readsRefsTable( - _$DriftChatDatabase db) => - MultiTypedResultKey.fromTable(db.reads, - aliasName: - $_aliasNameGenerator(db.channels.cid, db.reads.channelCid)); + ColumnFilters get pinnedByUserId => $composableBuilder( + column: $table.pinnedByUserId, + builder: (column) => ColumnFilters(column)); - $$ReadsTableProcessedTableManager get readsRefs { - final manager = $$ReadsTableTableManager($_db, $_db.reads).filter( - (f) => f.channelCid.cid.sqlEquals($_itemColumn('cid')!)); + ColumnWithTypeConverterFilters?, Map, + String> + get i18n => $composableBuilder( + column: $table.i18n, + builder: (column) => ColumnWithTypeConverterFilters(column)); - final cache = $_typedResult.readTableOrNull(_readsRefsTable($_db)); - return ProcessedTableManager( - manager.$state.copyWith(prefetchedData: cache)); + ColumnWithTypeConverterFilters?, List, String> + get restrictedVisibility => $composableBuilder( + column: $table.restrictedVisibility, + builder: (column) => ColumnWithTypeConverterFilters(column)); + + ColumnFilters get draftMessageId => $composableBuilder( + column: $table.draftMessageId, + builder: (column) => ColumnFilters(column)); + + ColumnWithTypeConverterFilters?, Map, + String> + get extraData => $composableBuilder( + column: $table.extraData, + builder: (column) => ColumnWithTypeConverterFilters(column)); + + $$ChannelsTableFilterComposer get channelCid { + final $$ChannelsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.channelCid, + referencedTable: $db.channels, + getReferencedColumn: (t) => t.cid, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ChannelsTableFilterComposer( + $db: $db, + $table: $db.channels, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } + + Expression draftMessagesRefs( + Expression Function($$DraftMessagesTableFilterComposer f) f) { + final $$DraftMessagesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.draftMessages, + getReferencedColumn: (t) => t.parentId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$DraftMessagesTableFilterComposer( + $db: $db, + $table: $db.draftMessages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } + + Expression reactionsRefs( + Expression Function($$ReactionsTableFilterComposer f) f) { + final $$ReactionsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.reactions, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ReactionsTableFilterComposer( + $db: $db, + $table: $db.reactions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); } } -class $$ChannelsTableFilterComposer - extends Composer<_$DriftChatDatabase, $ChannelsTable> { - $$ChannelsTableFilterComposer({ +class $$MessagesTableOrderingComposer + extends Composer<_$DriftChatDatabase, $MessagesTable> { + $$MessagesTableOrderingComposer({ required super.$db, required super.$table, super.joinBuilder, super.$addJoinBuilderToRootComposer, super.$removeJoinBuilderFromRootComposer, }); - ColumnFilters get id => $composableBuilder( - column: $table.id, builder: (column) => ColumnFilters(column)); + ColumnOrderings get id => $composableBuilder( + column: $table.id, builder: (column) => ColumnOrderings(column)); - ColumnFilters get type => $composableBuilder( - column: $table.type, builder: (column) => ColumnFilters(column)); + ColumnOrderings get messageText => $composableBuilder( + column: $table.messageText, builder: (column) => ColumnOrderings(column)); - ColumnFilters get cid => $composableBuilder( - column: $table.cid, builder: (column) => ColumnFilters(column)); + ColumnOrderings get attachments => $composableBuilder( + column: $table.attachments, builder: (column) => ColumnOrderings(column)); - ColumnWithTypeConverterFilters?, List, String> - get ownCapabilities => $composableBuilder( - column: $table.ownCapabilities, - builder: (column) => ColumnWithTypeConverterFilters(column)); + ColumnOrderings get state => $composableBuilder( + column: $table.state, builder: (column) => ColumnOrderings(column)); - ColumnWithTypeConverterFilters, Map, - String> - get config => $composableBuilder( - column: $table.config, - builder: (column) => ColumnWithTypeConverterFilters(column)); + ColumnOrderings get type => $composableBuilder( + column: $table.type, builder: (column) => ColumnOrderings(column)); - ColumnFilters get frozen => $composableBuilder( - column: $table.frozen, builder: (column) => ColumnFilters(column)); + ColumnOrderings get mentionedUsers => $composableBuilder( + column: $table.mentionedUsers, + builder: (column) => ColumnOrderings(column)); - ColumnFilters get lastMessageAt => $composableBuilder( - column: $table.lastMessageAt, builder: (column) => ColumnFilters(column)); + ColumnOrderings get reactionCounts => $composableBuilder( + column: $table.reactionCounts, + builder: (column) => ColumnOrderings(column)); - ColumnFilters get createdAt => $composableBuilder( - column: $table.createdAt, builder: (column) => ColumnFilters(column)); + ColumnOrderings get reactionScores => $composableBuilder( + column: $table.reactionScores, + builder: (column) => ColumnOrderings(column)); - ColumnFilters get updatedAt => $composableBuilder( - column: $table.updatedAt, builder: (column) => ColumnFilters(column)); + ColumnOrderings get parentId => $composableBuilder( + column: $table.parentId, builder: (column) => ColumnOrderings(column)); - ColumnFilters get deletedAt => $composableBuilder( - column: $table.deletedAt, builder: (column) => ColumnFilters(column)); + ColumnOrderings get quotedMessageId => $composableBuilder( + column: $table.quotedMessageId, + builder: (column) => ColumnOrderings(column)); - ColumnFilters get memberCount => $composableBuilder( - column: $table.memberCount, builder: (column) => ColumnFilters(column)); + ColumnOrderings get pollId => $composableBuilder( + column: $table.pollId, builder: (column) => ColumnOrderings(column)); - ColumnFilters get createdById => $composableBuilder( - column: $table.createdById, builder: (column) => ColumnFilters(column)); + ColumnOrderings get replyCount => $composableBuilder( + column: $table.replyCount, builder: (column) => ColumnOrderings(column)); - ColumnWithTypeConverterFilters?, Map, - String> - get extraData => $composableBuilder( - column: $table.extraData, - builder: (column) => ColumnWithTypeConverterFilters(column)); + ColumnOrderings get showInChannel => $composableBuilder( + column: $table.showInChannel, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get shadowed => $composableBuilder( + column: $table.shadowed, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get command => $composableBuilder( + column: $table.command, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get localCreatedAt => $composableBuilder( + column: $table.localCreatedAt, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get remoteCreatedAt => $composableBuilder( + column: $table.remoteCreatedAt, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get localUpdatedAt => $composableBuilder( + column: $table.localUpdatedAt, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get remoteUpdatedAt => $composableBuilder( + column: $table.remoteUpdatedAt, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get localDeletedAt => $composableBuilder( + column: $table.localDeletedAt, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get remoteDeletedAt => $composableBuilder( + column: $table.remoteDeletedAt, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get messageTextUpdatedAt => $composableBuilder( + column: $table.messageTextUpdatedAt, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get userId => $composableBuilder( + column: $table.userId, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get pinned => $composableBuilder( + column: $table.pinned, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get pinnedAt => $composableBuilder( + column: $table.pinnedAt, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get pinExpires => $composableBuilder( + column: $table.pinExpires, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get pinnedByUserId => $composableBuilder( + column: $table.pinnedByUserId, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get i18n => $composableBuilder( + column: $table.i18n, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get restrictedVisibility => $composableBuilder( + column: $table.restrictedVisibility, + builder: (column) => ColumnOrderings(column)); - Expression messagesRefs( - Expression Function($$MessagesTableFilterComposer f) f) { - final $$MessagesTableFilterComposer composer = $composerBuilder( - composer: this, - getCurrentColumn: (t) => t.cid, - referencedTable: $db.messages, - getReferencedColumn: (t) => t.channelCid, - builder: (joinBuilder, - {$addJoinBuilderToRootComposer, - $removeJoinBuilderFromRootComposer}) => - $$MessagesTableFilterComposer( - $db: $db, - $table: $db.messages, - $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, - joinBuilder: joinBuilder, - $removeJoinBuilderFromRootComposer: - $removeJoinBuilderFromRootComposer, - )); - return f(composer); - } + ColumnOrderings get draftMessageId => $composableBuilder( + column: $table.draftMessageId, + builder: (column) => ColumnOrderings(column)); - Expression membersRefs( - Expression Function($$MembersTableFilterComposer f) f) { - final $$MembersTableFilterComposer composer = $composerBuilder( - composer: this, - getCurrentColumn: (t) => t.cid, - referencedTable: $db.members, - getReferencedColumn: (t) => t.channelCid, - builder: (joinBuilder, - {$addJoinBuilderToRootComposer, - $removeJoinBuilderFromRootComposer}) => - $$MembersTableFilterComposer( - $db: $db, - $table: $db.members, - $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, - joinBuilder: joinBuilder, - $removeJoinBuilderFromRootComposer: - $removeJoinBuilderFromRootComposer, - )); - return f(composer); - } + ColumnOrderings get extraData => $composableBuilder( + column: $table.extraData, builder: (column) => ColumnOrderings(column)); - Expression readsRefs( - Expression Function($$ReadsTableFilterComposer f) f) { - final $$ReadsTableFilterComposer composer = $composerBuilder( + $$ChannelsTableOrderingComposer get channelCid { + final $$ChannelsTableOrderingComposer composer = $composerBuilder( composer: this, - getCurrentColumn: (t) => t.cid, - referencedTable: $db.reads, - getReferencedColumn: (t) => t.channelCid, + getCurrentColumn: (t) => t.channelCid, + referencedTable: $db.channels, + getReferencedColumn: (t) => t.cid, builder: (joinBuilder, {$addJoinBuilderToRootComposer, $removeJoinBuilderFromRootComposer}) => - $$ReadsTableFilterComposer( + $$ChannelsTableOrderingComposer( $db: $db, - $table: $db.reads, + $table: $db.channels, $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, joinBuilder: joinBuilder, $removeJoinBuilderFromRootComposer: $removeJoinBuilderFromRootComposer, )); - return f(composer); + return composer; } } -class $$ChannelsTableOrderingComposer - extends Composer<_$DriftChatDatabase, $ChannelsTable> { - $$ChannelsTableOrderingComposer({ +class $$MessagesTableAnnotationComposer + extends Composer<_$DriftChatDatabase, $MessagesTable> { + $$MessagesTableAnnotationComposer({ required super.$db, required super.$table, super.joinBuilder, super.$addJoinBuilderToRootComposer, super.$removeJoinBuilderFromRootComposer, }); - ColumnOrderings get id => $composableBuilder( - column: $table.id, builder: (column) => ColumnOrderings(column)); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); - ColumnOrderings get type => $composableBuilder( - column: $table.type, builder: (column) => ColumnOrderings(column)); + GeneratedColumn get messageText => $composableBuilder( + column: $table.messageText, builder: (column) => column); - ColumnOrderings get cid => $composableBuilder( - column: $table.cid, builder: (column) => ColumnOrderings(column)); + GeneratedColumnWithTypeConverter, String> get attachments => + $composableBuilder( + column: $table.attachments, builder: (column) => column); - ColumnOrderings get ownCapabilities => $composableBuilder( - column: $table.ownCapabilities, - builder: (column) => ColumnOrderings(column)); + GeneratedColumn get state => + $composableBuilder(column: $table.state, builder: (column) => column); - ColumnOrderings get config => $composableBuilder( - column: $table.config, builder: (column) => ColumnOrderings(column)); + GeneratedColumn get type => + $composableBuilder(column: $table.type, builder: (column) => column); - ColumnOrderings get frozen => $composableBuilder( - column: $table.frozen, builder: (column) => ColumnOrderings(column)); + GeneratedColumnWithTypeConverter, String> get mentionedUsers => + $composableBuilder( + column: $table.mentionedUsers, builder: (column) => column); - ColumnOrderings get lastMessageAt => $composableBuilder( - column: $table.lastMessageAt, - builder: (column) => ColumnOrderings(column)); + GeneratedColumnWithTypeConverter?, String> + get reactionCounts => $composableBuilder( + column: $table.reactionCounts, builder: (column) => column); - ColumnOrderings get createdAt => $composableBuilder( - column: $table.createdAt, builder: (column) => ColumnOrderings(column)); + GeneratedColumnWithTypeConverter?, String> + get reactionScores => $composableBuilder( + column: $table.reactionScores, builder: (column) => column); - ColumnOrderings get updatedAt => $composableBuilder( - column: $table.updatedAt, builder: (column) => ColumnOrderings(column)); + GeneratedColumn get parentId => + $composableBuilder(column: $table.parentId, builder: (column) => column); - ColumnOrderings get deletedAt => $composableBuilder( - column: $table.deletedAt, builder: (column) => ColumnOrderings(column)); + GeneratedColumn get quotedMessageId => $composableBuilder( + column: $table.quotedMessageId, builder: (column) => column); - ColumnOrderings get memberCount => $composableBuilder( - column: $table.memberCount, builder: (column) => ColumnOrderings(column)); + GeneratedColumn get pollId => + $composableBuilder(column: $table.pollId, builder: (column) => column); - ColumnOrderings get createdById => $composableBuilder( - column: $table.createdById, builder: (column) => ColumnOrderings(column)); + GeneratedColumn get replyCount => $composableBuilder( + column: $table.replyCount, builder: (column) => column); - ColumnOrderings get extraData => $composableBuilder( - column: $table.extraData, builder: (column) => ColumnOrderings(column)); -} + GeneratedColumn get showInChannel => $composableBuilder( + column: $table.showInChannel, builder: (column) => column); -class $$ChannelsTableAnnotationComposer - extends Composer<_$DriftChatDatabase, $ChannelsTable> { - $$ChannelsTableAnnotationComposer({ - required super.$db, - required super.$table, - super.joinBuilder, - super.$addJoinBuilderToRootComposer, - super.$removeJoinBuilderFromRootComposer, - }); - GeneratedColumn get id => - $composableBuilder(column: $table.id, builder: (column) => column); + GeneratedColumn get shadowed => + $composableBuilder(column: $table.shadowed, builder: (column) => column); - GeneratedColumn get type => - $composableBuilder(column: $table.type, builder: (column) => column); + GeneratedColumn get command => + $composableBuilder(column: $table.command, builder: (column) => column); - GeneratedColumn get cid => - $composableBuilder(column: $table.cid, builder: (column) => column); + GeneratedColumn get localCreatedAt => $composableBuilder( + column: $table.localCreatedAt, builder: (column) => column); - GeneratedColumnWithTypeConverter?, String> get ownCapabilities => - $composableBuilder( - column: $table.ownCapabilities, builder: (column) => column); + GeneratedColumn get remoteCreatedAt => $composableBuilder( + column: $table.remoteCreatedAt, builder: (column) => column); - GeneratedColumnWithTypeConverter, String> get config => - $composableBuilder(column: $table.config, builder: (column) => column); + GeneratedColumn get localUpdatedAt => $composableBuilder( + column: $table.localUpdatedAt, builder: (column) => column); - GeneratedColumn get frozen => - $composableBuilder(column: $table.frozen, builder: (column) => column); + GeneratedColumn get remoteUpdatedAt => $composableBuilder( + column: $table.remoteUpdatedAt, builder: (column) => column); - GeneratedColumn get lastMessageAt => $composableBuilder( - column: $table.lastMessageAt, builder: (column) => column); + GeneratedColumn get localDeletedAt => $composableBuilder( + column: $table.localDeletedAt, builder: (column) => column); - GeneratedColumn get createdAt => - $composableBuilder(column: $table.createdAt, builder: (column) => column); + GeneratedColumn get remoteDeletedAt => $composableBuilder( + column: $table.remoteDeletedAt, builder: (column) => column); - GeneratedColumn get updatedAt => - $composableBuilder(column: $table.updatedAt, builder: (column) => column); + GeneratedColumn get messageTextUpdatedAt => $composableBuilder( + column: $table.messageTextUpdatedAt, builder: (column) => column); - GeneratedColumn get deletedAt => - $composableBuilder(column: $table.deletedAt, builder: (column) => column); + GeneratedColumn get userId => + $composableBuilder(column: $table.userId, builder: (column) => column); - GeneratedColumn get memberCount => $composableBuilder( - column: $table.memberCount, builder: (column) => column); + GeneratedColumn get pinned => + $composableBuilder(column: $table.pinned, builder: (column) => column); - GeneratedColumn get createdById => $composableBuilder( - column: $table.createdById, builder: (column) => column); + GeneratedColumn get pinnedAt => + $composableBuilder(column: $table.pinnedAt, builder: (column) => column); + + GeneratedColumn get pinExpires => $composableBuilder( + column: $table.pinExpires, builder: (column) => column); + + GeneratedColumn get pinnedByUserId => $composableBuilder( + column: $table.pinnedByUserId, builder: (column) => column); + + GeneratedColumnWithTypeConverter?, String> get i18n => + $composableBuilder(column: $table.i18n, builder: (column) => column); + + GeneratedColumnWithTypeConverter?, String> + get restrictedVisibility => $composableBuilder( + column: $table.restrictedVisibility, builder: (column) => column); + + GeneratedColumn get draftMessageId => $composableBuilder( + column: $table.draftMessageId, builder: (column) => column); GeneratedColumnWithTypeConverter?, String> get extraData => $composableBuilder( column: $table.extraData, builder: (column) => column); - Expression messagesRefs( - Expression Function($$MessagesTableAnnotationComposer a) f) { - final $$MessagesTableAnnotationComposer composer = $composerBuilder( + $$ChannelsTableAnnotationComposer get channelCid { + final $$ChannelsTableAnnotationComposer composer = $composerBuilder( composer: this, - getCurrentColumn: (t) => t.cid, - referencedTable: $db.messages, - getReferencedColumn: (t) => t.channelCid, + getCurrentColumn: (t) => t.channelCid, + referencedTable: $db.channels, + getReferencedColumn: (t) => t.cid, builder: (joinBuilder, {$addJoinBuilderToRootComposer, $removeJoinBuilderFromRootComposer}) => - $$MessagesTableAnnotationComposer( + $$ChannelsTableAnnotationComposer( $db: $db, - $table: $db.messages, + $table: $db.channels, $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, joinBuilder: joinBuilder, $removeJoinBuilderFromRootComposer: $removeJoinBuilderFromRootComposer, )); - return f(composer); + return composer; } - Expression membersRefs( - Expression Function($$MembersTableAnnotationComposer a) f) { - final $$MembersTableAnnotationComposer composer = $composerBuilder( + Expression draftMessagesRefs( + Expression Function($$DraftMessagesTableAnnotationComposer a) f) { + final $$DraftMessagesTableAnnotationComposer composer = $composerBuilder( composer: this, - getCurrentColumn: (t) => t.cid, - referencedTable: $db.members, - getReferencedColumn: (t) => t.channelCid, + getCurrentColumn: (t) => t.id, + referencedTable: $db.draftMessages, + getReferencedColumn: (t) => t.parentId, builder: (joinBuilder, {$addJoinBuilderToRootComposer, $removeJoinBuilderFromRootComposer}) => - $$MembersTableAnnotationComposer( + $$DraftMessagesTableAnnotationComposer( $db: $db, - $table: $db.members, + $table: $db.draftMessages, $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, joinBuilder: joinBuilder, $removeJoinBuilderFromRootComposer: @@ -8124,19 +9722,19 @@ class $$ChannelsTableAnnotationComposer return f(composer); } - Expression readsRefs( - Expression Function($$ReadsTableAnnotationComposer a) f) { - final $$ReadsTableAnnotationComposer composer = $composerBuilder( + Expression reactionsRefs( + Expression Function($$ReactionsTableAnnotationComposer a) f) { + final $$ReactionsTableAnnotationComposer composer = $composerBuilder( composer: this, - getCurrentColumn: (t) => t.cid, - referencedTable: $db.reads, - getReferencedColumn: (t) => t.channelCid, + getCurrentColumn: (t) => t.id, + referencedTable: $db.reactions, + getReferencedColumn: (t) => t.messageId, builder: (joinBuilder, {$addJoinBuilderToRootComposer, $removeJoinBuilderFromRootComposer}) => - $$ReadsTableAnnotationComposer( + $$ReactionsTableAnnotationComposer( $db: $db, - $table: $db.reads, + $table: $db.reactions, $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, joinBuilder: joinBuilder, $removeJoinBuilderFromRootComposer: @@ -8146,143 +9744,236 @@ class $$ChannelsTableAnnotationComposer } } -class $$ChannelsTableTableManager extends RootTableManager< +class $$MessagesTableTableManager extends RootTableManager< _$DriftChatDatabase, - $ChannelsTable, - ChannelEntity, - $$ChannelsTableFilterComposer, - $$ChannelsTableOrderingComposer, - $$ChannelsTableAnnotationComposer, - $$ChannelsTableCreateCompanionBuilder, - $$ChannelsTableUpdateCompanionBuilder, - (ChannelEntity, $$ChannelsTableReferences), - ChannelEntity, + $MessagesTable, + MessageEntity, + $$MessagesTableFilterComposer, + $$MessagesTableOrderingComposer, + $$MessagesTableAnnotationComposer, + $$MessagesTableCreateCompanionBuilder, + $$MessagesTableUpdateCompanionBuilder, + (MessageEntity, $$MessagesTableReferences), + MessageEntity, PrefetchHooks Function( - {bool messagesRefs, bool membersRefs, bool readsRefs})> { - $$ChannelsTableTableManager(_$DriftChatDatabase db, $ChannelsTable table) + {bool channelCid, bool draftMessagesRefs, bool reactionsRefs})> { + $$MessagesTableTableManager(_$DriftChatDatabase db, $MessagesTable table) : super(TableManagerState( db: db, table: table, createFilteringComposer: () => - $$ChannelsTableFilterComposer($db: db, $table: table), + $$MessagesTableFilterComposer($db: db, $table: table), createOrderingComposer: () => - $$ChannelsTableOrderingComposer($db: db, $table: table), + $$MessagesTableOrderingComposer($db: db, $table: table), createComputedFieldComposer: () => - $$ChannelsTableAnnotationComposer($db: db, $table: table), + $$MessagesTableAnnotationComposer($db: db, $table: table), updateCompanionCallback: ({ Value id = const Value.absent(), + Value messageText = const Value.absent(), + Value> attachments = const Value.absent(), + Value state = const Value.absent(), Value type = const Value.absent(), - Value cid = const Value.absent(), - Value?> ownCapabilities = const Value.absent(), - Value> config = const Value.absent(), - Value frozen = const Value.absent(), - Value lastMessageAt = const Value.absent(), - Value createdAt = const Value.absent(), - Value updatedAt = const Value.absent(), - Value deletedAt = const Value.absent(), - Value memberCount = const Value.absent(), - Value createdById = const Value.absent(), + Value> mentionedUsers = const Value.absent(), + Value?> reactionCounts = const Value.absent(), + Value?> reactionScores = const Value.absent(), + Value parentId = const Value.absent(), + Value quotedMessageId = const Value.absent(), + Value pollId = const Value.absent(), + Value replyCount = const Value.absent(), + Value showInChannel = const Value.absent(), + Value shadowed = const Value.absent(), + Value command = 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 messageTextUpdatedAt = const Value.absent(), + Value userId = const Value.absent(), + Value pinned = const Value.absent(), + Value pinnedAt = const Value.absent(), + Value pinExpires = const Value.absent(), + Value pinnedByUserId = const Value.absent(), + Value channelCid = const Value.absent(), + Value?> i18n = const Value.absent(), + Value?> restrictedVisibility = const Value.absent(), + Value draftMessageId = const Value.absent(), Value?> extraData = const Value.absent(), Value rowid = const Value.absent(), }) => - ChannelsCompanion( + MessagesCompanion( id: id, + messageText: messageText, + attachments: attachments, + state: state, type: type, - cid: cid, - ownCapabilities: ownCapabilities, - config: config, - frozen: frozen, - lastMessageAt: lastMessageAt, - createdAt: createdAt, - updatedAt: updatedAt, - deletedAt: deletedAt, - memberCount: memberCount, - createdById: createdById, + mentionedUsers: mentionedUsers, + reactionCounts: reactionCounts, + reactionScores: reactionScores, + parentId: parentId, + quotedMessageId: quotedMessageId, + pollId: pollId, + replyCount: replyCount, + showInChannel: showInChannel, + shadowed: shadowed, + command: command, + localCreatedAt: localCreatedAt, + remoteCreatedAt: remoteCreatedAt, + localUpdatedAt: localUpdatedAt, + remoteUpdatedAt: remoteUpdatedAt, + localDeletedAt: localDeletedAt, + remoteDeletedAt: remoteDeletedAt, + messageTextUpdatedAt: messageTextUpdatedAt, + userId: userId, + pinned: pinned, + pinnedAt: pinnedAt, + pinExpires: pinExpires, + pinnedByUserId: pinnedByUserId, + channelCid: channelCid, + i18n: i18n, + restrictedVisibility: restrictedVisibility, + draftMessageId: draftMessageId, extraData: extraData, rowid: rowid, ), createCompanionCallback: ({ required String id, - required String type, - required String cid, - Value?> ownCapabilities = const Value.absent(), - required Map config, - Value frozen = const Value.absent(), - Value lastMessageAt = const Value.absent(), - Value createdAt = const Value.absent(), - Value updatedAt = const Value.absent(), - Value deletedAt = const Value.absent(), - Value memberCount = const Value.absent(), - Value createdById = const Value.absent(), + Value messageText = const Value.absent(), + required List attachments, + required String state, + Value type = const Value.absent(), + required List mentionedUsers, + Value?> reactionCounts = const Value.absent(), + Value?> reactionScores = const Value.absent(), + Value parentId = const Value.absent(), + Value quotedMessageId = const Value.absent(), + Value pollId = const Value.absent(), + Value replyCount = const Value.absent(), + Value showInChannel = const Value.absent(), + Value shadowed = const Value.absent(), + Value command = 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 messageTextUpdatedAt = const Value.absent(), + Value userId = const Value.absent(), + Value pinned = const Value.absent(), + Value pinnedAt = const Value.absent(), + Value pinExpires = const Value.absent(), + Value pinnedByUserId = const Value.absent(), + required String channelCid, + Value?> i18n = const Value.absent(), + Value?> restrictedVisibility = const Value.absent(), + Value draftMessageId = const Value.absent(), Value?> extraData = const Value.absent(), Value rowid = const Value.absent(), }) => - ChannelsCompanion.insert( + MessagesCompanion.insert( id: id, + messageText: messageText, + attachments: attachments, + state: state, type: type, - cid: cid, - ownCapabilities: ownCapabilities, - config: config, - frozen: frozen, - lastMessageAt: lastMessageAt, - createdAt: createdAt, - updatedAt: updatedAt, - deletedAt: deletedAt, - memberCount: memberCount, - createdById: createdById, + mentionedUsers: mentionedUsers, + reactionCounts: reactionCounts, + reactionScores: reactionScores, + parentId: parentId, + quotedMessageId: quotedMessageId, + pollId: pollId, + replyCount: replyCount, + showInChannel: showInChannel, + shadowed: shadowed, + command: command, + localCreatedAt: localCreatedAt, + remoteCreatedAt: remoteCreatedAt, + localUpdatedAt: localUpdatedAt, + remoteUpdatedAt: remoteUpdatedAt, + localDeletedAt: localDeletedAt, + remoteDeletedAt: remoteDeletedAt, + messageTextUpdatedAt: messageTextUpdatedAt, + userId: userId, + pinned: pinned, + pinnedAt: pinnedAt, + pinExpires: pinExpires, + pinnedByUserId: pinnedByUserId, + channelCid: channelCid, + i18n: i18n, + restrictedVisibility: restrictedVisibility, + draftMessageId: draftMessageId, extraData: extraData, rowid: rowid, ), withReferenceMapper: (p0) => p0 .map((e) => - (e.readTable(table), $$ChannelsTableReferences(db, table, e))) + (e.readTable(table), $$MessagesTableReferences(db, table, e))) .toList(), prefetchHooksCallback: ( - {messagesRefs = false, membersRefs = false, readsRefs = false}) { + {channelCid = false, + draftMessagesRefs = false, + reactionsRefs = false}) { return PrefetchHooks( db: db, explicitlyWatchedTables: [ - if (messagesRefs) db.messages, - if (membersRefs) db.members, - if (readsRefs) db.reads + if (draftMessagesRefs) db.draftMessages, + if (reactionsRefs) db.reactions ], - addJoins: null, + addJoins: < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic>>(state) { + if (channelCid) { + state = state.withJoin( + currentTable: table, + currentColumn: table.channelCid, + referencedTable: + $$MessagesTableReferences._channelCidTable(db), + referencedColumn: + $$MessagesTableReferences._channelCidTable(db).cid, + ) as T; + } + + return state; + }, getPrefetchedDataCallback: (items) async { return [ - if (messagesRefs) - await $_getPrefetchedData( - currentTable: table, - referencedTable: - $$ChannelsTableReferences._messagesRefsTable(db), - managerFromTypedResult: (p0) => - $$ChannelsTableReferences(db, table, p0) - .messagesRefs, - referencedItemsForCurrentItem: - (item, referencedItems) => referencedItems - .where((e) => e.channelCid == item.cid), - typedResults: items), - if (membersRefs) - await $_getPrefetchedData( + if (draftMessagesRefs) + await $_getPrefetchedData( currentTable: table, - referencedTable: - $$ChannelsTableReferences._membersRefsTable(db), + referencedTable: $$MessagesTableReferences + ._draftMessagesRefsTable(db), managerFromTypedResult: (p0) => - $$ChannelsTableReferences(db, table, p0) - .membersRefs, - referencedItemsForCurrentItem: - (item, referencedItems) => referencedItems - .where((e) => e.channelCid == item.cid), + $$MessagesTableReferences(db, table, p0) + .draftMessagesRefs, + referencedItemsForCurrentItem: (item, + referencedItems) => + referencedItems.where((e) => e.parentId == item.id), typedResults: items), - if (readsRefs) - await $_getPrefetchedData( + if (reactionsRefs) + await $_getPrefetchedData( currentTable: table, referencedTable: - $$ChannelsTableReferences._readsRefsTable(db), + $$MessagesTableReferences._reactionsRefsTable(db), managerFromTypedResult: (p0) => - $$ChannelsTableReferences(db, table, p0).readsRefs, + $$MessagesTableReferences(db, table, p0) + .reactionsRefs, referencedItemsForCurrentItem: (item, referencedItems) => referencedItems - .where((e) => e.channelCid == item.cid), + .where((e) => e.messageId == item.id), typedResults: items) ]; }, @@ -8291,95 +9982,79 @@ class $$ChannelsTableTableManager extends RootTableManager< )); } -typedef $$ChannelsTableProcessedTableManager = ProcessedTableManager< +typedef $$MessagesTableProcessedTableManager = ProcessedTableManager< _$DriftChatDatabase, - $ChannelsTable, - ChannelEntity, - $$ChannelsTableFilterComposer, - $$ChannelsTableOrderingComposer, - $$ChannelsTableAnnotationComposer, - $$ChannelsTableCreateCompanionBuilder, - $$ChannelsTableUpdateCompanionBuilder, - (ChannelEntity, $$ChannelsTableReferences), - ChannelEntity, + $MessagesTable, + MessageEntity, + $$MessagesTableFilterComposer, + $$MessagesTableOrderingComposer, + $$MessagesTableAnnotationComposer, + $$MessagesTableCreateCompanionBuilder, + $$MessagesTableUpdateCompanionBuilder, + (MessageEntity, $$MessagesTableReferences), + MessageEntity, PrefetchHooks Function( - {bool messagesRefs, bool membersRefs, bool readsRefs})>; -typedef $$MessagesTableCreateCompanionBuilder = MessagesCompanion Function({ + {bool channelCid, bool draftMessagesRefs, bool reactionsRefs})>; +typedef $$DraftMessagesTableCreateCompanionBuilder = DraftMessagesCompanion + Function({ required String id, Value messageText, required List attachments, - required String state, Value type, required List mentionedUsers, - Value?> reactionCounts, - Value?> reactionScores, Value parentId, Value quotedMessageId, Value pollId, - Value replyCount, Value showInChannel, - Value shadowed, Value command, - Value localCreatedAt, - Value remoteCreatedAt, - Value localUpdatedAt, - Value remoteUpdatedAt, - Value localDeletedAt, - Value remoteDeletedAt, - Value messageTextUpdatedAt, - Value userId, - Value pinned, - Value pinnedAt, - Value pinExpires, - Value pinnedByUserId, + Value silent, + Value createdAt, required String channelCid, - Value?> i18n, - Value?> restrictedVisibility, Value?> extraData, Value rowid, }); -typedef $$MessagesTableUpdateCompanionBuilder = MessagesCompanion Function({ +typedef $$DraftMessagesTableUpdateCompanionBuilder = DraftMessagesCompanion + Function({ Value id, Value messageText, Value> attachments, - Value state, Value type, Value> mentionedUsers, - Value?> reactionCounts, - Value?> reactionScores, Value parentId, Value quotedMessageId, Value pollId, - Value replyCount, Value showInChannel, - Value shadowed, Value command, - Value localCreatedAt, - Value remoteCreatedAt, - Value localUpdatedAt, - Value remoteUpdatedAt, - Value localDeletedAt, - Value remoteDeletedAt, - Value messageTextUpdatedAt, - Value userId, - Value pinned, - Value pinnedAt, - Value pinExpires, - Value pinnedByUserId, + Value silent, + Value createdAt, Value channelCid, - Value?> i18n, - Value?> restrictedVisibility, Value?> extraData, Value rowid, }); -final class $$MessagesTableReferences - extends BaseReferences<_$DriftChatDatabase, $MessagesTable, MessageEntity> { - $$MessagesTableReferences(super.$_db, super.$_table, super.$_typedResult); +final class $$DraftMessagesTableReferences extends BaseReferences< + _$DriftChatDatabase, $DraftMessagesTable, DraftMessageEntity> { + $$DraftMessagesTableReferences( + super.$_db, super.$_table, super.$_typedResult); + + static $MessagesTable _parentIdTable(_$DriftChatDatabase db) => + db.messages.createAlias( + $_aliasNameGenerator(db.draftMessages.parentId, db.messages.id)); + + $$MessagesTableProcessedTableManager? get parentId { + final $_column = $_itemColumn('parent_id'); + if ($_column == null) return null; + final manager = $$MessagesTableTableManager($_db, $_db.messages) + .filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_parentIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item])); + } static $ChannelsTable _channelCidTable(_$DriftChatDatabase db) => db.channels.createAlias( - $_aliasNameGenerator(db.messages.channelCid, db.channels.cid)); + $_aliasNameGenerator(db.draftMessages.channelCid, db.channels.cid)); $$ChannelsTableProcessedTableManager get channelCid { final $_column = $_itemColumn('channel_cid')!; @@ -8391,26 +10066,11 @@ final class $$MessagesTableReferences return ProcessedTableManager( manager.$state.copyWith(prefetchedData: [item])); } - - static MultiTypedResultKey<$ReactionsTable, List> - _reactionsRefsTable(_$DriftChatDatabase db) => - MultiTypedResultKey.fromTable(db.reactions, - aliasName: - $_aliasNameGenerator(db.messages.id, db.reactions.messageId)); - - $$ReactionsTableProcessedTableManager get reactionsRefs { - final manager = $$ReactionsTableTableManager($_db, $_db.reactions) - .filter((f) => f.messageId.id.sqlEquals($_itemColumn('id')!)); - - final cache = $_typedResult.readTableOrNull(_reactionsRefsTable($_db)); - return ProcessedTableManager( - manager.$state.copyWith(prefetchedData: cache)); - } } -class $$MessagesTableFilterComposer - extends Composer<_$DriftChatDatabase, $MessagesTable> { - $$MessagesTableFilterComposer({ +class $$DraftMessagesTableFilterComposer + extends Composer<_$DriftChatDatabase, $DraftMessagesTable> { + $$DraftMessagesTableFilterComposer({ required super.$db, required super.$table, super.joinBuilder, @@ -8428,9 +10088,6 @@ class $$MessagesTableFilterComposer column: $table.attachments, builder: (column) => ColumnWithTypeConverterFilters(column)); - ColumnFilters get state => $composableBuilder( - column: $table.state, builder: (column) => ColumnFilters(column)); - ColumnFilters get type => $composableBuilder( column: $table.type, builder: (column) => ColumnFilters(column)); @@ -8439,19 +10096,6 @@ class $$MessagesTableFilterComposer column: $table.mentionedUsers, builder: (column) => ColumnWithTypeConverterFilters(column)); - ColumnWithTypeConverterFilters?, Map, String> - get reactionCounts => $composableBuilder( - column: $table.reactionCounts, - builder: (column) => ColumnWithTypeConverterFilters(column)); - - ColumnWithTypeConverterFilters?, Map, String> - get reactionScores => $composableBuilder( - column: $table.reactionScores, - builder: (column) => ColumnWithTypeConverterFilters(column)); - - ColumnFilters get parentId => $composableBuilder( - column: $table.parentId, builder: (column) => ColumnFilters(column)); - ColumnFilters get quotedMessageId => $composableBuilder( column: $table.quotedMessageId, builder: (column) => ColumnFilters(column)); @@ -8459,72 +10103,17 @@ class $$MessagesTableFilterComposer ColumnFilters get pollId => $composableBuilder( column: $table.pollId, builder: (column) => ColumnFilters(column)); - ColumnFilters get replyCount => $composableBuilder( - column: $table.replyCount, builder: (column) => ColumnFilters(column)); - ColumnFilters get showInChannel => $composableBuilder( column: $table.showInChannel, builder: (column) => ColumnFilters(column)); - ColumnFilters get shadowed => $composableBuilder( - column: $table.shadowed, builder: (column) => ColumnFilters(column)); - ColumnFilters get command => $composableBuilder( column: $table.command, builder: (column) => ColumnFilters(column)); - ColumnFilters get localCreatedAt => $composableBuilder( - column: $table.localCreatedAt, - builder: (column) => ColumnFilters(column)); - - ColumnFilters get remoteCreatedAt => $composableBuilder( - column: $table.remoteCreatedAt, - builder: (column) => ColumnFilters(column)); - - ColumnFilters get localUpdatedAt => $composableBuilder( - column: $table.localUpdatedAt, - builder: (column) => ColumnFilters(column)); - - ColumnFilters get remoteUpdatedAt => $composableBuilder( - column: $table.remoteUpdatedAt, - builder: (column) => ColumnFilters(column)); - - ColumnFilters get localDeletedAt => $composableBuilder( - column: $table.localDeletedAt, - builder: (column) => ColumnFilters(column)); - - ColumnFilters get remoteDeletedAt => $composableBuilder( - column: $table.remoteDeletedAt, - builder: (column) => ColumnFilters(column)); - - ColumnFilters get messageTextUpdatedAt => $composableBuilder( - column: $table.messageTextUpdatedAt, - builder: (column) => ColumnFilters(column)); - - ColumnFilters get userId => $composableBuilder( - column: $table.userId, builder: (column) => ColumnFilters(column)); - - ColumnFilters get pinned => $composableBuilder( - column: $table.pinned, builder: (column) => ColumnFilters(column)); - - ColumnFilters get pinnedAt => $composableBuilder( - column: $table.pinnedAt, builder: (column) => ColumnFilters(column)); - - ColumnFilters get pinExpires => $composableBuilder( - column: $table.pinExpires, builder: (column) => ColumnFilters(column)); - - ColumnFilters get pinnedByUserId => $composableBuilder( - column: $table.pinnedByUserId, - builder: (column) => ColumnFilters(column)); - - ColumnWithTypeConverterFilters?, Map, - String> - get i18n => $composableBuilder( - column: $table.i18n, - builder: (column) => ColumnWithTypeConverterFilters(column)); + ColumnFilters get silent => $composableBuilder( + column: $table.silent, builder: (column) => ColumnFilters(column)); - ColumnWithTypeConverterFilters?, List, String> - get restrictedVisibility => $composableBuilder( - column: $table.restrictedVisibility, - builder: (column) => ColumnWithTypeConverterFilters(column)); + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnFilters(column)); ColumnWithTypeConverterFilters?, Map, String> @@ -8532,18 +10121,18 @@ class $$MessagesTableFilterComposer column: $table.extraData, builder: (column) => ColumnWithTypeConverterFilters(column)); - $$ChannelsTableFilterComposer get channelCid { - final $$ChannelsTableFilterComposer composer = $composerBuilder( + $$MessagesTableFilterComposer get parentId { + final $$MessagesTableFilterComposer composer = $composerBuilder( composer: this, - getCurrentColumn: (t) => t.channelCid, - referencedTable: $db.channels, - getReferencedColumn: (t) => t.cid, + getCurrentColumn: (t) => t.parentId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.id, builder: (joinBuilder, {$addJoinBuilderToRootComposer, $removeJoinBuilderFromRootComposer}) => - $$ChannelsTableFilterComposer( + $$MessagesTableFilterComposer( $db: $db, - $table: $db.channels, + $table: $db.messages, $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, joinBuilder: joinBuilder, $removeJoinBuilderFromRootComposer: @@ -8552,31 +10141,30 @@ class $$MessagesTableFilterComposer return composer; } - Expression reactionsRefs( - Expression Function($$ReactionsTableFilterComposer f) f) { - final $$ReactionsTableFilterComposer composer = $composerBuilder( + $$ChannelsTableFilterComposer get channelCid { + final $$ChannelsTableFilterComposer composer = $composerBuilder( composer: this, - getCurrentColumn: (t) => t.id, - referencedTable: $db.reactions, - getReferencedColumn: (t) => t.messageId, + getCurrentColumn: (t) => t.channelCid, + referencedTable: $db.channels, + getReferencedColumn: (t) => t.cid, builder: (joinBuilder, {$addJoinBuilderToRootComposer, $removeJoinBuilderFromRootComposer}) => - $$ReactionsTableFilterComposer( + $$ChannelsTableFilterComposer( $db: $db, - $table: $db.reactions, + $table: $db.channels, $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, joinBuilder: joinBuilder, $removeJoinBuilderFromRootComposer: $removeJoinBuilderFromRootComposer, )); - return f(composer); + return composer; } } -class $$MessagesTableOrderingComposer - extends Composer<_$DriftChatDatabase, $MessagesTable> { - $$MessagesTableOrderingComposer({ +class $$DraftMessagesTableOrderingComposer + extends Composer<_$DriftChatDatabase, $DraftMessagesTable> { + $$DraftMessagesTableOrderingComposer({ required super.$db, required super.$table, super.joinBuilder, @@ -8592,9 +10180,6 @@ class $$MessagesTableOrderingComposer ColumnOrderings get attachments => $composableBuilder( column: $table.attachments, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get state => $composableBuilder( - column: $table.state, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get type => $composableBuilder( column: $table.type, builder: (column) => ColumnOrderings(column)); @@ -8602,17 +10187,6 @@ class $$MessagesTableOrderingComposer column: $table.mentionedUsers, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get reactionCounts => $composableBuilder( - column: $table.reactionCounts, - builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get reactionScores => $composableBuilder( - column: $table.reactionScores, - builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get parentId => $composableBuilder( - column: $table.parentId, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get quotedMessageId => $composableBuilder( column: $table.quotedMessageId, builder: (column) => ColumnOrderings(column)); @@ -8620,73 +10194,42 @@ class $$MessagesTableOrderingComposer ColumnOrderings get pollId => $composableBuilder( column: $table.pollId, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get replyCount => $composableBuilder( - column: $table.replyCount, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get showInChannel => $composableBuilder( column: $table.showInChannel, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get shadowed => $composableBuilder( - column: $table.shadowed, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get command => $composableBuilder( column: $table.command, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get localCreatedAt => $composableBuilder( - column: $table.localCreatedAt, - builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get remoteCreatedAt => $composableBuilder( - column: $table.remoteCreatedAt, - builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get localUpdatedAt => $composableBuilder( - column: $table.localUpdatedAt, - builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get remoteUpdatedAt => $composableBuilder( - column: $table.remoteUpdatedAt, - builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get localDeletedAt => $composableBuilder( - column: $table.localDeletedAt, - builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get remoteDeletedAt => $composableBuilder( - column: $table.remoteDeletedAt, - builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get messageTextUpdatedAt => $composableBuilder( - column: $table.messageTextUpdatedAt, - builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get userId => $composableBuilder( - column: $table.userId, builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get pinned => $composableBuilder( - column: $table.pinned, builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get pinnedAt => $composableBuilder( - column: $table.pinnedAt, builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get pinExpires => $composableBuilder( - column: $table.pinExpires, builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get pinnedByUserId => $composableBuilder( - column: $table.pinnedByUserId, - builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get i18n => $composableBuilder( - column: $table.i18n, builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get restrictedVisibility => $composableBuilder( - column: $table.restrictedVisibility, - builder: (column) => ColumnOrderings(column)); - + ColumnOrderings get silent => $composableBuilder( + column: $table.silent, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnOrderings(column)); + ColumnOrderings get extraData => $composableBuilder( column: $table.extraData, builder: (column) => ColumnOrderings(column)); + $$MessagesTableOrderingComposer get parentId { + final $$MessagesTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.parentId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.id, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableOrderingComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } + $$ChannelsTableOrderingComposer get channelCid { final $$ChannelsTableOrderingComposer composer = $composerBuilder( composer: this, @@ -8708,9 +10251,9 @@ class $$MessagesTableOrderingComposer } } -class $$MessagesTableAnnotationComposer - extends Composer<_$DriftChatDatabase, $MessagesTable> { - $$MessagesTableAnnotationComposer({ +class $$DraftMessagesTableAnnotationComposer + extends Composer<_$DriftChatDatabase, $DraftMessagesTable> { + $$DraftMessagesTableAnnotationComposer({ required super.$db, required super.$table, super.joinBuilder, @@ -8727,9 +10270,6 @@ class $$MessagesTableAnnotationComposer $composableBuilder( column: $table.attachments, builder: (column) => column); - GeneratedColumn get state => - $composableBuilder(column: $table.state, builder: (column) => column); - GeneratedColumn get type => $composableBuilder(column: $table.type, builder: (column) => column); @@ -8737,94 +10277,40 @@ class $$MessagesTableAnnotationComposer $composableBuilder( column: $table.mentionedUsers, builder: (column) => column); - GeneratedColumnWithTypeConverter?, String> - get reactionCounts => $composableBuilder( - column: $table.reactionCounts, builder: (column) => column); - - GeneratedColumnWithTypeConverter?, String> - get reactionScores => $composableBuilder( - column: $table.reactionScores, builder: (column) => column); - - GeneratedColumn get parentId => - $composableBuilder(column: $table.parentId, builder: (column) => column); - GeneratedColumn get quotedMessageId => $composableBuilder( column: $table.quotedMessageId, builder: (column) => column); GeneratedColumn get pollId => $composableBuilder(column: $table.pollId, builder: (column) => column); - GeneratedColumn get replyCount => $composableBuilder( - column: $table.replyCount, builder: (column) => column); - GeneratedColumn get showInChannel => $composableBuilder( column: $table.showInChannel, builder: (column) => column); - GeneratedColumn get shadowed => - $composableBuilder(column: $table.shadowed, builder: (column) => column); - GeneratedColumn get command => $composableBuilder(column: $table.command, builder: (column) => column); - GeneratedColumn get localCreatedAt => $composableBuilder( - column: $table.localCreatedAt, builder: (column) => column); - - GeneratedColumn get remoteCreatedAt => $composableBuilder( - column: $table.remoteCreatedAt, builder: (column) => column); - - GeneratedColumn get localUpdatedAt => $composableBuilder( - column: $table.localUpdatedAt, builder: (column) => column); - - GeneratedColumn get remoteUpdatedAt => $composableBuilder( - column: $table.remoteUpdatedAt, builder: (column) => column); - - GeneratedColumn get localDeletedAt => $composableBuilder( - column: $table.localDeletedAt, builder: (column) => column); - - GeneratedColumn get remoteDeletedAt => $composableBuilder( - column: $table.remoteDeletedAt, builder: (column) => column); - - GeneratedColumn get messageTextUpdatedAt => $composableBuilder( - column: $table.messageTextUpdatedAt, builder: (column) => column); - - GeneratedColumn get userId => - $composableBuilder(column: $table.userId, builder: (column) => column); - - GeneratedColumn get pinned => - $composableBuilder(column: $table.pinned, builder: (column) => column); - - GeneratedColumn get pinnedAt => - $composableBuilder(column: $table.pinnedAt, builder: (column) => column); - - GeneratedColumn get pinExpires => $composableBuilder( - column: $table.pinExpires, builder: (column) => column); - - GeneratedColumn get pinnedByUserId => $composableBuilder( - column: $table.pinnedByUserId, builder: (column) => column); - - GeneratedColumnWithTypeConverter?, String> get i18n => - $composableBuilder(column: $table.i18n, builder: (column) => column); + GeneratedColumn get silent => + $composableBuilder(column: $table.silent, builder: (column) => column); - GeneratedColumnWithTypeConverter?, String> - get restrictedVisibility => $composableBuilder( - column: $table.restrictedVisibility, builder: (column) => column); + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); GeneratedColumnWithTypeConverter?, String> get extraData => $composableBuilder( column: $table.extraData, builder: (column) => column); - $$ChannelsTableAnnotationComposer get channelCid { - final $$ChannelsTableAnnotationComposer composer = $composerBuilder( + $$MessagesTableAnnotationComposer get parentId { + final $$MessagesTableAnnotationComposer composer = $composerBuilder( composer: this, - getCurrentColumn: (t) => t.channelCid, - referencedTable: $db.channels, - getReferencedColumn: (t) => t.cid, + getCurrentColumn: (t) => t.parentId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.id, builder: (joinBuilder, {$addJoinBuilderToRootComposer, $removeJoinBuilderFromRootComposer}) => - $$ChannelsTableAnnotationComposer( + $$MessagesTableAnnotationComposer( $db: $db, - $table: $db.channels, + $table: $db.messages, $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, joinBuilder: joinBuilder, $removeJoinBuilderFromRootComposer: @@ -8833,115 +10319,81 @@ class $$MessagesTableAnnotationComposer return composer; } - Expression reactionsRefs( - Expression Function($$ReactionsTableAnnotationComposer a) f) { - final $$ReactionsTableAnnotationComposer composer = $composerBuilder( + $$ChannelsTableAnnotationComposer get channelCid { + final $$ChannelsTableAnnotationComposer composer = $composerBuilder( composer: this, - getCurrentColumn: (t) => t.id, - referencedTable: $db.reactions, - getReferencedColumn: (t) => t.messageId, + getCurrentColumn: (t) => t.channelCid, + referencedTable: $db.channels, + getReferencedColumn: (t) => t.cid, builder: (joinBuilder, {$addJoinBuilderToRootComposer, $removeJoinBuilderFromRootComposer}) => - $$ReactionsTableAnnotationComposer( + $$ChannelsTableAnnotationComposer( $db: $db, - $table: $db.reactions, + $table: $db.channels, $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, joinBuilder: joinBuilder, $removeJoinBuilderFromRootComposer: $removeJoinBuilderFromRootComposer, )); - return f(composer); + return composer; } } -class $$MessagesTableTableManager extends RootTableManager< +class $$DraftMessagesTableTableManager extends RootTableManager< _$DriftChatDatabase, - $MessagesTable, - MessageEntity, - $$MessagesTableFilterComposer, - $$MessagesTableOrderingComposer, - $$MessagesTableAnnotationComposer, - $$MessagesTableCreateCompanionBuilder, - $$MessagesTableUpdateCompanionBuilder, - (MessageEntity, $$MessagesTableReferences), - MessageEntity, - PrefetchHooks Function({bool channelCid, bool reactionsRefs})> { - $$MessagesTableTableManager(_$DriftChatDatabase db, $MessagesTable table) + $DraftMessagesTable, + DraftMessageEntity, + $$DraftMessagesTableFilterComposer, + $$DraftMessagesTableOrderingComposer, + $$DraftMessagesTableAnnotationComposer, + $$DraftMessagesTableCreateCompanionBuilder, + $$DraftMessagesTableUpdateCompanionBuilder, + (DraftMessageEntity, $$DraftMessagesTableReferences), + DraftMessageEntity, + PrefetchHooks Function({bool parentId, bool channelCid})> { + $$DraftMessagesTableTableManager( + _$DriftChatDatabase db, $DraftMessagesTable table) : super(TableManagerState( db: db, table: table, createFilteringComposer: () => - $$MessagesTableFilterComposer($db: db, $table: table), + $$DraftMessagesTableFilterComposer($db: db, $table: table), createOrderingComposer: () => - $$MessagesTableOrderingComposer($db: db, $table: table), + $$DraftMessagesTableOrderingComposer($db: db, $table: table), createComputedFieldComposer: () => - $$MessagesTableAnnotationComposer($db: db, $table: table), + $$DraftMessagesTableAnnotationComposer($db: db, $table: table), updateCompanionCallback: ({ Value id = const Value.absent(), Value messageText = const Value.absent(), Value> attachments = const Value.absent(), - Value state = const Value.absent(), Value type = const Value.absent(), Value> mentionedUsers = const Value.absent(), - Value?> reactionCounts = const Value.absent(), - Value?> reactionScores = const Value.absent(), Value parentId = const Value.absent(), Value quotedMessageId = const Value.absent(), Value pollId = const Value.absent(), - Value replyCount = const Value.absent(), Value showInChannel = const Value.absent(), - Value shadowed = const Value.absent(), Value command = 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 messageTextUpdatedAt = const Value.absent(), - Value userId = const Value.absent(), - Value pinned = const Value.absent(), - Value pinnedAt = const Value.absent(), - Value pinExpires = const Value.absent(), - Value pinnedByUserId = const Value.absent(), + Value silent = const Value.absent(), + Value createdAt = const Value.absent(), Value channelCid = const Value.absent(), - Value?> i18n = const Value.absent(), - Value?> restrictedVisibility = const Value.absent(), Value?> extraData = const Value.absent(), Value rowid = const Value.absent(), }) => - MessagesCompanion( + DraftMessagesCompanion( id: id, messageText: messageText, attachments: attachments, - state: state, type: type, mentionedUsers: mentionedUsers, - reactionCounts: reactionCounts, - reactionScores: reactionScores, parentId: parentId, quotedMessageId: quotedMessageId, pollId: pollId, - replyCount: replyCount, showInChannel: showInChannel, - shadowed: shadowed, command: command, - localCreatedAt: localCreatedAt, - remoteCreatedAt: remoteCreatedAt, - localUpdatedAt: localUpdatedAt, - remoteUpdatedAt: remoteUpdatedAt, - localDeletedAt: localDeletedAt, - remoteDeletedAt: remoteDeletedAt, - messageTextUpdatedAt: messageTextUpdatedAt, - userId: userId, - pinned: pinned, - pinnedAt: pinnedAt, - pinExpires: pinExpires, - pinnedByUserId: pinnedByUserId, + silent: silent, + createdAt: createdAt, channelCid: channelCid, - i18n: i18n, - restrictedVisibility: restrictedVisibility, extraData: extraData, rowid: rowid, ), @@ -8949,78 +10401,46 @@ class $$MessagesTableTableManager extends RootTableManager< required String id, Value messageText = const Value.absent(), required List attachments, - required String state, Value type = const Value.absent(), required List mentionedUsers, - Value?> reactionCounts = const Value.absent(), - Value?> reactionScores = const Value.absent(), Value parentId = const Value.absent(), Value quotedMessageId = const Value.absent(), Value pollId = const Value.absent(), - Value replyCount = const Value.absent(), Value showInChannel = const Value.absent(), - Value shadowed = const Value.absent(), Value command = 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 messageTextUpdatedAt = const Value.absent(), - Value userId = const Value.absent(), - Value pinned = const Value.absent(), - Value pinnedAt = const Value.absent(), - Value pinExpires = const Value.absent(), - Value pinnedByUserId = const Value.absent(), + Value silent = const Value.absent(), + Value createdAt = const Value.absent(), required String channelCid, - Value?> i18n = const Value.absent(), - Value?> restrictedVisibility = const Value.absent(), Value?> extraData = const Value.absent(), Value rowid = const Value.absent(), }) => - MessagesCompanion.insert( + DraftMessagesCompanion.insert( id: id, messageText: messageText, attachments: attachments, - state: state, type: type, mentionedUsers: mentionedUsers, - reactionCounts: reactionCounts, - reactionScores: reactionScores, parentId: parentId, quotedMessageId: quotedMessageId, pollId: pollId, - replyCount: replyCount, showInChannel: showInChannel, - shadowed: shadowed, command: command, - localCreatedAt: localCreatedAt, - remoteCreatedAt: remoteCreatedAt, - localUpdatedAt: localUpdatedAt, - remoteUpdatedAt: remoteUpdatedAt, - localDeletedAt: localDeletedAt, - remoteDeletedAt: remoteDeletedAt, - messageTextUpdatedAt: messageTextUpdatedAt, - userId: userId, - pinned: pinned, - pinnedAt: pinnedAt, - pinExpires: pinExpires, - pinnedByUserId: pinnedByUserId, + silent: silent, + createdAt: createdAt, channelCid: channelCid, - i18n: i18n, - restrictedVisibility: restrictedVisibility, extraData: extraData, rowid: rowid, ), withReferenceMapper: (p0) => p0 - .map((e) => - (e.readTable(table), $$MessagesTableReferences(db, table, e))) + .map((e) => ( + e.readTable(table), + $$DraftMessagesTableReferences(db, table, e) + )) .toList(), - prefetchHooksCallback: ({channelCid = false, reactionsRefs = false}) { + prefetchHooksCallback: ({parentId = false, channelCid = false}) { return PrefetchHooks( db: db, - explicitlyWatchedTables: [if (reactionsRefs) db.reactions], + explicitlyWatchedTables: [], addJoins: < T extends TableManagerState< dynamic, @@ -9034,52 +10454,49 @@ class $$MessagesTableTableManager extends RootTableManager< dynamic, dynamic, dynamic>>(state) { + if (parentId) { + state = state.withJoin( + currentTable: table, + currentColumn: table.parentId, + referencedTable: + $$DraftMessagesTableReferences._parentIdTable(db), + referencedColumn: + $$DraftMessagesTableReferences._parentIdTable(db).id, + ) as T; + } if (channelCid) { state = state.withJoin( currentTable: table, currentColumn: table.channelCid, referencedTable: - $$MessagesTableReferences._channelCidTable(db), + $$DraftMessagesTableReferences._channelCidTable(db), referencedColumn: - $$MessagesTableReferences._channelCidTable(db).cid, + $$DraftMessagesTableReferences._channelCidTable(db).cid, ) as T; } return state; }, getPrefetchedDataCallback: (items) async { - return [ - if (reactionsRefs) - await $_getPrefetchedData( - currentTable: table, - referencedTable: - $$MessagesTableReferences._reactionsRefsTable(db), - managerFromTypedResult: (p0) => - $$MessagesTableReferences(db, table, p0) - .reactionsRefs, - referencedItemsForCurrentItem: - (item, referencedItems) => referencedItems - .where((e) => e.messageId == item.id), - typedResults: items) - ]; + return []; }, ); }, )); } -typedef $$MessagesTableProcessedTableManager = ProcessedTableManager< +typedef $$DraftMessagesTableProcessedTableManager = ProcessedTableManager< _$DriftChatDatabase, - $MessagesTable, - MessageEntity, - $$MessagesTableFilterComposer, - $$MessagesTableOrderingComposer, - $$MessagesTableAnnotationComposer, - $$MessagesTableCreateCompanionBuilder, - $$MessagesTableUpdateCompanionBuilder, - (MessageEntity, $$MessagesTableReferences), - MessageEntity, - PrefetchHooks Function({bool channelCid, bool reactionsRefs})>; + $DraftMessagesTable, + DraftMessageEntity, + $$DraftMessagesTableFilterComposer, + $$DraftMessagesTableOrderingComposer, + $$DraftMessagesTableAnnotationComposer, + $$DraftMessagesTableCreateCompanionBuilder, + $$DraftMessagesTableUpdateCompanionBuilder, + (DraftMessageEntity, $$DraftMessagesTableReferences), + DraftMessageEntity, + PrefetchHooks Function({bool parentId, bool channelCid})>; typedef $$PinnedMessagesTableCreateCompanionBuilder = PinnedMessagesCompanion Function({ required String id, @@ -9112,6 +10529,7 @@ typedef $$PinnedMessagesTableCreateCompanionBuilder = PinnedMessagesCompanion required String channelCid, Value?> i18n, Value?> restrictedVisibility, + Value draftMessageId, Value?> extraData, Value rowid, }); @@ -9147,6 +10565,7 @@ typedef $$PinnedMessagesTableUpdateCompanionBuilder = PinnedMessagesCompanion Value channelCid, Value?> i18n, Value?> restrictedVisibility, + Value draftMessageId, Value?> extraData, Value rowid, }); @@ -9297,6 +10716,10 @@ class $$PinnedMessagesTableFilterComposer column: $table.restrictedVisibility, builder: (column) => ColumnWithTypeConverterFilters(column)); + ColumnFilters get draftMessageId => $composableBuilder( + column: $table.draftMessageId, + builder: (column) => ColumnFilters(column)); + ColumnWithTypeConverterFilters?, Map, String> get extraData => $composableBuilder( @@ -9440,6 +10863,10 @@ class $$PinnedMessagesTableOrderingComposer column: $table.restrictedVisibility, builder: (column) => ColumnOrderings(column)); + ColumnOrderings get draftMessageId => $composableBuilder( + column: $table.draftMessageId, + builder: (column) => ColumnOrderings(column)); + ColumnOrderings get extraData => $composableBuilder( column: $table.extraData, builder: (column) => ColumnOrderings(column)); } @@ -9548,6 +10975,9 @@ class $$PinnedMessagesTableAnnotationComposer get restrictedVisibility => $composableBuilder( column: $table.restrictedVisibility, builder: (column) => column); + GeneratedColumn get draftMessageId => $composableBuilder( + column: $table.draftMessageId, builder: (column) => column); + GeneratedColumnWithTypeConverter?, String> get extraData => $composableBuilder( column: $table.extraData, builder: (column) => column); @@ -9630,6 +11060,7 @@ class $$PinnedMessagesTableTableManager extends RootTableManager< Value channelCid = const Value.absent(), Value?> i18n = const Value.absent(), Value?> restrictedVisibility = const Value.absent(), + Value draftMessageId = const Value.absent(), Value?> extraData = const Value.absent(), Value rowid = const Value.absent(), }) => @@ -9664,6 +11095,7 @@ class $$PinnedMessagesTableTableManager extends RootTableManager< channelCid: channelCid, i18n: i18n, restrictedVisibility: restrictedVisibility, + draftMessageId: draftMessageId, extraData: extraData, rowid: rowid, ), @@ -9698,6 +11130,7 @@ class $$PinnedMessagesTableTableManager extends RootTableManager< required String channelCid, Value?> i18n = const Value.absent(), Value?> restrictedVisibility = const Value.absent(), + Value draftMessageId = const Value.absent(), Value?> extraData = const Value.absent(), Value rowid = const Value.absent(), }) => @@ -9732,6 +11165,7 @@ class $$PinnedMessagesTableTableManager extends RootTableManager< channelCid: channelCid, i18n: i18n, restrictedVisibility: restrictedVisibility, + draftMessageId: draftMessageId, extraData: extraData, rowid: rowid, ), @@ -9751,7 +11185,8 @@ class $$PinnedMessagesTableTableManager extends RootTableManager< getPrefetchedDataCallback: (items) async { return [ if (pinnedMessageReactionsRefs) - await $_getPrefetchedData( + await $_getPrefetchedData( currentTable: table, referencedTable: $$PinnedMessagesTableReferences ._pinnedMessageReactionsRefsTable(db), @@ -10203,7 +11638,8 @@ class $$PollsTableTableManager extends RootTableManager< getPrefetchedDataCallback: (items) async { return [ if (pollVotesRefs) - await $_getPrefetchedData( + await $_getPrefetchedData( currentTable: table, referencedTable: $$PollsTableReferences._pollVotesRefsTable(db), @@ -12393,6 +13829,8 @@ class $DriftChatDatabaseManager { $$ChannelsTableTableManager(_db, _db.channels); $$MessagesTableTableManager get messages => $$MessagesTableTableManager(_db, _db.messages); + $$DraftMessagesTableTableManager get draftMessages => + $$DraftMessagesTableTableManager(_db, _db.draftMessages); $$PinnedMessagesTableTableManager get pinnedMessages => $$PinnedMessagesTableTableManager(_db, _db.pinnedMessages); $$PollsTableTableManager get polls => diff --git a/packages/stream_chat_persistence/lib/src/entity/draft_messages.dart b/packages/stream_chat_persistence/lib/src/entity/draft_messages.dart new file mode 100644 index 0000000000..f959e1fbda --- /dev/null +++ b/packages/stream_chat_persistence/lib/src/entity/draft_messages.dart @@ -0,0 +1,58 @@ +// coverage:ignore-file +import 'package:drift/drift.dart'; +import 'package:stream_chat_persistence/src/converter/converter.dart'; +import 'package:stream_chat_persistence/src/entity/channels.dart'; +import 'package:stream_chat_persistence/src/entity/messages.dart'; + +/// Represents a [DraftMessages] table in [MoorChatDatabase]. +@DataClassName('DraftMessageEntity') +class DraftMessages extends Table { + /// The message id + TextColumn get id => text()(); + + /// The text of this message + TextColumn get messageText => text().nullable()(); + + /// The list of attachments, either provided by the user + /// or generated from a command or as a result of URL scraping. + TextColumn get attachments => text().map(ListConverter())(); + + /// The message type + TextColumn get type => text().withDefault(const Constant('regular'))(); + + /// The list of user mentioned in the message + TextColumn get mentionedUsers => text().map(ListConverter())(); + + /// The ID of the parent message, if the message is a thread reply. + TextColumn get parentId => text() + .nullable() + .references(Messages, #id, onDelete: KeyAction.cascade)(); + + /// The ID of the quoted message, if the message is a quoted reply. + TextColumn get quotedMessageId => text().nullable()(); + + /// The ID of the poll, if the message is a poll. + TextColumn get pollId => text().nullable()(); + + /// Check if this message needs to show in the channel. + BoolColumn get showInChannel => boolean().nullable()(); + + /// A used command name. + TextColumn get command => text().nullable()(); + + /// If true the message is silent + BoolColumn get silent => boolean().withDefault(const Constant(false))(); + + /// The DateTime on which the message was created. + DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + + /// The channel cid of which this message is part of + TextColumn get channelCid => + text().references(Channels, #cid, onDelete: KeyAction.cascade)(); + + /// Message custom extraData + TextColumn get extraData => text().nullable().map(MapConverter())(); + + @override + Set>? get primaryKey => {id}; +} diff --git a/packages/stream_chat_persistence/lib/src/entity/entity.dart b/packages/stream_chat_persistence/lib/src/entity/entity.dart index 41778641da..2ef87c5cb6 100644 --- a/packages/stream_chat_persistence/lib/src/entity/entity.dart +++ b/packages/stream_chat_persistence/lib/src/entity/entity.dart @@ -1,6 +1,7 @@ export 'channel_queries.dart'; export 'channels.dart'; export 'connection_events.dart'; +export 'draft_messages.dart'; export 'members.dart'; export 'messages.dart'; export 'pinned_message_reactions.dart'; diff --git a/packages/stream_chat_persistence/lib/src/entity/messages.dart b/packages/stream_chat_persistence/lib/src/entity/messages.dart index 8596e3afb6..8b8ae7da6f 100644 --- a/packages/stream_chat_persistence/lib/src/entity/messages.dart +++ b/packages/stream_chat_persistence/lib/src/entity/messages.dart @@ -130,6 +130,9 @@ class Messages extends Table { TextColumn get restrictedVisibility => text().nullable().map(ListConverter())(); + /// Id of the draft message if this message is a parent message. + TextColumn get draftMessageId => text().nullable()(); + /// Message custom extraData TextColumn get extraData => text().nullable().map(MapConverter())(); diff --git a/packages/stream_chat_persistence/lib/src/mapper/draft_message_mapper.dart b/packages/stream_chat_persistence/lib/src/mapper/draft_message_mapper.dart new file mode 100644 index 0000000000..f4ae5b31ce --- /dev/null +++ b/packages/stream_chat_persistence/lib/src/mapper/draft_message_mapper.dart @@ -0,0 +1,69 @@ +import 'dart:convert'; + +import 'package:stream_chat/stream_chat.dart'; +import 'package:stream_chat_persistence/src/db/drift_chat_database.dart'; + +/// Useful mapping functions for [DraftMessageEntity] +extension DraftMessageEntityX on DraftMessageEntity { + /// Maps a [MessageEntity] into [Message] + Draft toDraft({ + Message? parentMessage, + Message? quotedMessage, + Poll? poll, + }) { + return Draft( + createdAt: createdAt, + channelCid: channelCid, + message: DraftMessage( + id: id, + text: messageText, + type: type, + attachments: attachments.map((it) { + final json = jsonDecode(it); + return Attachment.fromData(json); + }).toList(), + parentId: parentId, + showInChannel: showInChannel, + mentionedUsers: mentionedUsers.map((e) { + final json = jsonDecode(e); + return User.fromJson(json); + }).toList(), + quotedMessage: quotedMessage, + quotedMessageId: quotedMessageId, + silent: silent, + command: command, + poll: poll, + pollId: pollId, + extraData: extraData ?? {}, + ), + parentId: parentId, + parentMessage: parentMessage, + quotedMessage: quotedMessage, + ); + } +} + +/// Useful mapping functions for [Draft] +extension DraftMessageX on Draft { + /// Maps a [DraftMessage] into [DraftMessageEntity] + DraftMessageEntity toEntity() => DraftMessageEntity( + id: message.id, + channelCid: channelCid, + messageText: message.text, + type: message.type, + createdAt: createdAt, + attachments: message.attachments.map((it) { + return jsonEncode(it.toData()); + }).toList(), + parentId: parentId, + showInChannel: message.showInChannel, + mentionedUsers: message.mentionedUsers.map((e) { + return jsonEncode(e.toJson()); + }).toList(), + quotedMessageId: message.quotedMessageId, + silent: message.silent, + command: message.command, + pollId: message.pollId, + extraData: message.extraData, + ); +} diff --git a/packages/stream_chat_persistence/lib/src/mapper/mapper.dart b/packages/stream_chat_persistence/lib/src/mapper/mapper.dart index 32de5859d3..742776f504 100644 --- a/packages/stream_chat_persistence/lib/src/mapper/mapper.dart +++ b/packages/stream_chat_persistence/lib/src/mapper/mapper.dart @@ -1,9 +1,12 @@ export 'channel_mapper.dart'; +export 'draft_message_mapper.dart'; export 'event_mapper.dart'; export 'member_mapper.dart'; export 'message_mapper.dart'; export 'pinned_message_mapper.dart'; export 'pinned_message_reaction_mapper.dart'; +export 'poll_mapper.dart'; +export 'poll_vote_mapper.dart'; export 'reaction_mapper.dart'; export 'read_mapper.dart'; export 'user_mapper.dart'; 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 faedfda3e2..a0020d8d78 100644 --- a/packages/stream_chat_persistence/lib/src/mapper/message_mapper.dart +++ b/packages/stream_chat_persistence/lib/src/mapper/message_mapper.dart @@ -13,6 +13,7 @@ extension MessageEntityX on MessageEntity { List? ownReactions, Message? quotedMessage, Poll? poll, + Draft? draft, }) => Message( shadowed: shadowed, @@ -53,6 +54,7 @@ extension MessageEntityX on MessageEntity { mentionedUsers.map((e) => User.fromJson(jsonDecode(e))).toList(), i18n: i18n, restrictedVisibility: restrictedVisibility, + draft: draft, ); } @@ -91,5 +93,6 @@ extension MessageX on Message { pinnedByUserId: pinnedBy?.id, i18n: i18n, restrictedVisibility: restrictedVisibility, + draftMessageId: draft?.message.id, ); } diff --git a/packages/stream_chat_persistence/lib/src/stream_chat_persistence_client.dart b/packages/stream_chat_persistence/lib/src/stream_chat_persistence_client.dart index f8b72fdd48..7f41421556 100644 --- a/packages/stream_chat_persistence/lib/src/stream_chat_persistence_client.dart +++ b/packages/stream_chat_persistence/lib/src/stream_chat_persistence_client.dart @@ -171,6 +171,13 @@ class StreamChatPersistenceClient extends ChatPersistenceClient { return db!.pinnedMessageDao.deleteMessageByCids(cids); } + @override + Future deleteDraftMessagesByIds(List messageIds) { + assert(_debugIsConnected, ''); + _logger.info('deleteDraftMessagesByIds'); + return db!.draftMessageDao.deleteDraftMessagesByIds(messageIds); + } + @override Future> getMembersByCid(String cid) { assert(_debugIsConnected, ''); @@ -211,6 +218,20 @@ class StreamChatPersistenceClient extends ChatPersistenceClient { ); } + @override + Future getDraftMessageByCid(String cid) { + assert(_debugIsConnected, ''); + _logger.info('getDraftMessageByCid'); + return db!.draftMessageDao.getDraftMessageByCid(cid); + } + + @override + Future getDraftMessageByParentId(String parentId) { + assert(_debugIsConnected, ''); + _logger.info('getDraftMessageByParentId'); + return db!.draftMessageDao.getDraftMessageByParentId(parentId); + } + @override Future> getReadsByCid(String cid) async { assert(_debugIsConnected, ''); @@ -302,6 +323,13 @@ class StreamChatPersistenceClient extends ChatPersistenceClient { return db!.channelDao.updateChannels(channels); } + @override + Future updateDraftMessages(List draftMessages) { + assert(_debugIsConnected, ''); + _logger.info('updateDraftMessages'); + return db!.draftMessageDao.updateDraftMessages(draftMessages); + } + @override Future updatePolls(List polls) { assert(_debugIsConnected, ''); diff --git a/packages/stream_chat_persistence/test/mock_chat_database.dart b/packages/stream_chat_persistence/test/mock_chat_database.dart index fa71ccd67b..6f1f61af0d 100644 --- a/packages/stream_chat_persistence/test/mock_chat_database.dart +++ b/packages/stream_chat_persistence/test/mock_chat_database.dart @@ -58,6 +58,11 @@ class MockChatDatabase extends Mock implements DriftChatDatabase { PollVoteDao get pollVoteDao => _pollVoteDao ??= MockPollVoteDao(); PollVoteDao? _pollVoteDao; + @override + DraftMessageDao get draftMessageDao => + _draftMessageDao ??= MockDraftMessageDao(); + DraftMessageDao? _draftMessageDao; + @override Future flush() => Future.value(); @@ -89,3 +94,5 @@ class MockConnectionEventDao extends Mock implements ConnectionEventDao {} class MockPollDao extends Mock implements PollDao {} class MockPollVoteDao extends Mock implements PollVoteDao {} + +class MockDraftMessageDao extends Mock implements DraftMessageDao {} diff --git a/packages/stream_chat_persistence/test/src/dao/draft_message_dao_test.dart b/packages/stream_chat_persistence/test/src/dao/draft_message_dao_test.dart new file mode 100644 index 0000000000..dff3cf0dd0 --- /dev/null +++ b/packages/stream_chat_persistence/test/src/dao/draft_message_dao_test.dart @@ -0,0 +1,586 @@ +// ignore_for_file: lines_longer_than_80_chars + +import 'package:flutter_test/flutter_test.dart'; +import 'package:stream_chat/stream_chat.dart'; +import 'package:stream_chat_persistence/src/dao/draft_message_dao.dart'; +import 'package:stream_chat_persistence/src/db/drift_chat_database.dart'; + +import '../../stream_chat_persistence_client_test.dart'; + +void main() { + late DraftMessageDao draftMessageDao; + late DriftChatDatabase database; + + setUp(() { + database = testDatabaseProvider('testUserId'); + draftMessageDao = database.draftMessageDao; + }); + + tearDown(() async { + await database.close(); + }); + + Future> _prepareTestData( + String cid, { + int count = 3, + bool withParentMessage = false, + bool withQuotedMessage = false, + bool withPoll = false, + }) async { + final channels = [ChannelModel(cid: cid)]; + final users = List.generate( + count, + (index) => User(id: 'testUserId$index'), + ); + final messages = List.generate( + count, + (index) => Message( + id: 'testMessageId$cid$index', + type: 'testType', + user: users[index], + createdAt: DateTime.now(), + text: 'Hello #$index', + ), + ); + + final polls = withPoll + ? List.generate( + count, + (index) => Poll( + id: 'testPollId$index', + name: 'Test Poll Question #$index', + options: const [ + PollOption(id: 'option1', text: 'Option 1'), + PollOption(id: 'option2', text: 'Option 2'), + ], + ), + ) + : null; + + final drafts = List.generate( + count, + (index) { + // When count is 1, use the exact cid provided + // Otherwise, create unique cids for each draft to avoid conflicts + final draftChannelCid = + count == 1 ? cid : (withParentMessage ? cid : '$cid$index'); + + final draftMessage = DraftMessage( + id: 'testDraftId$cid$index', + text: 'Draft message #$index', + attachments: [ + Attachment( + id: 'testAttachmentId$index', + type: 'testAttachmentType', + assetUrl: 'testAssetUrl', + ), + ], + mentionedUsers: [users[index]], + quotedMessageId: withQuotedMessage ? messages[index].id : null, + parentId: withParentMessage ? messages[index].id : null, + pollId: withPoll && polls != null ? polls[index].id : null, + extraData: {'extra_test_field': 'extraTestData$index'}, + ); + + return Draft( + channelCid: draftChannelCid, + createdAt: DateTime.now().subtract(Duration(minutes: index)), + message: draftMessage, + parentId: withParentMessage ? messages[index].id : null, + ); + }, + ); + + await database.userDao.updateUsers(users); + + // Create a channel for each draft to avoid cid conflicts + final allChannels = [ + for (final draft in drafts) ChannelModel(cid: draft.channelCid), + ...channels, + ]; + + await database.channelDao.updateChannels(allChannels); + + if (withParentMessage || withQuotedMessage) { + await database.messageDao.updateMessages(cid, messages); + } + + if (withPoll && polls != null) { + await database.pollDao.updatePolls(polls); + } + + await draftMessageDao.updateDraftMessages(drafts); + return drafts; + } + + group('getDraftMessageById', () { + test('should return null for a non-existent draft message id', () async { + final draft = await draftMessageDao.getDraftMessageById( + 'non-existent-id', + ); + expect(draft, isNull); + }); + + test('should return the draft message for a valid id', () async { + const cid = 'test:getDraftById'; + final testDrafts = + await _prepareTestData(cid, count: 1); // Just create one draft + final testDraftId = testDrafts.first.message.id; + + final draft = await draftMessageDao.getDraftMessageById(testDraftId); + + expect(draft, isNotNull); + expect(draft!.message.id, testDraftId); + expect(draft.channelCid, cid); + expect(draft.message.text, 'Draft message #0'); + expect(draft.message.attachments, isNotEmpty); + expect(draft.message.mentionedUsers, isNotEmpty); + }); + }); + + group('getDraftMessageByCid', () { + test('should return null for a non-existent channel cid', () async { + final draft = await draftMessageDao.getDraftMessageByCid( + 'non-existent-cid', + ); + expect(draft, isNull); + }); + + test('should return the draft message for a valid channel cid', () async { + const cid = 'test:getDraftByCid'; + await _prepareTestData(cid, count: 1); + + final draft = await draftMessageDao.getDraftMessageByCid(cid); + + expect(draft, isNotNull); + expect(draft!.channelCid, cid); + expect(draft.message.text, 'Draft message #0'); + }); + + test( + 'should not return thread drafts when querying by channel cid', + () async { + const cid = 'test:getDraftByCidNoThread'; + await _prepareTestData(cid, withParentMessage: true); + + final draft = await draftMessageDao.getDraftMessageByCid(cid); + + // The first draft has a parent message, so it's a thread draft + // getDraftMessageByCid should skip thread drafts + expect(draft, isNull); + }, + ); + }); + + group('getDraftMessageByParentId', () { + test('should return null for a non-existent parent id', () async { + final draft = await draftMessageDao.getDraftMessageByParentId( + 'non-existent-parent-id', + ); + expect(draft, isNull); + }); + + test('should return the draft message for a valid parent id', () async { + const cid = 'test:getDraftByParentId'; + final testDrafts = + await _prepareTestData(cid, withParentMessage: true, count: 1); + final parentId = testDrafts.first.parentId; + + final draft = await draftMessageDao.getDraftMessageByParentId(parentId!); + + expect(draft, isNotNull); + expect(draft!.parentId, parentId); + expect(draft.channelCid, cid); + }); + }); + + group('updateDraftMessages', () { + test('should insert new draft messages', () async { + const cid = 'test:updateDraftMessages'; + // Create just one draft to avoid conflicts + final draft = Draft( + channelCid: cid, + createdAt: DateTime.now(), + message: DraftMessage( + id: 'newDraftId', + text: 'New draft message', + ), + ); + + await database.channelDao.updateChannels([ChannelModel(cid: cid)]); + await draftMessageDao.updateDraftMessages([draft]); + + final fetchedDraft = await draftMessageDao.getDraftMessageById( + draft.message.id, + ); + expect(fetchedDraft, isNotNull); + expect(fetchedDraft!.message.id, draft.message.id); + expect(fetchedDraft.message.text, draft.message.text); + }); + + test('should update existing draft messages', () async { + const cid = 'test:updateExistingDrafts'; + // Just create one draft + final testDrafts = await _prepareTestData(cid, count: 1); + + final updatedDraft = Draft( + channelCid: testDrafts.first.channelCid, + createdAt: testDrafts.first.createdAt, + message: testDrafts.first.message.copyWith( + text: 'Updated Draft message', + ), + ); + + await draftMessageDao.updateDraftMessages([updatedDraft]); + + final fetchedDraft = await draftMessageDao.getDraftMessageById( + testDrafts.first.message.id, + ); + expect(fetchedDraft, isNotNull); + expect(fetchedDraft!.message.text, 'Updated Draft message'); + }); + + test( + 'should keep only the last draft when adding multiple channel drafts with same channelCid', + () async { + const cid = 'test:multipleDraftsWithSameCid'; + await database.channelDao.updateChannels([ChannelModel(cid: cid)]); + + // Create first channel draft (no parent message) + final firstDraft = Draft( + channelCid: cid, + createdAt: DateTime.now(), + message: DraftMessage( + id: 'firstDraftId', + text: 'First channel draft', + ), + ); + + await draftMessageDao.updateDraftMessages([firstDraft]); + + // Verify first draft exists + final firstFetchedDraft = + await draftMessageDao.getDraftMessageByCid(cid); + expect(firstFetchedDraft, isNotNull); + expect(firstFetchedDraft!.message.text, 'First channel draft'); + + // Create second channel draft with same channelCid but different ID + final secondDraft = Draft( + channelCid: cid, + createdAt: DateTime.now(), + message: DraftMessage( + id: 'secondDraftId', // Different ID + text: 'Second channel draft', + ), + ); + + // This should replace the existing draft due to unique constraint {channelCid, parentId} + await draftMessageDao.updateDraftMessages([secondDraft]); + + // Verify only the second draft exists + final secondFetchedDraft = + await draftMessageDao.getDraftMessageByCid(cid); + expect(secondFetchedDraft, isNotNull); + expect(secondFetchedDraft!.message.id, 'secondDraftId'); + expect(secondFetchedDraft.message.text, 'Second channel draft'); + + // Verify the first draft no longer exists + final firstDraftAfterUpdate = await draftMessageDao.getDraftMessageById( + firstDraft.message.id, + ); + expect(firstDraftAfterUpdate, isNull); + + // Verify there's only one draft message for this channel + final channelDraft = await draftMessageDao.getDraftMessageByCid(cid); + expect(channelDraft, isNotNull); + expect(channelDraft!.message.id, 'secondDraftId'); + }, + ); + + test( + 'should keep only the last draft when adding multiple thread drafts with same parentId', + () async { + const cid = 'test:multipleDraftsWithSameParentId'; + + // Create parent message first + final user = User(id: 'testUserId'); + final parentMessage = Message( + id: 'threadParent', + user: user, + createdAt: DateTime.now(), + text: 'Parent message', + ); + + await database.userDao.updateUsers([user]); + await database.channelDao.updateChannels([ChannelModel(cid: cid)]); + await database.messageDao.updateMessages(cid, [parentMessage]); + + // Create first thread draft + final firstDraft = Draft( + channelCid: cid, + createdAt: DateTime.now(), + parentId: parentMessage.id, + message: DraftMessage( + id: 'firstThreadDraftId', + text: 'First thread draft', + parentId: parentMessage.id, + ), + ); + + await draftMessageDao.updateDraftMessages([firstDraft]); + + // Verify first thread draft exists + final firstFetchedDraft = await draftMessageDao.getDraftMessageById( + firstDraft.message.id, + ); + expect(firstFetchedDraft, isNotNull); + expect(firstFetchedDraft!.message.text, 'First thread draft'); + + // Create second thread draft for same thread but with different ID + final secondDraft = Draft( + channelCid: cid, + createdAt: DateTime.now(), + parentId: parentMessage.id, + message: DraftMessage( + id: 'secondThreadDraftId', // Different ID + text: 'Second thread draft', + parentId: parentMessage.id, + ), + ); + + // This should replace the existing draft due to unique constraint {channelCid, parentId} + await draftMessageDao.updateDraftMessages([secondDraft]); + + // Verify only the second draft exists + final secondFetchedDraft = await draftMessageDao.getDraftMessageById( + secondDraft.message.id, + ); + expect(secondFetchedDraft, isNotNull); + expect(secondFetchedDraft!.message.id, 'secondThreadDraftId'); + expect(secondFetchedDraft.message.text, 'Second thread draft'); + + // Verify the first draft no longer exists + final firstDraftAfterUpdate = await draftMessageDao.getDraftMessageById( + firstDraft.message.id, + ); + expect(firstDraftAfterUpdate, isNull); + + // Verify there's only one draft message for this thread + final threadDraft = await draftMessageDao.getDraftMessageByParentId( + parentMessage.id, + ); + expect(threadDraft, isNotNull); + expect(threadDraft!.message.id, 'secondThreadDraftId'); + }, + ); + }); + + group('DraftMessages entity references', () { + test( + 'should delete draft messages when referenced channel is deleted', + () async { + const cid = 'test:channelRefCascade'; + // Just create one draft + final testDrafts = await _prepareTestData(cid, count: 1); + + // Verify draft exists + final draftBeforeChannelDelete = await draftMessageDao + .getDraftMessageById(testDrafts.first.message.id); + expect(draftBeforeChannelDelete, isNotNull); + + // Delete the channel + await database.channelDao.deleteChannelByCids([cid]); + + // Verify draft has been deleted (cascade) + final draftAfterChannelDelete = await draftMessageDao + .getDraftMessageById(testDrafts.first.message.id); + expect(draftAfterChannelDelete, isNull); + }, + ); + + test( + 'should delete both channel drafts and thread drafts when the channel ' + 'is deleted', + () async { + const cid = 'test:allDraftsDeletedWithChannel'; + + // Create parent messages first + final user = User(id: 'testUserId'); + final messages = List.generate( + 2, + (index) => Message( + id: 'parentMessage$index', + user: user, + createdAt: DateTime.now(), + text: 'Parent Message $index', + ), + ); + + await database.userDao.updateUsers([user]); + await database.channelDao.updateChannels([ChannelModel(cid: cid)]); + await database.messageDao.updateMessages(cid, messages); + + // Create a channel draft (no parent message) + final channelDraft = Draft( + channelCid: cid, + createdAt: DateTime.now(), + message: DraftMessage( + id: 'channelDraftId', + text: 'Channel draft message', + ), + ); + + // Create thread drafts (with parent messages) + final threadDrafts = List.generate( + 2, + (index) => Draft( + channelCid: cid, + createdAt: DateTime.now(), + parentId: messages[index].id, + message: DraftMessage( + id: 'threadDraftId$index', + text: 'Thread draft message $index', + parentId: messages[index].id, + ), + ), + ); + + // Insert all drafts + await draftMessageDao.updateDraftMessages( + [channelDraft, ...threadDrafts], + ); + + // Verify drafts exist before channel deletion + final channelDraftBeforeDelete = + await draftMessageDao.getDraftMessageById(channelDraft.message.id); + expect(channelDraftBeforeDelete, isNotNull); + expect(channelDraftBeforeDelete!.parentId, isNull); + + for (var i = 0; i < threadDrafts.length; i++) { + final threadDraft = await draftMessageDao + .getDraftMessageById(threadDrafts[i].message.id); + expect(threadDraft, isNotNull); + expect(threadDraft!.parentId, messages[i].id); + } + + // Delete the channel + await database.channelDao.deleteChannelByCids([cid]); + + // Verify all drafts have been deleted (cascade) + final channelDraftAfterDelete = + await draftMessageDao.getDraftMessageById(channelDraft.message.id); + expect(channelDraftAfterDelete, isNull); + + for (final threadDraft in threadDrafts) { + final draft = + await draftMessageDao.getDraftMessageById(threadDraft.message.id); + expect(draft, isNull); + } + }, + ); + + test( + 'should delete draft messages when referenced parent message is deleted', + () async { + const cid = 'test:parentRefCascade'; + final testDrafts = + await _prepareTestData(cid, withParentMessage: true, count: 1); + final parentId = testDrafts.first.parentId!; + + // Verify draft with parent exists + final draftBeforeMessageDelete = + await draftMessageDao.getDraftMessageByParentId(parentId); + expect(draftBeforeMessageDelete, isNotNull); + + // Delete the parent message + await database.messageDao.deleteMessageByIds([parentId]); + + // Verify draft has been deleted (cascade) + final draftAfterMessageDelete = + await draftMessageDao.getDraftMessageByParentId(parentId); + expect(draftAfterMessageDelete, isNull); + }, + ); + }); + + group('deleteDraftMessagesByIds', () { + test( + 'should delete multiple draft messages by their IDs', + () async { + // Create drafts with unique channelCids to avoid conflicts + const baseCid = 'test:deleteDraftsByIds'; + final drafts = List.generate( + 3, + (index) => Draft( + channelCid: '$baseCid$index', + createdAt: DateTime.now(), + message: DraftMessage( + id: 'draftToDelete$index', + text: 'Draft message $index', + ), + ), + ); + + // Create channels for each draft + await database.channelDao.updateChannels([ + for (final draft in drafts) ChannelModel(cid: draft.channelCid), + ]); + + // Insert all drafts + await draftMessageDao.updateDraftMessages(drafts); + + // Get IDs to delete (first and third draft) + final idsToDelete = [ + drafts.first.message.id, + drafts.last.message.id, + ]; + final idToKeep = drafts[1].message.id; + + // Verify all drafts exist before deletion + for (final draft in drafts) { + final fetchedDraft = await draftMessageDao.getDraftMessageById( + draft.message.id, + ); + expect(fetchedDraft, isNotNull); + } + + // Delete two out of three drafts + await draftMessageDao.deleteDraftMessagesByIds(idsToDelete); + + // Verify deleted drafts don't exist anymore + for (final id in idsToDelete) { + final fetchedDraft = await draftMessageDao.getDraftMessageById(id); + expect(fetchedDraft, isNull); + } + + // Verify the remaining draft still exists + final remainingDraft = + await draftMessageDao.getDraftMessageById(idToKeep); + expect(remainingDraft, isNotNull); + expect(remainingDraft!.message.id, idToKeep); + }, + ); + + test( + 'should not fail when trying to delete non-existent draft IDs', + () async { + // Should not throw any exception + await expectLater( + draftMessageDao.deleteDraftMessagesByIds(['non-existent-id']), + completes, + ); + }, + ); + + test( + 'should handle empty list of IDs gracefully', + () async { + // Should not throw any exception + await expectLater( + draftMessageDao.deleteDraftMessagesByIds([]), + completes, + ); + }, + ); + }); +} diff --git a/packages/stream_chat_persistence/test/src/mapper/draft_message_mapper_test.dart b/packages/stream_chat_persistence/test/src/mapper/draft_message_mapper_test.dart new file mode 100644 index 0000000000..a476f59093 --- /dev/null +++ b/packages/stream_chat_persistence/test/src/mapper/draft_message_mapper_test.dart @@ -0,0 +1,172 @@ +import 'dart:convert'; + +import 'package:flutter_test/flutter_test.dart'; +import 'package:stream_chat/stream_chat.dart'; +import 'package:stream_chat_persistence/src/db/drift_chat_database.dart'; +import 'package:stream_chat_persistence/src/mapper/draft_message_mapper.dart'; + +import '../utils/date_matcher.dart'; + +void main() { + group('DraftMessageMapper', () { + test('toDraft should map the entity into Draft', () { + final user = User(id: 'testUserId'); + final parentMessage = Message(id: 'testParentId'); + final quotedMessage = Message(id: 'testQuotedMessageId'); + final poll = Poll( + id: 'testPollId', + name: 'testQuestion', + options: const [ + PollOption( + id: 'testOptionId', + text: 'testOptionText', + ), + ], + ); + final attachments = List.generate( + 3, + (index) => Attachment( + id: 'testAttachmentId$index', + type: 'testAttachmentType', + assetUrl: 'testAssetUrl', + ), + ); + + final createdAt = DateTime.now(); + final entity = DraftMessageEntity( + id: 'testDraftId', + channelCid: 'testCid', + messageText: 'Test draft message', + type: 'regular', + attachments: attachments.map((it) => jsonEncode(it.toData())).toList(), + parentId: parentMessage.id, + showInChannel: true, + mentionedUsers: [jsonEncode(user.toJson())], + quotedMessageId: quotedMessage.id, + silent: false, + command: 'testCommand', + pollId: poll.id, + createdAt: createdAt, + extraData: {'extra_test_field': 'extraTestData'}, + ); + + final draft = entity.toDraft( + parentMessage: parentMessage, + quotedMessage: quotedMessage, + poll: poll, + ); + + expect(draft, isA()); + expect(draft.channelCid, entity.channelCid); + expect(draft.message.id, entity.id); + expect(draft.message.text, entity.messageText); + expect(draft.message.type, entity.type); + expect(draft.message.showInChannel, entity.showInChannel); + expect(draft.message.silent, entity.silent); + expect(draft.message.command, entity.command); + expect(draft.message.extraData, entity.extraData); + expect(draft.message.parentId, entity.parentId); + expect(draft.message.quotedMessageId, entity.quotedMessageId); + expect(draft.message.pollId, entity.pollId); + expect(draft.createdAt, isSameDateAs(entity.createdAt)); + expect(draft.parentId, entity.parentId); + expect(draft.parentMessage?.id, parentMessage.id); + expect(draft.quotedMessage?.id, quotedMessage.id); + expect(draft.message.poll?.id, poll.id); + expect(draft.message.mentionedUsers.length, 1); + expect(draft.message.mentionedUsers.first.id, user.id); + expect(draft.message.attachments.length, entity.attachments.length); + + for (var i = 0; i < draft.message.attachments.length; i++) { + final draftAttachment = draft.message.attachments[i]; + final entityAttachmentData = jsonDecode(entity.attachments[i]); + final entityAttachment = Attachment.fromData(entityAttachmentData); + expect(draftAttachment.id, entityAttachment.id); + expect(draftAttachment.type, entityAttachment.type); + expect(draftAttachment.assetUrl, entityAttachment.assetUrl); + } + }); + + test('toEntity should map Draft into DraftMessageEntity', () { + const cid = 'testCid'; + final user = User(id: 'testUserId'); + final parentMessage = Message(id: 'testParentId'); + final quotedMessage = Message(id: 'testQuotedMessageId'); + final poll = Poll( + id: 'testPollId', + name: 'testQuestion', + options: const [ + PollOption( + id: 'testOptionId', + text: 'testOptionText', + ), + ], + ); + final attachments = List.generate( + 3, + (index) => Attachment( + id: 'testAttachmentId$index', + type: 'testAttachmentType', + assetUrl: 'testAssetUrl', + ), + ); + + final createdAt = DateTime.now(); + final draftMessage = DraftMessage( + id: 'testDraftId', + text: 'Test draft message', + attachments: attachments, + parentId: parentMessage.id, + showInChannel: true, + mentionedUsers: [user], + quotedMessage: quotedMessage, + quotedMessageId: quotedMessage.id, + command: 'testCommand', + poll: poll, + pollId: poll.id, + extraData: const {'extra_test_field': 'extraTestData'}, + ); + + final draft = Draft( + channelCid: cid, + createdAt: createdAt, + message: draftMessage, + parentId: parentMessage.id, + parentMessage: parentMessage, + quotedMessage: quotedMessage, + ); + + final entity = draft.toEntity(); + + expect(entity, isA()); + expect(entity.id, draft.message.id); + expect(entity.channelCid, cid); + expect(entity.messageText, draft.message.text); + expect(entity.type, draft.message.type); + expect(entity.showInChannel, draft.message.showInChannel); + expect(entity.silent, draft.message.silent); + expect(entity.command, draft.message.command); + expect(entity.extraData, draft.message.extraData); + expect(entity.parentId, draft.message.parentId); + expect(entity.quotedMessageId, draft.message.quotedMessageId); + expect(entity.pollId, draft.message.pollId); + expect(entity.createdAt, isSameDateAs(draft.createdAt)); + expect(entity.mentionedUsers.length, 1); + + final mentionedUser = User.fromJson( + jsonDecode(entity.mentionedUsers.first), + ); + expect(mentionedUser.id, user.id); + + expect(entity.attachments.length, draft.message.attachments.length); + for (var i = 0; i < entity.attachments.length; i++) { + final entityAttachmentData = jsonDecode(entity.attachments[i]); + final entityAttachment = Attachment.fromData(entityAttachmentData); + final draftAttachment = draft.message.attachments[i]; + expect(entityAttachment.id, draftAttachment.id); + expect(entityAttachment.type, draftAttachment.type); + expect(entityAttachment.assetUrl, draftAttachment.assetUrl); + } + }); + }); +} diff --git a/packages/stream_chat_persistence/test/stream_chat_persistence_client_test.dart b/packages/stream_chat_persistence/test/stream_chat_persistence_client_test.dart index 3143654e4c..24ed7eabf4 100644 --- a/packages/stream_chat_persistence/test/stream_chat_persistence_client_test.dart +++ b/packages/stream_chat_persistence/test/stream_chat_persistence_client_test.dart @@ -220,6 +220,17 @@ void main() { ), ); final channel = ChannelModel(cid: cid); + final draft = Draft( + channelCid: cid, + createdAt: DateTime.now(), + message: DraftMessage( + id: 'testDraftId', + text: 'Test draft message', + ), + ); + + when(() => mockDatabase.draftMessageDao.getDraftMessageByCid(cid)) + .thenAnswer((_) async => draft); when(() => mockDatabase.memberDao.getMembersByCid(cid)) .thenAnswer((_) async => members); @@ -231,6 +242,8 @@ void main() { .thenAnswer((_) async => messages); when(() => mockDatabase.pinnedMessageDao.getMessagesByCid(cid)) .thenAnswer((_) async => messages); + when(() => mockDatabase.draftMessageDao.getDraftMessageByCid(cid)) + .thenAnswer((_) async => draft); final fetchedChannelState = await client.getChannelStateByCid(cid); expect(fetchedChannelState.messages?.length, messages.length); @@ -238,6 +251,7 @@ void main() { expect(fetchedChannelState.members?.length, members.length); expect(fetchedChannelState.read?.length, reads.length); expect(fetchedChannelState.channel!.cid, channel.cid); + expect(fetchedChannelState.draft?.message.id, draft.message.id); verify(() => mockDatabase.memberDao.getMembersByCid(cid)).called(1); verify(() => mockDatabase.readDao.getReadsByCid(cid)).called(1); @@ -245,6 +259,8 @@ void main() { verify(() => mockDatabase.messageDao.getMessagesByCid(cid)).called(1); verify(() => mockDatabase.pinnedMessageDao.getMessagesByCid(cid)) .called(1); + verify(() => mockDatabase.draftMessageDao.getDraftMessageByCid(cid)) + .called(1); }); group('getChannelState', () { @@ -615,6 +631,92 @@ void main() { verify(() => mockDatabase.memberDao.deleteMemberByCids(cids)).called(1); }); + // Draft message tests + test('getDraftMessageByCid', () async { + const cid = 'testCid'; + final draft = Draft( + channelCid: cid, + createdAt: DateTime.now(), + message: DraftMessage( + id: 'testDraftId', + text: 'Test draft message', + ), + ); + + when(() => mockDatabase.draftMessageDao.getDraftMessageByCid(cid)) + .thenAnswer((_) async => draft); + + final fetchedDraft = await client.getDraftMessageByCid(cid); + expect(fetchedDraft, isNotNull); + expect(fetchedDraft!.channelCid, cid); + expect(fetchedDraft.message.id, draft.message.id); + expect(fetchedDraft.message.text, draft.message.text); + verify(() => mockDatabase.draftMessageDao.getDraftMessageByCid(cid)) + .called(1); + }); + + test('getDraftMessageByParentId', () async { + const parentId = 'testParentId'; + final draft = Draft( + channelCid: 'testCid', + createdAt: DateTime.now(), + parentId: parentId, + message: DraftMessage( + id: 'testDraftId', + text: 'Test thread draft message', + parentId: parentId, + ), + ); + + when(() => + mockDatabase.draftMessageDao.getDraftMessageByParentId(parentId)) + .thenAnswer((_) async => draft); + + final fetchedDraft = await client.getDraftMessageByParentId(parentId); + expect(fetchedDraft, isNotNull); + expect(fetchedDraft!.parentId, parentId); + expect(fetchedDraft.message.id, draft.message.id); + expect(fetchedDraft.message.text, draft.message.text); + verify(() => + mockDatabase.draftMessageDao.getDraftMessageByParentId(parentId)) + .called(1); + }); + + test('updateDraftMessages', () async { + final drafts = List.generate( + 3, + (index) => Draft( + channelCid: 'testCid', + createdAt: DateTime.now(), + message: DraftMessage( + id: 'testDraftId$index', + text: 'Test draft message $index', + ), + ), + ); + + when(() => mockDatabase.draftMessageDao.updateDraftMessages(drafts)) + .thenAnswer((_) async {}); + + await client.updateDraftMessages(drafts); + verify(() => mockDatabase.draftMessageDao.updateDraftMessages(drafts)) + .called(1); + }); + + test('deleteDraftMessagesByIds', () async { + final messageIds = ['testDraftId1', 'testDraftId2', 'testDraftId3']; + + when(() => + mockDatabase.draftMessageDao.deleteDraftMessagesByIds(messageIds)) + .thenAnswer((_) async {}); + + await client.deleteDraftMessagesByIds(messageIds); + verify(() => + mockDatabase.draftMessageDao.deleteDraftMessagesByIds(messageIds)) + .called(1); + }); + // End of draft message tests + tearDown(() async { await client.disconnect(flush: true); });