diff --git a/packages/dart_client/lib/src/api/channel.dart b/packages/dart_client/lib/src/api/channel.dart index 01911b83..a8952e34 100644 --- a/packages/dart_client/lib/src/api/channel.dart +++ b/packages/dart_client/lib/src/api/channel.dart @@ -419,7 +419,7 @@ class Channel { } } - await _client.offlineStorage?.deleteMessages([messageId]); + await _client.chatPersistence?.deleteMessageById(messageId); } return res; @@ -487,7 +487,7 @@ class Channel { PaginationParams options, { bool preferOffline = false, }) async { - final cachedReplies = await _client.offlineStorage?.getReplies( + final cachedReplies = await _client.chatPersistence?.getReplies( parentId, lessThan: options?.lessThan, ); @@ -603,11 +603,9 @@ class Channel { } if (preferOffline && cid != null) { - final updatedState = await _client.offlineStorage?.getChannel( + final updatedState = await _client.chatPersistence?.getChannelStateByCid( cid, - limit: messagesPagination?.limit, - messageLessThan: messagesPagination?.lessThan, - messageGreaterThan: messagesPagination?.greaterThan, + messagePagination: messagesPagination, ); if (updatedState != null && updatedState.messages.isNotEmpty) { if (state == null) { @@ -732,7 +730,7 @@ class Channel { if (clearHistory == true) { state.truncate(); - await _client.offlineStorage?.deleteChannelsMessages([_cid]); + await _client.chatPersistence?.deleteMessageByCid(_cid); } return _client.decode(response.data, EmptyResponse.fromJson); @@ -871,7 +869,7 @@ class ChannelClientState { _computeInitialUnread(); - _channel._client.offlineStorage + _channel._client.chatPersistence ?.getChannelThreads(_channel.cid) ?.then((threads) { _threads = threads; @@ -949,8 +947,7 @@ class ChannelClientState { .on(EventType.channelTruncated, EventType.notificationChannelTruncated) .listen((event) async { final channel = event.channel; - await _channel._client.offlineStorage - ?.deleteChannelsMessages([channel.cid]); + await _channel._client.chatPersistence?.deleteMessageByCid(channel.cid); truncate(); })); } @@ -1404,7 +1401,7 @@ class ChannelClientState { set _channelState(ChannelState v) { _channelStateController.add(v); - _channel._client.offlineStorage?.updateChannelState(v); + _channel._client.chatPersistence?.updateChannelState(v); } /// The channel threads related to this channel @@ -1417,9 +1414,9 @@ class ChannelClientState { BehaviorSubject.seeded({}); set _threads(Map> v) { - _channel._client.offlineStorage?.updateMessages( - v.values.expand((v) => v).toList(), + _channel._client.chatPersistence?.updateMessages( _channel.cid, + v.values.expand((v) => v).toList(), ); _threadsController.add(v); } diff --git a/packages/dart_client/lib/src/client.dart b/packages/dart_client/lib/src/client.dart index bb026ee7..99350636 100644 --- a/packages/dart_client/lib/src/client.dart +++ b/packages/dart_client/lib/src/client.dart @@ -6,6 +6,7 @@ import 'package:dio/dio.dart'; import 'package:flutter/cupertino.dart'; import 'package:logging/logging.dart'; import 'package:rxdart/rxdart.dart'; +import 'package:stream_chat_persistence/stream_chat_persistence.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:stream_chat/src/api/retry_policy.dart'; import 'package:stream_chat/src/event_type.dart'; @@ -20,7 +21,7 @@ import 'api/connection_status.dart'; import 'api/requests.dart'; import 'api/responses.dart'; import 'api/websocket.dart'; -import 'db/offline_storage.dart'; +import 'db/stream_chat_persistence.dart'; import 'exceptions.dart'; import 'models/event.dart'; import 'models/message.dart'; @@ -110,7 +111,7 @@ class Client { logger.info('instantiating new client'); } - OfflineStorage _offlineStorage; + StreamChatPersistence _chatPersistence; /// If true chat data will persist on disk final bool persistenceEnabled; @@ -131,7 +132,7 @@ class Client { final Duration backgroundKeepAlive; /// Client offline database - OfflineStorage get offlineStorage => _offlineStorage; + StreamChatPersistence get chatPersistence => _chatPersistence; /// This client state ClientState state; @@ -344,7 +345,7 @@ class Client { /// Call this function to dispose the client void dispose() async { - await _offlineStorage?.disconnect(); + await _chatPersistence?.disconnect(); await _disconnect(); httpClient.close(); await _controller.close(); @@ -426,8 +427,8 @@ class Client { if (!event.isLocal) { if (_synced && event.createdAt != null) { - await _offlineStorage?.updateConnectionInfo(event); - await _offlineStorage?.updateLastSyncAt(event.createdAt); + await _chatPersistence?.updateConnectionInfo(event); + await _chatPersistence?.updateLastSyncAt(event.createdAt); } } @@ -458,9 +459,12 @@ class Client { wsConnectionStatus.value = ConnectionStatus.connecting; - if (persistenceEnabled && _offlineStorage == null) { - _offlineStorage = - await connectDatabase(state.user, _detachedLogger('💽')); + if (persistenceEnabled && _chatPersistence == null) { + _chatPersistence = StreamChatPersistenceImpl( + state.user.id, + logger: _detachedLogger('💽'), + ); + await _chatPersistence.connect(); } _ws = WebSocket( @@ -510,10 +514,10 @@ class Client { _ws.connectionStatus.addListener(_connectionStatusListener); - var event = await _offlineStorage?.getConnectionInfo(); + var event = await _chatPersistence?.getConnectionInfo(); await _ws.connect().then((e) async { - await _offlineStorage?.updateConnectionInfo(e); + await _chatPersistence?.updateConnectionInfo(e); event = e; await resync(); }).catchError((err, stacktrace) { @@ -528,14 +532,14 @@ class Client { /// Get the events missed while offline to sync the offline storage Future resync([List cids]) async { - final lastSyncAt = await offlineStorage?.getLastSyncAt(); + final lastSyncAt = await chatPersistence?.getLastSyncAt(); if (lastSyncAt == null) { _synced = true; return; } - cids ??= await offlineStorage?.getChannelCids(); + cids ??= await chatPersistence?.getChannelCids(); if (cids?.isEmpty == true) { return; @@ -564,7 +568,7 @@ class Client { handleEvent(event); }); - await _offlineStorage?.updateLastSyncAt(DateTime.now()); + await _chatPersistence?.updateLastSyncAt(DateTime.now()); _synced = true; } catch (error) { logger.severe('Error during resync $error'); @@ -710,7 +714,7 @@ class Client { channels.add(channel); } else { final newChannel = Channel.fromState(this, channelState); - await _offlineStorage + await _chatPersistence ?.updateChannelState(newChannel.state.channelState); newChannel.state?.updateChannelState(channelState); newChannels[newChannel.cid] = newChannel; @@ -721,7 +725,7 @@ class Client { state.channels = newChannels; - await _offlineStorage?.updateChannelQueries( + await _chatPersistence?.updateChannelQueries( filter, res.channels.map((c) => c.channel.cid).toList(), paginationParams?.offset == null || paginationParams.offset == 0, @@ -756,7 +760,7 @@ class Client { @required List sort, PaginationParams paginationParams = const PaginationParams(limit: 10), }) async { - final offlineChannels = await _offlineStorage?.getChannelStates( + final offlineChannels = await _chatPersistence?.getChannelStates( filter: filter, sort: sort, paginationParams: paginationParams, @@ -771,7 +775,7 @@ class Client { return channel; } else { final newChannel = Channel.fromState(this, channelState); - _offlineStorage?.updateChannelState(newChannel.state.channelState); + _chatPersistence?.updateChannelState(newChannel.state.channelState); newChannels[newChannel.cid] = newChannel; return newChannel; } @@ -925,17 +929,17 @@ class Client { } /// Closes the websocket connection and resets the client - /// If [flushOfflineStorage] is true the client deletes all offline user's data + /// If [flushChatPersistence] is true the client deletes all offline user's data /// If [clearUser] is true the client unsets the current user Future disconnect({ - bool flushOfflineStorage = false, + bool flushChatPersistence = false, bool clearUser = false, }) async { logger.info( - 'Disconnecting flushOfflineStorage: $flushOfflineStorage; clearUser: $clearUser'); + 'Disconnecting flushOfflineStorage: $flushChatPersistence; clearUser: $clearUser'); - await _offlineStorage?.disconnect(flush: flushOfflineStorage); - _offlineStorage = null; + await _chatPersistence?.disconnect(flush: flushChatPersistence); + _chatPersistence = null; if (clearUser == true) { state.dispose(); @@ -1324,7 +1328,7 @@ class ClientState { void _listenChannelHidden() { _subscriptions.add(_client.on(EventType.channelHidden).listen((event) { - _client._offlineStorage?.deleteChannels([event.cid]); + _client._chatPersistence?.deleteChannels([event.cid]); if (channels != null) { channels = channels..removeWhere((cid, ch) => cid == event.cid); } @@ -1349,7 +1353,7 @@ class ClientState { ) .listen((Event event) async { final eventChannel = event.channel; - await _client._offlineStorage?.deleteChannels([eventChannel.cid]); + await _client._chatPersistence?.deleteChannels([eventChannel.cid]); if (channels != null) { channels = channels..remove(eventChannel.cid); } diff --git a/packages/dart_client/lib/src/db/models.part.dart b/packages/dart_client/lib/src/db/models.part.dart deleted file mode 100644 index 9a8c5e8e..00000000 --- a/packages/dart_client/lib/src/db/models.part.dart +++ /dev/null @@ -1,258 +0,0 @@ -part of 'offline_storage.dart'; - -@DataClassName('ChannelQuery') -class _ChannelQueries extends Table { - TextColumn get queryHash => text()(); - - TextColumn get channelCid => text()(); - - @override - Set get primaryKey => { - queryHash, - channelCid, - }; -} - -class _Channels extends Table { - TextColumn get id => text()(); - - TextColumn get type => text()(); - - TextColumn get cid => text()(); - - TextColumn get config => text()(); - - BoolColumn get frozen => boolean().withDefault(Constant(false))(); - - DateTimeColumn get lastMessageAt => dateTime().nullable()(); - - DateTimeColumn get createdAt => dateTime().nullable()(); - - DateTimeColumn get updatedAt => dateTime().nullable()(); - - DateTimeColumn get deletedAt => dateTime().nullable()(); - - IntColumn get memberCount => integer().nullable()(); - - TextColumn get extraData => text().nullable().map(_ExtraDataConverter())(); - - TextColumn get createdBy => text().nullable()(); - - @override - Set get primaryKey => {cid}; -} - -class _ConnectionEvent extends Table { - IntColumn get id => integer()(); - - TextColumn get ownUser => text().nullable().map(_ExtraDataConverter())(); - - IntColumn get totalUnreadCount => integer().nullable()(); - - IntColumn get unreadChannels => integer().nullable()(); - - DateTimeColumn get lastEventAt => dateTime().nullable()(); - - DateTimeColumn get lastSyncAt => dateTime().nullable()(); - - @override - Set get primaryKey => {id}; -} - -class _Users extends Table { - TextColumn get id => text()(); - - TextColumn get role => text().nullable()(); - - DateTimeColumn get createdAt => dateTime().nullable()(); - - DateTimeColumn get updatedAt => dateTime().nullable()(); - - DateTimeColumn get lastActive => dateTime().nullable()(); - - BoolColumn get online => boolean().nullable()(); - - BoolColumn get banned => boolean().nullable()(); - - TextColumn get extraData => text().nullable().map(_ExtraDataConverter())(); - - @override - Set get primaryKey => {id}; -} - -class _Reads extends Table { - DateTimeColumn get lastRead => dateTime()(); - - TextColumn get userId => text()(); - - TextColumn get channelCid => text()(); - - IntColumn get unreadMessages => integer().nullable()(); - - @override - Set get primaryKey => { - userId, - channelCid, - }; -} - -class _Reactions extends Table { - TextColumn get messageId => text()(); - - TextColumn get type => text()(); - - DateTimeColumn get createdAt => dateTime()(); - - IntColumn get score => integer().nullable()(); - - TextColumn get userId => text()(); - - TextColumn get extraData => text().nullable().map(_ExtraDataConverter())(); - - @override - Set get primaryKey => { - messageId, - type, - userId, - }; -} - -class _Messages extends Table { - TextColumn get id => text()(); - - TextColumn get messageText => text().nullable()(); - - TextColumn get attachmentJson => text().nullable()(); - - IntColumn get status => - integer().map(_MessageSendingStatusConverter()).nullable()(); - - TextColumn get type => text().nullable()(); - - List mentionedUsers; - - TextColumn get reactionCounts => - text().nullable().map(_ExtraDataConverter())(); - - TextColumn get reactionScores => - text().nullable().map(_ExtraDataConverter())(); - - TextColumn get parentId => text().nullable()(); - - TextColumn get quotedMessageId => text().nullable()(); - - IntColumn get replyCount => integer().nullable()(); - - BoolColumn get showInChannel => boolean().nullable()(); - - BoolColumn get shadowed => boolean().nullable()(); - - TextColumn get command => text().nullable()(); - - DateTimeColumn get createdAt => dateTime()(); - - DateTimeColumn get updatedAt => dateTime().nullable()(); - - DateTimeColumn get deletedAt => dateTime().nullable()(); - - TextColumn get userId => text().nullable()(); - - TextColumn get channelCid => text().nullable()(); - - TextColumn get extraData => text().nullable().map(_ExtraDataConverter())(); - - @override - Set get primaryKey => {id}; -} - -class _Members extends Table { - TextColumn get userId => text()(); - - TextColumn get channelCid => text()(); - - TextColumn get role => text().nullable()(); - - DateTimeColumn get inviteAcceptedAt => dateTime().nullable()(); - - DateTimeColumn get inviteRejectedAt => dateTime().nullable()(); - - BoolColumn get invited => boolean().nullable()(); - - BoolColumn get banned => boolean().nullable()(); - - BoolColumn get shadowBanned => boolean().nullable()(); - - BoolColumn get isModerator => boolean().nullable()(); - - DateTimeColumn get createdAt => dateTime()(); - - DateTimeColumn get updatedAt => dateTime().nullable()(); - - @override - Set get primaryKey => { - userId, - channelCid, - }; -} - -class _ExtraDataConverter extends TypeConverter, String> { - @override - Map mapToDart(fromDb) { - if (fromDb == null) { - return null; - } - return Map.from(jsonDecode(fromDb) ?? {}); - } - - @override - String mapToSql(value) { - return jsonEncode(value); - } -} - -class _MessageSendingStatusConverter - extends TypeConverter { - @override - MessageSendingStatus mapToDart(int fromDb) { - switch (fromDb) { - case 0: - return MessageSendingStatus.sending; - case 1: - return MessageSendingStatus.sent; - case 2: - return MessageSendingStatus.failed; - case 3: - return MessageSendingStatus.updating; - case 4: - return MessageSendingStatus.failed_update; - case 5: - return MessageSendingStatus.deleting; - case 6: - return MessageSendingStatus.failed_delete; - default: - return null; - } - } - - @override - int mapToSql(MessageSendingStatus value) { - switch (value) { - case MessageSendingStatus.sending: - return 0; - case MessageSendingStatus.sent: - return 1; - case MessageSendingStatus.failed: - return 2; - case MessageSendingStatus.updating: - return 3; - case MessageSendingStatus.failed_update: - return 4; - case MessageSendingStatus.deleting: - return 5; - case MessageSendingStatus.failed_delete: - return 6; - default: - return null; - } - } -} diff --git a/packages/dart_client/lib/src/db/offline_storage.dart b/packages/dart_client/lib/src/db/offline_storage.dart deleted file mode 100644 index b132ae02..00000000 --- a/packages/dart_client/lib/src/db/offline_storage.dart +++ /dev/null @@ -1,841 +0,0 @@ -import 'dart:convert'; - -import 'package:flutter/material.dart' show WidgetsFlutterBinding; -import 'package:logging/logging.dart'; -import 'package:moor/isolate.dart'; -import 'package:moor/moor.dart'; -import 'package:stream_chat/src/db/shared/shared_db.dart'; -import 'package:stream_chat/src/models/event.dart'; -import 'package:stream_chat/src/models/own_user.dart'; - -import '../api/requests.dart'; -import '../models/attachment.dart'; -import '../models/channel_config.dart'; -import '../models/channel_model.dart'; -import '../models/channel_state.dart'; -import '../models/member.dart'; -import '../models/message.dart'; -import '../models/reaction.dart'; -import '../models/read.dart'; -import '../models/user.dart'; - -part 'models.part.dart'; - -part 'offline_storage.g.dart'; - -/// Gets a new instance of the database running on a background isolate -Future connectDatabase(User user, Logger logger) async { - logger.info('Connecting on background isolate'); - WidgetsFlutterBinding.ensureInitialized(); - return SharedDB.constructOfflineStorage( - userId: user.id, - logger: logger, - ); -} - -LazyDatabase _openConnection(String userId) { - moorRuntimeOptions.dontWarnAboutMultipleDatabases = true; - return LazyDatabase(() async { - return await SharedDB.constructDatabase('db_$userId.sqlite'); - }); -} - -/// Offline database used for caching channel queries and state -@UseMoor(tables: [ - _ConnectionEvent, - _Channels, - _Users, - _Messages, - _Reads, - _Members, - _ChannelQueries, - _Reactions, -]) -class OfflineStorage extends _$OfflineStorage { - /// Creates a new database instance - OfflineStorage.connect( - DatabaseConnection connection, - this._userId, - this._isolate, - this._logger, - ) : super.connect(connection); - - /// Instantiate a new OfflineStorage - OfflineStorage( - this._userId, - this._logger, - ) : _isolate = null, - super(_openConnection(_userId)) { - _logger.info('Connecting on standard isolate'); - } - - final String _userId; - final MoorIsolate _isolate; - final Logger _logger; - - // you should bump this number whenever you change or add a table definition. Migrations - // are covered later in this readme. - @override - int get schemaVersion => 8; - - @override - MigrationStrategy get migration => MigrationStrategy( - onUpgrade: (openingDetails, before, after) async { - if (before != after) { - final m = createMigrator(); - for (final table in allTables) { - await m.deleteTable(table.actualTableName); - await m.createTable(table); - } - } - }, - ); - - /// Closes the database instance - /// If [flush] is true, the database data will be deleted - Future disconnect({bool flush = false}) async { - _logger.info('Disconnecting'); - if (flush) { - _logger.info('Flushing'); - await batch((batch) { - allTables.forEach((table) { - delete(table).go(); - }); - }); - } - - await _isolate?.shutdownAll(); - - await close(); - } - - /// Get stored replies by messageId - Future> getReplies( - String parentId, { - String lessThan, - }) async { - final offlineList = await Future.wait(await (select(messages).join([ - innerJoin(users, messages.userId.equalsExp(users.id)), - ]) - ..where(messages.parentId.equals(parentId)) - ..orderBy([ - OrderingTerm.asc(messages.createdAt), - ])) - .map(_messageFromJoinRow) - .get()); - if (lessThan != null) { - final lessThanIndex = offlineList.indexWhere((m) => m.id == lessThan); - offlineList.removeRange(lessThanIndex, offlineList.length); - } - - return offlineList; - } - - /// Get stored connection event - Future getConnectionInfo() async { - return select(connectionEvent).map((row) { - return Event( - me: row.ownUser != null ? OwnUser.fromJson(row.ownUser) : null, - totalUnreadCount: row.totalUnreadCount, - unreadChannels: row.unreadChannels, - ); - }).getSingle(); - } - - /// Get stored lastSyncAt - Future getLastSyncAt() async { - return select(connectionEvent).getSingle().then((r) => r?.lastSyncAt); - } - - /// Update stored connection event - Future updateConnectionInfo(Event event) async { - final connectionInfo = await select(connectionEvent).getSingle(); - - return into(connectionEvent).insert( - _ConnectionEventData( - id: 1, - lastSyncAt: connectionInfo?.lastSyncAt, - lastEventAt: event.createdAt ?? connectionInfo?.lastEventAt, - totalUnreadCount: - event.totalUnreadCount ?? connectionInfo?.totalUnreadCount, - ownUser: event.me?.toJson() ?? connectionInfo?.ownUser, - unreadChannels: event.unreadChannels ?? connectionInfo?.unreadChannels, - ), - mode: InsertMode.insertOrReplace, - ); - } - - /// Update stored lastSyncAt - Future updateLastSyncAt(DateTime lastSyncAt) async { - return await (update(connectionEvent)..where((r) => r.id.equals(1))).write( - _ConnectionEventCompanion( - id: Value(1), - lastSyncAt: Value(lastSyncAt), - ), - ); - } - - /// Get the channel cids saved in the offline storage - Future> getChannelCids() async { - return (select(channels) - ..orderBy([(c) => OrderingTerm.desc(c.lastMessageAt)]) - ..limit(250)) - .map((c) => c.cid) - .get(); - } - - /// Get channel data by cid - Future getChannel( - String cid, { - int limit, - String messageLessThan, - String messageGreaterThan, - }) async { - return await (select(channels)..where((c) => c.cid.equals(cid))).join([ - leftOuterJoin(users, channels.createdBy.equalsExp(users.id)), - ]).map((row) { - return _channelFromRow( - row.readTable(channels), - row.readTable(users), - limit: limit, - messageLessThan: messageLessThan, - messageGreaterThan: messageGreaterThan, - ); - }).getSingle(); - } - - /// Get list of channels by filter, sort and paginationParams - Future> getChannelStates({ - Map filter, - List sort = const [], - PaginationParams paginationParams, - }) async { - _logger.info('Get channel states'); - final hash = _computeHash(filter); - final cachedChannels = await Future.wait(await (select(channelQueries) - ..where((c) => c.queryHash.equals(hash))) - .get() - .then((channelQueries) { - final cids = channelQueries.map((c) => c.channelCid).toList(); - final query = select(channels)..where((c) => c.cid.isIn(cids)); - - sort = sort - ?.where((s) => ChannelModel.topLevelFields.contains(s.field)) - ?.toList(); - - if (sort != null && sort.isNotEmpty) { - query.orderBy(sort.map((s) { - final orderExpression = CustomExpression('channels.${s.field}'); - return (c) => OrderingTerm( - expression: orderExpression, - mode: s.direction == 1 ? OrderingMode.asc : OrderingMode.desc, - ); - }).toList()); - } - - if (paginationParams != null) { - query.limit( - paginationParams.limit ?? 10, - offset: paginationParams.offset, - ); - } - - return query.join([ - leftOuterJoin(users, channels.createdBy.equalsExp(users.id)), - ]).map((row) async { - final userRow = row.readTable(users); - final channelRow = row.readTable(channels); - - return _channelFromRow(channelRow, userRow); - }).get(); - })); - - _logger.info('Got ${cachedChannels.length} channels'); - - if (sort?.isEmpty != false && cachedChannels?.isNotEmpty == true) { - cachedChannels - .sort((a, b) => b.channel.updatedAt.compareTo(a.channel.updatedAt)); - cachedChannels.sort((a, b) { - final dateA = a.channel.lastMessageAt ?? a.channel.createdAt; - final dateB = b.channel.lastMessageAt ?? b.channel.createdAt; - return dateB.compareTo(dateA); - }); - } - - return cachedChannels; - } - - /// Update list of channel queries - /// If [clearQueryCache] is true before the insert - /// the list of matching rows will be deleted - Future updateChannelQueries( - Map filter, - List cids, - bool clearQueryCache, - ) async { - final hash = _computeHash(filter); - if (clearQueryCache) { - await (delete(channelQueries) - ..where( - (_ChannelQueries query) => query.queryHash.equals(hash), - )) - .go(); - } - - return batch((batch) { - batch.insertAll( - channelQueries, - cids.map((cid) { - return ChannelQuery( - queryHash: hash, - channelCid: cid, - ); - }).toList(), - mode: InsertMode.insertOrReplace, - ); - }); - } - - /// Remove a message by message id - Future deleteMessages(List messageIds) { - return batch((batch) { - batch.deleteWhere<_Reactions, _Reaction>( - reactions, - (r) => r.messageId.isIn(messageIds), - ); - batch.deleteWhere<_Messages, _Message>( - messages, - (m) => m.id.isIn(messageIds), - ); - }); - } - - /// Remove a message by message id - Future deleteChannelsMessages(List cids) async { - final messageIds = await (select(messages) - ..where((m) => m.channelCid.isIn(cids))) - .map((m) => m.id) - .get(); - return batch((batch) { - batch.deleteWhere<_Reactions, _Reaction>( - reactions, - (r) => r.messageId.isIn(messageIds), - ); - batch.deleteWhere<_Messages, _Message>( - messages, - (m) => m.id.isIn(messageIds), - ); - }); - } - - /// Remove a channel by cid - Future deleteChannels(List cids) async { - await deleteChannelsMessages(cids); - return batch((batch) { - batch.deleteWhere<_Members, _Member>( - members, - (m) => m.channelCid.isIn(cids), - ); - batch.deleteWhere<_Reads, _Read>( - reads, - (r) => r.channelCid.isIn(cids), - ); - batch.deleteWhere<_Channels, _Channel>( - channels, - (c) => c.cid.isIn(cids), - ); - }); - } - - /// Update messages data from a list - Future updateMessages( - List newMessages, - String cid, - ) { - return batch((batch) { - batch.insertAll( - messages, - newMessages.map( - (m) { - return _Message( - id: m.id, - attachmentJson: m.attachments != null - ? jsonEncode(m.attachments.map((a) => a.toJson()).toList()) - : null, - channelCid: cid, - type: m.type, - parentId: m.parentId, - quotedMessageId: m.quotedMessageId, - command: m.command, - createdAt: m.createdAt, - shadowed: m.shadowed, - showInChannel: m.showInChannel, - replyCount: m.replyCount, - reactionScores: m.reactionScores, - reactionCounts: m.reactionCounts, - status: m.status, - updatedAt: m.updatedAt, - extraData: m.extraData, - userId: m.user.id, - deletedAt: m.deletedAt, - messageText: m.text, - ); - }, - ).toList(), - mode: InsertMode.insertOrReplace, - ); - }); - } - - /// Update single channel state - Future updateChannelState(ChannelState channelState) async { - await updateChannelStates([channelState]); - } - - /// Update list of channel states - Future updateChannelStates(List channelStates) async { - channelStates.forEach((cs) { - updateMessages( - cs.messages, - cs.channel.cid, - ); - }); - - await batch((batch) { - _updateReactions(batch, channelStates); - - _updateUsers(batch, channelStates); - - _updateReads(channelStates, batch); - - _updateMembers(channelStates, batch); - - _updateChannels(batch, channelStates); - }); - } - - /// Get the info about channel threads - Future>> getChannelThreads(String cid) async { - final rowMessages = await Future.wait(await (select(messages).join([ - leftOuterJoin(users, messages.userId.equalsExp(users.id)), - ]) - ..where(messages.channelCid.equals(cid)) - ..where(isNotNull(messages.parentId)) - ..orderBy([ - OrderingTerm.asc(messages.createdAt), - ])) - .map(_messageFromJoinRow) - .get()); - - final threads = >{}; - rowMessages.forEach((message) { - if (threads.containsKey(message.parentId)) { - threads[message.parentId].add(message); - } else { - threads[message.parentId] = [message]; - } - }); - - return threads; - } - - Future _channelFromRow( - _Channel channelRow, - _User userRow, { - int limit, - String messageLessThan, - String messageGreaterThan, - }) async { - final rowMessages = await _getChannelMessages( - channelRow, - limit: limit, - lessThan: messageLessThan, - greaterThan: messageGreaterThan, - ); - final rowReads = await _getChannelReads(channelRow); - final rowMembers = await _getChannelMembers(channelRow); - - return ChannelState( - members: rowMembers, - read: rowReads, - messages: rowMessages, - channel: ChannelModel( - id: channelRow.id, - type: channelRow.type, - frozen: channelRow.frozen, - createdAt: channelRow.createdAt, - updatedAt: channelRow.updatedAt, - memberCount: channelRow.memberCount, - cid: channelRow.cid, - lastMessageAt: channelRow.lastMessageAt, - deletedAt: channelRow.deletedAt, - extraData: channelRow.extraData, - config: ChannelConfig.fromJson(jsonDecode(channelRow.config)), - createdBy: userRow != null ? _userFromUserRow(userRow) : null, - ), - ); - } - - String _computeHash(Map filter) { - if (filter == null) { - return 'allchannels'; - } - final hash = base64Encode(utf8.encode('filter: ${jsonEncode(filter)}')); - return hash; - } - - Future _getMessageById(String id) async { - if (id == null || id.isEmpty) return null; - final message = await Future.wait(await (select(messages).join([ - leftOuterJoin(users, messages.userId.equalsExp(users.id)), - ]) - ..where(messages.id.equals(id))) - .map(_messageFromJoinRow) - .get()); - return message.first; - } - - Future> _getChannelMessages( - _Channel channelRow, { - int limit, - String lessThan, - String greaterThan, - }) async { - final rowMessages = await Future.wait(await (select(messages).join([ - leftOuterJoin(users, messages.userId.equalsExp(users.id)), - ]) - ..where(messages.channelCid.equals(channelRow.cid)) - ..where( - isNull(messages.parentId) | messages.showInChannel.equals(true)) - ..orderBy([ - OrderingTerm.asc(messages.createdAt), - ])) - .map(_messageFromJoinRow) - .get()); - - if (lessThan != null) { - final lessThanIndex = rowMessages.indexWhere((m) => m.id == lessThan); - if (lessThanIndex != -1) { - rowMessages.removeRange(lessThanIndex, rowMessages.length); - } - } - if (greaterThan != null) { - final greaterThanIndex = - rowMessages.indexWhere((m) => m.id == greaterThan); - if (greaterThanIndex != -1) { - rowMessages.removeRange(0, greaterThanIndex); - } - } - if (limit != null) { - return rowMessages.take(limit).toList(); - } - return rowMessages; - } - - Future _messageFromJoinRow(row) async { - final messageRow = row.readTable(messages); - final userRow = row.readTable(users); - - final latestReactions = await _getLatestReactions(messageRow); - final ownReactions = await _getOwnReactions(messageRow); - final quotedMessage = await _getMessageById(messageRow.quotedMessageId); - - return Message( - shadowed: messageRow.shadowed, - latestReactions: latestReactions, - ownReactions: ownReactions, - attachments: messageRow.attachmentJson != null - ? List>.from( - jsonDecode(messageRow.attachmentJson)) - .map((j) => Attachment.fromJson(j)) - .toList() - : null, - createdAt: messageRow.createdAt, - extraData: messageRow.extraData, - updatedAt: messageRow.updatedAt, - id: messageRow.id, - type: messageRow.type, - status: messageRow.status, - command: messageRow.command, - parentId: messageRow.parentId, - quotedMessageId: messageRow.quotedMessageId, - quotedMessage: quotedMessage, - reactionCounts: messageRow.reactionCounts, - reactionScores: messageRow.reactionScores, - replyCount: messageRow.replyCount, - showInChannel: messageRow.showInChannel, - text: messageRow.messageText, - user: _userFromUserRow(userRow), - deletedAt: messageRow.deletedAt, - ); - } - - Future> _getLatestReactions(_Message messageRow) async { - return await (select(reactions).join([ - leftOuterJoin(users, reactions.userId.equalsExp(users.id)), - ]) - ..where(reactions.messageId.equals(messageRow.id)) - ..orderBy([OrderingTerm.asc(reactions.createdAt)])) - .map((row) { - final r = row.readTable(reactions); - final u = row.readTable(users); - return _reactionFromRow(r, u); - }).get(); - } - - Reaction _reactionFromRow(_Reaction r, _User u) { - return Reaction( - extraData: r.extraData, - type: r.type, - createdAt: r.createdAt, - userId: r.userId, - user: _userFromUserRow(u), - messageId: r.messageId, - score: r.score, - ); - } - - Future> _getOwnReactions(_Message messageRow) async { - return await (select(reactions).join([ - leftOuterJoin(users, reactions.userId.equalsExp(users.id)), - ]) - ..where(reactions.userId.equals(_userId)) - ..where(reactions.messageId.equals(messageRow.id)) - ..orderBy([OrderingTerm.asc(reactions.createdAt)])) - .map((row) { - final r = row.readTable(reactions); - final u = row.readTable(users); - return _reactionFromRow(r, u); - }).get(); - } - - Future> _getChannelReads(_Channel channelRow) async { - final rowReads = await (select(reads).join([ - leftOuterJoin(users, reads.userId.equalsExp(users.id)), - ]) - ..where(reads.channelCid.equals(channelRow.cid)) - ..orderBy([ - OrderingTerm.asc(reads.lastRead), - ])) - .map((row) { - final userRow = row.readTable(users); - final readRow = row.readTable(reads); - return Read( - user: _userFromUserRow(userRow), - lastRead: readRow.lastRead, - unreadMessages: readRow.unreadMessages, - ); - }).get(); - return rowReads; - } - - Future> _getChannelMembers(_Channel channelRow) async { - final rowMembers = await (select(members).join([ - leftOuterJoin(users, members.userId.equalsExp(users.id)), - ]) - ..where(members.channelCid.equals(channelRow.cid)) - ..orderBy([ - OrderingTerm.asc(members.createdAt), - ])) - .map((row) { - final userRow = row.readTable(users); - final memberRow = row.readTable(members); - return Member( - user: _userFromUserRow(userRow), - userId: userRow.id, - banned: memberRow.banned, - shadowBanned: memberRow.shadowBanned, - updatedAt: memberRow.updatedAt, - createdAt: memberRow.createdAt, - role: memberRow.role, - inviteAcceptedAt: memberRow.inviteAcceptedAt, - invited: memberRow.invited, - inviteRejectedAt: memberRow.inviteRejectedAt, - isModerator: memberRow.isModerator, - ); - }).get(); - return rowMembers; - } - - User _userFromUserRow(_User userRow) { - return User( - updatedAt: userRow.updatedAt, - role: userRow.role, - online: userRow.online, - lastActive: userRow.lastActive, - extraData: userRow.extraData, - banned: userRow.banned, - createdAt: userRow.createdAt, - id: userRow.id, - ); - } - - void _updateChannels(Batch batch, List channelStates) { - batch.insertAll( - channels, - channelStates.map((cs) { - final channel = cs.channel; - return _channelDataFromChannelModel(channel); - }).toList(), - mode: InsertMode.insertOrReplace, - ); - } - - void _updateMembers(List channelStates, Batch batch) async { - await (delete(members) - ..where((tbl) => - tbl.channelCid.isIn(channelStates.map((e) => e.channel.cid)))) - .go(); - final newMembers = channelStates - .map((cs) => cs.members.map((m) => _Member( - userId: m.user.id, - banned: m.banned, - shadowBanned: m.shadowBanned, - channelCid: cs.channel.cid, - createdAt: m.createdAt, - isModerator: m.isModerator, - inviteRejectedAt: m.inviteRejectedAt, - invited: m.invited, - inviteAcceptedAt: m.inviteAcceptedAt, - role: m.role, - updatedAt: m.updatedAt, - ))) - .where((v) => v != null) - .expand((v) => v); - if (newMembers != null && newMembers.isNotEmpty) { - batch.insertAll( - members, - newMembers.toList(), - mode: InsertMode.insertOrReplace, - ); - } - } - - void _updateReads(List channelStates, Batch batch) { - final newReads = channelStates - .map((cs) => cs.read?.map((r) => _Read( - lastRead: r.lastRead, - userId: r.user.id, - channelCid: cs.channel.cid, - unreadMessages: r.unreadMessages, - ))) - .where((v) => v != null) - .expand((v) => v); - - if (newReads != null && newReads.isNotEmpty) { - batch.insertAll( - reads, - newReads.toList(), - mode: InsertMode.insertOrReplace, - ); - } - } - - void _updateUsers(Batch batch, List channelStates) { - batch.insertAll( - users, - channelStates - .map((cs) => [ - if (cs.channel.createdBy != null) - _userDataFromUser(cs.channel.createdBy), - if (cs.messages != null) - ...cs.messages - .map((m) => [ - _userDataFromUser(m.user), - if (m.latestReactions != null) - ...m.latestReactions - .where((r) => r.user != null) - .map((r) => _userDataFromUser(r.user)), - if (m.ownReactions != null) - ...m.ownReactions - .where((r) => r.user != null) - .map((r) => _userDataFromUser(r.user)), - ]) - .expand((v) => v), - if (cs.read != null) - ...cs.read.map((r) => _userDataFromUser(r.user)), - if (cs.members != null) - ...cs.members.map((m) => _userDataFromUser(m.user)), - ]) - .expand((v) => v) - .toList(), - mode: InsertMode.insertOrReplace, - ); - } - - void _updateReactions(Batch batch, List channelStates) { - batch.deleteWhere<_Reactions, _Reaction>( - reactions, - (r) => r.messageId.isIn(channelStates - .map((cs) => cs.messages.map((m) => m.id)) - .expand((v) => v)), - ); - final newReactions = channelStates - .map((cs) => cs.messages.map((m) { - final ownReactions = - m.ownReactions?.where((e) => e.userId != null)?.map( - (r) => _reactionDataFromReaction(m, r), - ) ?? - []; - final latestReactions = - m.latestReactions?.where((e) => e.userId != null)?.map( - (r) => _reactionDataFromReaction(m, r), - ) ?? - []; - return [ - ...ownReactions, - ...latestReactions, - ]; - }).expand((v) => v)) - .expand((v) => v); - - if (newReactions.isNotEmpty) { - batch.insertAll( - reactions, - newReactions.toList(), - mode: InsertMode.insertOrReplace, - ); - } - } - - _Reaction _reactionDataFromReaction(Message m, Reaction r) { - return _Reaction( - messageId: m.id, - type: r.type, - extraData: r.extraData, - score: r.score, - createdAt: r.createdAt, - userId: r.userId, - ); - } - - _User _userDataFromUser(User user) { - return _User( - id: user.id, - createdAt: user.createdAt, - banned: user.banned, - extraData: user.extraData, - lastActive: user.lastActive, - online: user.online, - role: user.role, - updatedAt: user.updatedAt, - ); - } - - _Channel _channelDataFromChannelModel(ChannelModel channel) { - return _Channel( - id: channel.id, - config: jsonEncode(channel.config?.toJson() ?? {}), - type: channel.type, - frozen: channel.frozen, - createdAt: channel.createdAt, - updatedAt: channel.updatedAt, - memberCount: channel.memberCount, - cid: channel.cid, - lastMessageAt: channel.lastMessageAt, - deletedAt: channel.deletedAt, - extraData: channel.extraData, - createdBy: channel.createdBy?.id, - ); - } -} diff --git a/packages/dart_client/lib/src/db/offline_storage.g.dart b/packages/dart_client/lib/src/db/offline_storage.g.dart deleted file mode 100644 index a87ecb92..00000000 --- a/packages/dart_client/lib/src/db/offline_storage.g.dart +++ /dev/null @@ -1,4160 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'offline_storage.dart'; - -// ************************************************************************** -// MoorGenerator -// ************************************************************************** - -// ignore_for_file: unnecessary_brace_in_string_interps, unnecessary_this -class _ConnectionEventData extends DataClass - implements Insertable<_ConnectionEventData> { - final int id; - final Map ownUser; - final int totalUnreadCount; - final int unreadChannels; - final DateTime lastEventAt; - final DateTime lastSyncAt; - _ConnectionEventData( - {@required this.id, - this.ownUser, - this.totalUnreadCount, - this.unreadChannels, - this.lastEventAt, - this.lastSyncAt}); - factory _ConnectionEventData.fromData( - Map data, GeneratedDatabase db, - {String prefix}) { - final effectivePrefix = prefix ?? ''; - final intType = db.typeSystem.forDartType(); - final stringType = db.typeSystem.forDartType(); - final dateTimeType = db.typeSystem.forDartType(); - return _ConnectionEventData( - id: intType.mapFromDatabaseResponse(data['${effectivePrefix}id']), - ownUser: $_ConnectionEventTable.$converter0.mapToDart(stringType - .mapFromDatabaseResponse(data['${effectivePrefix}own_user'])), - totalUnreadCount: intType.mapFromDatabaseResponse( - data['${effectivePrefix}total_unread_count']), - unreadChannels: intType - .mapFromDatabaseResponse(data['${effectivePrefix}unread_channels']), - lastEventAt: dateTimeType - .mapFromDatabaseResponse(data['${effectivePrefix}last_event_at']), - lastSyncAt: dateTimeType - .mapFromDatabaseResponse(data['${effectivePrefix}last_sync_at']), - ); - } - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - if (!nullToAbsent || id != null) { - map['id'] = Variable(id); - } - if (!nullToAbsent || ownUser != null) { - final converter = $_ConnectionEventTable.$converter0; - map['own_user'] = Variable(converter.mapToSql(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; - } - - _ConnectionEventCompanion toCompanion(bool nullToAbsent) { - return _ConnectionEventCompanion( - id: id == null && nullToAbsent ? const Value.absent() : Value(id), - ownUser: ownUser == null && nullToAbsent - ? const Value.absent() - : Value(ownUser), - totalUnreadCount: totalUnreadCount == null && nullToAbsent - ? const Value.absent() - : Value(totalUnreadCount), - unreadChannels: unreadChannels == null && nullToAbsent - ? const Value.absent() - : Value(unreadChannels), - lastEventAt: lastEventAt == null && nullToAbsent - ? const Value.absent() - : Value(lastEventAt), - lastSyncAt: lastSyncAt == null && nullToAbsent - ? const Value.absent() - : Value(lastSyncAt), - ); - } - - factory _ConnectionEventData.fromJson(Map json, - {ValueSerializer serializer}) { - serializer ??= moorRuntimeOptions.defaultSerializer; - return _ConnectionEventData( - id: serializer.fromJson(json['id']), - 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 ??= moorRuntimeOptions.defaultSerializer; - return { - 'id': serializer.toJson(id), - 'ownUser': serializer.toJson>(ownUser), - 'totalUnreadCount': serializer.toJson(totalUnreadCount), - 'unreadChannels': serializer.toJson(unreadChannels), - 'lastEventAt': serializer.toJson(lastEventAt), - 'lastSyncAt': serializer.toJson(lastSyncAt), - }; - } - - _ConnectionEventData copyWith( - {int id, - Map ownUser, - int totalUnreadCount, - int unreadChannels, - DateTime lastEventAt, - DateTime lastSyncAt}) => - _ConnectionEventData( - id: id ?? this.id, - ownUser: ownUser ?? this.ownUser, - totalUnreadCount: totalUnreadCount ?? this.totalUnreadCount, - unreadChannels: unreadChannels ?? this.unreadChannels, - lastEventAt: lastEventAt ?? this.lastEventAt, - lastSyncAt: lastSyncAt ?? this.lastSyncAt, - ); - @override - String toString() { - return (StringBuffer('_ConnectionEventData(') - ..write('id: $id, ') - ..write('ownUser: $ownUser, ') - ..write('totalUnreadCount: $totalUnreadCount, ') - ..write('unreadChannels: $unreadChannels, ') - ..write('lastEventAt: $lastEventAt, ') - ..write('lastSyncAt: $lastSyncAt') - ..write(')')) - .toString(); - } - - @override - int get hashCode => $mrjf($mrjc( - id.hashCode, - $mrjc( - ownUser.hashCode, - $mrjc( - totalUnreadCount.hashCode, - $mrjc(unreadChannels.hashCode, - $mrjc(lastEventAt.hashCode, lastSyncAt.hashCode)))))); - @override - bool operator ==(dynamic other) => - identical(this, other) || - (other is _ConnectionEventData && - other.id == this.id && - other.ownUser == this.ownUser && - other.totalUnreadCount == this.totalUnreadCount && - other.unreadChannels == this.unreadChannels && - other.lastEventAt == this.lastEventAt && - other.lastSyncAt == this.lastSyncAt); -} - -class _ConnectionEventCompanion extends UpdateCompanion<_ConnectionEventData> { - final Value id; - final Value> ownUser; - final Value totalUnreadCount; - final Value unreadChannels; - final Value lastEventAt; - final Value lastSyncAt; - const _ConnectionEventCompanion({ - this.id = 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(), - }); - _ConnectionEventCompanion.insert({ - this.id = 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(), - }); - static Insertable<_ConnectionEventData> custom({ - Expression id, - Expression ownUser, - Expression totalUnreadCount, - Expression unreadChannels, - Expression lastEventAt, - Expression lastSyncAt, - }) { - return RawValuesInsertable({ - if (id != null) 'id': id, - 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, - }); - } - - _ConnectionEventCompanion copyWith( - {Value id, - Value> ownUser, - Value totalUnreadCount, - Value unreadChannels, - Value lastEventAt, - Value lastSyncAt}) { - return _ConnectionEventCompanion( - id: id ?? this.id, - ownUser: ownUser ?? this.ownUser, - totalUnreadCount: totalUnreadCount ?? this.totalUnreadCount, - unreadChannels: unreadChannels ?? this.unreadChannels, - lastEventAt: lastEventAt ?? this.lastEventAt, - lastSyncAt: lastSyncAt ?? this.lastSyncAt, - ); - } - - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - if (id.present) { - map['id'] = Variable(id.value); - } - if (ownUser.present) { - final converter = $_ConnectionEventTable.$converter0; - map['own_user'] = Variable(converter.mapToSql(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; - } - - @override - String toString() { - return (StringBuffer('_ConnectionEventCompanion(') - ..write('id: $id, ') - ..write('ownUser: $ownUser, ') - ..write('totalUnreadCount: $totalUnreadCount, ') - ..write('unreadChannels: $unreadChannels, ') - ..write('lastEventAt: $lastEventAt, ') - ..write('lastSyncAt: $lastSyncAt') - ..write(')')) - .toString(); - } -} - -class $_ConnectionEventTable extends _ConnectionEvent - with TableInfo<$_ConnectionEventTable, _ConnectionEventData> { - final GeneratedDatabase _db; - final String _alias; - $_ConnectionEventTable(this._db, [this._alias]); - final VerificationMeta _idMeta = const VerificationMeta('id'); - GeneratedIntColumn _id; - @override - GeneratedIntColumn get id => _id ??= _constructId(); - GeneratedIntColumn _constructId() { - return GeneratedIntColumn( - 'id', - $tableName, - false, - ); - } - - final VerificationMeta _ownUserMeta = const VerificationMeta('ownUser'); - GeneratedTextColumn _ownUser; - @override - GeneratedTextColumn get ownUser => _ownUser ??= _constructOwnUser(); - GeneratedTextColumn _constructOwnUser() { - return GeneratedTextColumn( - 'own_user', - $tableName, - true, - ); - } - - final VerificationMeta _totalUnreadCountMeta = - const VerificationMeta('totalUnreadCount'); - GeneratedIntColumn _totalUnreadCount; - @override - GeneratedIntColumn get totalUnreadCount => - _totalUnreadCount ??= _constructTotalUnreadCount(); - GeneratedIntColumn _constructTotalUnreadCount() { - return GeneratedIntColumn( - 'total_unread_count', - $tableName, - true, - ); - } - - final VerificationMeta _unreadChannelsMeta = - const VerificationMeta('unreadChannels'); - GeneratedIntColumn _unreadChannels; - @override - GeneratedIntColumn get unreadChannels => - _unreadChannels ??= _constructUnreadChannels(); - GeneratedIntColumn _constructUnreadChannels() { - return GeneratedIntColumn( - 'unread_channels', - $tableName, - true, - ); - } - - final VerificationMeta _lastEventAtMeta = - const VerificationMeta('lastEventAt'); - GeneratedDateTimeColumn _lastEventAt; - @override - GeneratedDateTimeColumn get lastEventAt => - _lastEventAt ??= _constructLastEventAt(); - GeneratedDateTimeColumn _constructLastEventAt() { - return GeneratedDateTimeColumn( - 'last_event_at', - $tableName, - true, - ); - } - - final VerificationMeta _lastSyncAtMeta = const VerificationMeta('lastSyncAt'); - GeneratedDateTimeColumn _lastSyncAt; - @override - GeneratedDateTimeColumn get lastSyncAt => - _lastSyncAt ??= _constructLastSyncAt(); - GeneratedDateTimeColumn _constructLastSyncAt() { - return GeneratedDateTimeColumn( - 'last_sync_at', - $tableName, - true, - ); - } - - @override - List get $columns => - [id, ownUser, totalUnreadCount, unreadChannels, lastEventAt, lastSyncAt]; - @override - $_ConnectionEventTable get asDslTable => this; - @override - String get $tableName => _alias ?? 'connection_event'; - @override - final String actualTableName = 'connection_event'; - @override - VerificationContext validateIntegrity( - Insertable<_ConnectionEventData> instance, - {bool isInserting = false}) { - final context = VerificationContext(); - final data = instance.toColumns(true); - if (data.containsKey('id')) { - context.handle(_idMeta, id.isAcceptableOrUnknown(data['id'], _idMeta)); - } - context.handle(_ownUserMeta, const VerificationResult.success()); - 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 => {id}; - @override - _ConnectionEventData map(Map data, {String tablePrefix}) { - final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : null; - return _ConnectionEventData.fromData(data, _db, prefix: effectivePrefix); - } - - @override - $_ConnectionEventTable createAlias(String alias) { - return $_ConnectionEventTable(_db, alias); - } - - static TypeConverter, String> $converter0 = - _ExtraDataConverter(); -} - -class _Channel extends DataClass implements Insertable<_Channel> { - final String id; - final String type; - final String cid; - final String config; - final bool frozen; - final DateTime lastMessageAt; - final DateTime createdAt; - final DateTime updatedAt; - final DateTime deletedAt; - final int memberCount; - final Map extraData; - final String createdBy; - _Channel( - {@required this.id, - @required this.type, - @required this.cid, - @required this.config, - @required this.frozen, - this.lastMessageAt, - this.createdAt, - this.updatedAt, - this.deletedAt, - this.memberCount, - this.extraData, - this.createdBy}); - factory _Channel.fromData(Map data, GeneratedDatabase db, - {String prefix}) { - final effectivePrefix = prefix ?? ''; - final stringType = db.typeSystem.forDartType(); - final boolType = db.typeSystem.forDartType(); - final dateTimeType = db.typeSystem.forDartType(); - final intType = db.typeSystem.forDartType(); - return _Channel( - id: stringType.mapFromDatabaseResponse(data['${effectivePrefix}id']), - type: stringType.mapFromDatabaseResponse(data['${effectivePrefix}type']), - cid: stringType.mapFromDatabaseResponse(data['${effectivePrefix}cid']), - config: - stringType.mapFromDatabaseResponse(data['${effectivePrefix}config']), - frozen: - boolType.mapFromDatabaseResponse(data['${effectivePrefix}frozen']), - lastMessageAt: dateTimeType - .mapFromDatabaseResponse(data['${effectivePrefix}last_message_at']), - createdAt: dateTimeType - .mapFromDatabaseResponse(data['${effectivePrefix}created_at']), - updatedAt: dateTimeType - .mapFromDatabaseResponse(data['${effectivePrefix}updated_at']), - deletedAt: dateTimeType - .mapFromDatabaseResponse(data['${effectivePrefix}deleted_at']), - memberCount: intType - .mapFromDatabaseResponse(data['${effectivePrefix}member_count']), - extraData: $_ChannelsTable.$converter0.mapToDart(stringType - .mapFromDatabaseResponse(data['${effectivePrefix}extra_data'])), - createdBy: stringType - .mapFromDatabaseResponse(data['${effectivePrefix}created_by']), - ); - } - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - if (!nullToAbsent || id != null) { - map['id'] = Variable(id); - } - if (!nullToAbsent || type != null) { - map['type'] = Variable(type); - } - if (!nullToAbsent || cid != null) { - map['cid'] = Variable(cid); - } - if (!nullToAbsent || config != null) { - map['config'] = Variable(config); - } - if (!nullToAbsent || frozen != null) { - map['frozen'] = Variable(frozen); - } - if (!nullToAbsent || lastMessageAt != null) { - map['last_message_at'] = Variable(lastMessageAt); - } - if (!nullToAbsent || createdAt != null) { - map['created_at'] = Variable(createdAt); - } - if (!nullToAbsent || updatedAt != null) { - map['updated_at'] = Variable(updatedAt); - } - if (!nullToAbsent || deletedAt != null) { - map['deleted_at'] = Variable(deletedAt); - } - if (!nullToAbsent || memberCount != null) { - map['member_count'] = Variable(memberCount); - } - if (!nullToAbsent || extraData != null) { - final converter = $_ChannelsTable.$converter0; - map['extra_data'] = Variable(converter.mapToSql(extraData)); - } - if (!nullToAbsent || createdBy != null) { - map['created_by'] = Variable(createdBy); - } - return map; - } - - _ChannelsCompanion toCompanion(bool nullToAbsent) { - return _ChannelsCompanion( - id: id == null && nullToAbsent ? const Value.absent() : Value(id), - type: type == null && nullToAbsent ? const Value.absent() : Value(type), - cid: cid == null && nullToAbsent ? const Value.absent() : Value(cid), - config: - config == null && nullToAbsent ? const Value.absent() : Value(config), - frozen: - frozen == null && nullToAbsent ? const Value.absent() : Value(frozen), - lastMessageAt: lastMessageAt == null && nullToAbsent - ? const Value.absent() - : Value(lastMessageAt), - createdAt: createdAt == null && nullToAbsent - ? const Value.absent() - : Value(createdAt), - updatedAt: updatedAt == null && nullToAbsent - ? const Value.absent() - : Value(updatedAt), - deletedAt: deletedAt == null && nullToAbsent - ? const Value.absent() - : Value(deletedAt), - memberCount: memberCount == null && nullToAbsent - ? const Value.absent() - : Value(memberCount), - extraData: extraData == null && nullToAbsent - ? const Value.absent() - : Value(extraData), - createdBy: createdBy == null && nullToAbsent - ? const Value.absent() - : Value(createdBy), - ); - } - - factory _Channel.fromJson(Map json, - {ValueSerializer serializer}) { - serializer ??= moorRuntimeOptions.defaultSerializer; - return _Channel( - id: serializer.fromJson(json['id']), - type: serializer.fromJson(json['type']), - cid: serializer.fromJson(json['cid']), - config: serializer.fromJson(json['config']), - frozen: serializer.fromJson(json['frozen']), - lastMessageAt: serializer.fromJson(json['lastMessageAt']), - createdAt: serializer.fromJson(json['createdAt']), - updatedAt: serializer.fromJson(json['updatedAt']), - deletedAt: serializer.fromJson(json['deletedAt']), - memberCount: serializer.fromJson(json['memberCount']), - extraData: serializer.fromJson>(json['extraData']), - createdBy: serializer.fromJson(json['createdBy']), - ); - } - @override - Map toJson({ValueSerializer serializer}) { - serializer ??= moorRuntimeOptions.defaultSerializer; - return { - 'id': serializer.toJson(id), - 'type': serializer.toJson(type), - 'cid': serializer.toJson(cid), - 'config': serializer.toJson(config), - 'frozen': serializer.toJson(frozen), - 'lastMessageAt': serializer.toJson(lastMessageAt), - 'createdAt': serializer.toJson(createdAt), - 'updatedAt': serializer.toJson(updatedAt), - 'deletedAt': serializer.toJson(deletedAt), - 'memberCount': serializer.toJson(memberCount), - 'extraData': serializer.toJson>(extraData), - 'createdBy': serializer.toJson(createdBy), - }; - } - - _Channel copyWith( - {String id, - String type, - String cid, - String config, - bool frozen, - DateTime lastMessageAt, - DateTime createdAt, - DateTime updatedAt, - DateTime deletedAt, - int memberCount, - Map extraData, - String createdBy}) => - _Channel( - id: id ?? this.id, - type: type ?? this.type, - cid: cid ?? this.cid, - config: config ?? this.config, - frozen: frozen ?? this.frozen, - lastMessageAt: lastMessageAt ?? this.lastMessageAt, - createdAt: createdAt ?? this.createdAt, - updatedAt: updatedAt ?? this.updatedAt, - deletedAt: deletedAt ?? this.deletedAt, - memberCount: memberCount ?? this.memberCount, - extraData: extraData ?? this.extraData, - createdBy: createdBy ?? this.createdBy, - ); - @override - String toString() { - return (StringBuffer('_Channel(') - ..write('id: $id, ') - ..write('type: $type, ') - ..write('cid: $cid, ') - ..write('config: $config, ') - ..write('frozen: $frozen, ') - ..write('lastMessageAt: $lastMessageAt, ') - ..write('createdAt: $createdAt, ') - ..write('updatedAt: $updatedAt, ') - ..write('deletedAt: $deletedAt, ') - ..write('memberCount: $memberCount, ') - ..write('extraData: $extraData, ') - ..write('createdBy: $createdBy') - ..write(')')) - .toString(); - } - - @override - int get hashCode => $mrjf($mrjc( - id.hashCode, - $mrjc( - type.hashCode, - $mrjc( - cid.hashCode, - $mrjc( - config.hashCode, - $mrjc( - frozen.hashCode, - $mrjc( - lastMessageAt.hashCode, - $mrjc( - createdAt.hashCode, - $mrjc( - updatedAt.hashCode, - $mrjc( - deletedAt.hashCode, - $mrjc( - memberCount.hashCode, - $mrjc(extraData.hashCode, - createdBy.hashCode)))))))))))); - @override - bool operator ==(dynamic other) => - identical(this, other) || - (other is _Channel && - other.id == this.id && - other.type == this.type && - other.cid == this.cid && - other.config == this.config && - other.frozen == this.frozen && - other.lastMessageAt == this.lastMessageAt && - other.createdAt == this.createdAt && - other.updatedAt == this.updatedAt && - other.deletedAt == this.deletedAt && - other.memberCount == this.memberCount && - other.extraData == this.extraData && - other.createdBy == this.createdBy); -} - -class _ChannelsCompanion extends UpdateCompanion<_Channel> { - final Value id; - final Value type; - final Value cid; - final Value config; - final Value frozen; - final Value lastMessageAt; - final Value createdAt; - final Value updatedAt; - final Value deletedAt; - final Value memberCount; - final Value> extraData; - final Value createdBy; - const _ChannelsCompanion({ - this.id = const Value.absent(), - this.type = const Value.absent(), - this.cid = const Value.absent(), - this.config = const Value.absent(), - this.frozen = const Value.absent(), - this.lastMessageAt = const Value.absent(), - this.createdAt = const Value.absent(), - this.updatedAt = const Value.absent(), - this.deletedAt = const Value.absent(), - this.memberCount = const Value.absent(), - this.extraData = const Value.absent(), - this.createdBy = const Value.absent(), - }); - _ChannelsCompanion.insert({ - @required String id, - @required String type, - @required String cid, - @required String config, - this.frozen = const Value.absent(), - this.lastMessageAt = const Value.absent(), - this.createdAt = const Value.absent(), - this.updatedAt = const Value.absent(), - this.deletedAt = const Value.absent(), - this.memberCount = const Value.absent(), - this.extraData = const Value.absent(), - this.createdBy = const Value.absent(), - }) : id = Value(id), - type = Value(type), - cid = Value(cid), - config = Value(config); - static Insertable<_Channel> custom({ - Expression id, - Expression type, - Expression cid, - Expression config, - Expression frozen, - Expression lastMessageAt, - Expression createdAt, - Expression updatedAt, - Expression deletedAt, - Expression memberCount, - Expression extraData, - Expression createdBy, - }) { - return RawValuesInsertable({ - if (id != null) 'id': id, - if (type != null) 'type': type, - if (cid != null) 'cid': cid, - if (config != null) 'config': config, - if (frozen != null) 'frozen': frozen, - if (lastMessageAt != null) 'last_message_at': lastMessageAt, - if (createdAt != null) 'created_at': createdAt, - if (updatedAt != null) 'updated_at': updatedAt, - if (deletedAt != null) 'deleted_at': deletedAt, - if (memberCount != null) 'member_count': memberCount, - if (extraData != null) 'extra_data': extraData, - if (createdBy != null) 'created_by': createdBy, - }); - } - - _ChannelsCompanion copyWith( - {Value id, - Value type, - Value cid, - Value config, - Value frozen, - Value lastMessageAt, - Value createdAt, - Value updatedAt, - Value deletedAt, - Value memberCount, - Value> extraData, - Value createdBy}) { - return _ChannelsCompanion( - id: id ?? this.id, - type: type ?? this.type, - cid: cid ?? this.cid, - config: config ?? this.config, - frozen: frozen ?? this.frozen, - lastMessageAt: lastMessageAt ?? this.lastMessageAt, - createdAt: createdAt ?? this.createdAt, - updatedAt: updatedAt ?? this.updatedAt, - deletedAt: deletedAt ?? this.deletedAt, - memberCount: memberCount ?? this.memberCount, - extraData: extraData ?? this.extraData, - createdBy: createdBy ?? this.createdBy, - ); - } - - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - if (id.present) { - map['id'] = Variable(id.value); - } - if (type.present) { - map['type'] = Variable(type.value); - } - if (cid.present) { - map['cid'] = Variable(cid.value); - } - if (config.present) { - map['config'] = Variable(config.value); - } - if (frozen.present) { - map['frozen'] = Variable(frozen.value); - } - if (lastMessageAt.present) { - map['last_message_at'] = Variable(lastMessageAt.value); - } - if (createdAt.present) { - map['created_at'] = Variable(createdAt.value); - } - if (updatedAt.present) { - map['updated_at'] = Variable(updatedAt.value); - } - if (deletedAt.present) { - map['deleted_at'] = Variable(deletedAt.value); - } - if (memberCount.present) { - map['member_count'] = Variable(memberCount.value); - } - if (extraData.present) { - final converter = $_ChannelsTable.$converter0; - map['extra_data'] = Variable(converter.mapToSql(extraData.value)); - } - if (createdBy.present) { - map['created_by'] = Variable(createdBy.value); - } - return map; - } - - @override - String toString() { - return (StringBuffer('_ChannelsCompanion(') - ..write('id: $id, ') - ..write('type: $type, ') - ..write('cid: $cid, ') - ..write('config: $config, ') - ..write('frozen: $frozen, ') - ..write('lastMessageAt: $lastMessageAt, ') - ..write('createdAt: $createdAt, ') - ..write('updatedAt: $updatedAt, ') - ..write('deletedAt: $deletedAt, ') - ..write('memberCount: $memberCount, ') - ..write('extraData: $extraData, ') - ..write('createdBy: $createdBy') - ..write(')')) - .toString(); - } -} - -class $_ChannelsTable extends _Channels - with TableInfo<$_ChannelsTable, _Channel> { - final GeneratedDatabase _db; - final String _alias; - $_ChannelsTable(this._db, [this._alias]); - final VerificationMeta _idMeta = const VerificationMeta('id'); - GeneratedTextColumn _id; - @override - GeneratedTextColumn get id => _id ??= _constructId(); - GeneratedTextColumn _constructId() { - return GeneratedTextColumn( - 'id', - $tableName, - false, - ); - } - - final VerificationMeta _typeMeta = const VerificationMeta('type'); - GeneratedTextColumn _type; - @override - GeneratedTextColumn get type => _type ??= _constructType(); - GeneratedTextColumn _constructType() { - return GeneratedTextColumn( - 'type', - $tableName, - false, - ); - } - - final VerificationMeta _cidMeta = const VerificationMeta('cid'); - GeneratedTextColumn _cid; - @override - GeneratedTextColumn get cid => _cid ??= _constructCid(); - GeneratedTextColumn _constructCid() { - return GeneratedTextColumn( - 'cid', - $tableName, - false, - ); - } - - final VerificationMeta _configMeta = const VerificationMeta('config'); - GeneratedTextColumn _config; - @override - GeneratedTextColumn get config => _config ??= _constructConfig(); - GeneratedTextColumn _constructConfig() { - return GeneratedTextColumn( - 'config', - $tableName, - false, - ); - } - - final VerificationMeta _frozenMeta = const VerificationMeta('frozen'); - GeneratedBoolColumn _frozen; - @override - GeneratedBoolColumn get frozen => _frozen ??= _constructFrozen(); - GeneratedBoolColumn _constructFrozen() { - return GeneratedBoolColumn('frozen', $tableName, false, - defaultValue: Constant(false)); - } - - final VerificationMeta _lastMessageAtMeta = - const VerificationMeta('lastMessageAt'); - GeneratedDateTimeColumn _lastMessageAt; - @override - GeneratedDateTimeColumn get lastMessageAt => - _lastMessageAt ??= _constructLastMessageAt(); - GeneratedDateTimeColumn _constructLastMessageAt() { - return GeneratedDateTimeColumn( - 'last_message_at', - $tableName, - true, - ); - } - - final VerificationMeta _createdAtMeta = const VerificationMeta('createdAt'); - GeneratedDateTimeColumn _createdAt; - @override - GeneratedDateTimeColumn get createdAt => _createdAt ??= _constructCreatedAt(); - GeneratedDateTimeColumn _constructCreatedAt() { - return GeneratedDateTimeColumn( - 'created_at', - $tableName, - true, - ); - } - - final VerificationMeta _updatedAtMeta = const VerificationMeta('updatedAt'); - GeneratedDateTimeColumn _updatedAt; - @override - GeneratedDateTimeColumn get updatedAt => _updatedAt ??= _constructUpdatedAt(); - GeneratedDateTimeColumn _constructUpdatedAt() { - return GeneratedDateTimeColumn( - 'updated_at', - $tableName, - true, - ); - } - - final VerificationMeta _deletedAtMeta = const VerificationMeta('deletedAt'); - GeneratedDateTimeColumn _deletedAt; - @override - GeneratedDateTimeColumn get deletedAt => _deletedAt ??= _constructDeletedAt(); - GeneratedDateTimeColumn _constructDeletedAt() { - return GeneratedDateTimeColumn( - 'deleted_at', - $tableName, - true, - ); - } - - final VerificationMeta _memberCountMeta = - const VerificationMeta('memberCount'); - GeneratedIntColumn _memberCount; - @override - GeneratedIntColumn get memberCount => - _memberCount ??= _constructMemberCount(); - GeneratedIntColumn _constructMemberCount() { - return GeneratedIntColumn( - 'member_count', - $tableName, - true, - ); - } - - final VerificationMeta _extraDataMeta = const VerificationMeta('extraData'); - GeneratedTextColumn _extraData; - @override - GeneratedTextColumn get extraData => _extraData ??= _constructExtraData(); - GeneratedTextColumn _constructExtraData() { - return GeneratedTextColumn( - 'extra_data', - $tableName, - true, - ); - } - - final VerificationMeta _createdByMeta = const VerificationMeta('createdBy'); - GeneratedTextColumn _createdBy; - @override - GeneratedTextColumn get createdBy => _createdBy ??= _constructCreatedBy(); - GeneratedTextColumn _constructCreatedBy() { - return GeneratedTextColumn( - 'created_by', - $tableName, - true, - ); - } - - @override - List get $columns => [ - id, - type, - cid, - config, - frozen, - lastMessageAt, - createdAt, - updatedAt, - deletedAt, - memberCount, - extraData, - createdBy - ]; - @override - $_ChannelsTable get asDslTable => this; - @override - String get $tableName => _alias ?? 'channels'; - @override - final String actualTableName = 'channels'; - @override - VerificationContext validateIntegrity(Insertable<_Channel> 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('type')) { - context.handle( - _typeMeta, type.isAcceptableOrUnknown(data['type'], _typeMeta)); - } else if (isInserting) { - context.missing(_typeMeta); - } - if (data.containsKey('cid')) { - context.handle( - _cidMeta, cid.isAcceptableOrUnknown(data['cid'], _cidMeta)); - } else if (isInserting) { - context.missing(_cidMeta); - } - if (data.containsKey('config')) { - context.handle(_configMeta, - config.isAcceptableOrUnknown(data['config'], _configMeta)); - } else if (isInserting) { - context.missing(_configMeta); - } - if (data.containsKey('frozen')) { - context.handle(_frozenMeta, - frozen.isAcceptableOrUnknown(data['frozen'], _frozenMeta)); - } - if (data.containsKey('last_message_at')) { - context.handle( - _lastMessageAtMeta, - lastMessageAt.isAcceptableOrUnknown( - data['last_message_at'], _lastMessageAtMeta)); - } - 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)); - } - if (data.containsKey('deleted_at')) { - context.handle(_deletedAtMeta, - deletedAt.isAcceptableOrUnknown(data['deleted_at'], _deletedAtMeta)); - } - if (data.containsKey('member_count')) { - context.handle( - _memberCountMeta, - memberCount.isAcceptableOrUnknown( - data['member_count'], _memberCountMeta)); - } - context.handle(_extraDataMeta, const VerificationResult.success()); - if (data.containsKey('created_by')) { - context.handle(_createdByMeta, - createdBy.isAcceptableOrUnknown(data['created_by'], _createdByMeta)); - } - return context; - } - - @override - Set get $primaryKey => {cid}; - @override - _Channel map(Map data, {String tablePrefix}) { - final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : null; - return _Channel.fromData(data, _db, prefix: effectivePrefix); - } - - @override - $_ChannelsTable createAlias(String alias) { - return $_ChannelsTable(_db, alias); - } - - static TypeConverter, String> $converter0 = - _ExtraDataConverter(); -} - -class _User extends DataClass implements Insertable<_User> { - final String id; - final String role; - final DateTime createdAt; - final DateTime updatedAt; - final DateTime lastActive; - final bool online; - final bool banned; - final Map extraData; - _User( - {@required this.id, - this.role, - this.createdAt, - this.updatedAt, - this.lastActive, - this.online, - this.banned, - this.extraData}); - factory _User.fromData(Map data, GeneratedDatabase db, - {String prefix}) { - final effectivePrefix = prefix ?? ''; - final stringType = db.typeSystem.forDartType(); - final dateTimeType = db.typeSystem.forDartType(); - final boolType = db.typeSystem.forDartType(); - return _User( - id: stringType.mapFromDatabaseResponse(data['${effectivePrefix}id']), - role: stringType.mapFromDatabaseResponse(data['${effectivePrefix}role']), - createdAt: dateTimeType - .mapFromDatabaseResponse(data['${effectivePrefix}created_at']), - updatedAt: dateTimeType - .mapFromDatabaseResponse(data['${effectivePrefix}updated_at']), - lastActive: dateTimeType - .mapFromDatabaseResponse(data['${effectivePrefix}last_active']), - online: - boolType.mapFromDatabaseResponse(data['${effectivePrefix}online']), - banned: - boolType.mapFromDatabaseResponse(data['${effectivePrefix}banned']), - extraData: $_UsersTable.$converter0.mapToDart(stringType - .mapFromDatabaseResponse(data['${effectivePrefix}extra_data'])), - ); - } - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - if (!nullToAbsent || id != null) { - map['id'] = Variable(id); - } - if (!nullToAbsent || role != null) { - map['role'] = Variable(role); - } - if (!nullToAbsent || createdAt != null) { - map['created_at'] = Variable(createdAt); - } - if (!nullToAbsent || updatedAt != null) { - map['updated_at'] = Variable(updatedAt); - } - if (!nullToAbsent || lastActive != null) { - map['last_active'] = Variable(lastActive); - } - if (!nullToAbsent || online != null) { - map['online'] = Variable(online); - } - if (!nullToAbsent || banned != null) { - map['banned'] = Variable(banned); - } - if (!nullToAbsent || extraData != null) { - final converter = $_UsersTable.$converter0; - map['extra_data'] = Variable(converter.mapToSql(extraData)); - } - return map; - } - - _UsersCompanion toCompanion(bool nullToAbsent) { - return _UsersCompanion( - id: id == null && nullToAbsent ? const Value.absent() : Value(id), - role: role == null && nullToAbsent ? const Value.absent() : Value(role), - createdAt: createdAt == null && nullToAbsent - ? const Value.absent() - : Value(createdAt), - updatedAt: updatedAt == null && nullToAbsent - ? const Value.absent() - : Value(updatedAt), - lastActive: lastActive == null && nullToAbsent - ? const Value.absent() - : Value(lastActive), - online: - online == null && nullToAbsent ? const Value.absent() : Value(online), - banned: - banned == null && nullToAbsent ? const Value.absent() : Value(banned), - extraData: extraData == null && nullToAbsent - ? const Value.absent() - : Value(extraData), - ); - } - - factory _User.fromJson(Map json, - {ValueSerializer serializer}) { - serializer ??= moorRuntimeOptions.defaultSerializer; - return _User( - id: serializer.fromJson(json['id']), - role: serializer.fromJson(json['role']), - createdAt: serializer.fromJson(json['createdAt']), - updatedAt: serializer.fromJson(json['updatedAt']), - lastActive: serializer.fromJson(json['lastActive']), - online: serializer.fromJson(json['online']), - banned: serializer.fromJson(json['banned']), - extraData: serializer.fromJson>(json['extraData']), - ); - } - @override - Map toJson({ValueSerializer serializer}) { - serializer ??= moorRuntimeOptions.defaultSerializer; - return { - 'id': serializer.toJson(id), - 'role': serializer.toJson(role), - 'createdAt': serializer.toJson(createdAt), - 'updatedAt': serializer.toJson(updatedAt), - 'lastActive': serializer.toJson(lastActive), - 'online': serializer.toJson(online), - 'banned': serializer.toJson(banned), - 'extraData': serializer.toJson>(extraData), - }; - } - - _User copyWith( - {String id, - String role, - DateTime createdAt, - DateTime updatedAt, - DateTime lastActive, - bool online, - bool banned, - Map extraData}) => - _User( - id: id ?? this.id, - role: role ?? this.role, - createdAt: createdAt ?? this.createdAt, - updatedAt: updatedAt ?? this.updatedAt, - lastActive: lastActive ?? this.lastActive, - online: online ?? this.online, - banned: banned ?? this.banned, - extraData: extraData ?? this.extraData, - ); - @override - String toString() { - return (StringBuffer('_User(') - ..write('id: $id, ') - ..write('role: $role, ') - ..write('createdAt: $createdAt, ') - ..write('updatedAt: $updatedAt, ') - ..write('lastActive: $lastActive, ') - ..write('online: $online, ') - ..write('banned: $banned, ') - ..write('extraData: $extraData') - ..write(')')) - .toString(); - } - - @override - int get hashCode => $mrjf($mrjc( - id.hashCode, - $mrjc( - role.hashCode, - $mrjc( - createdAt.hashCode, - $mrjc( - updatedAt.hashCode, - $mrjc( - lastActive.hashCode, - $mrjc(online.hashCode, - $mrjc(banned.hashCode, extraData.hashCode)))))))); - @override - bool operator ==(dynamic other) => - identical(this, other) || - (other is _User && - other.id == this.id && - other.role == this.role && - other.createdAt == this.createdAt && - other.updatedAt == this.updatedAt && - other.lastActive == this.lastActive && - other.online == this.online && - other.banned == this.banned && - other.extraData == this.extraData); -} - -class _UsersCompanion extends UpdateCompanion<_User> { - final Value id; - final Value role; - final Value createdAt; - final Value updatedAt; - final Value lastActive; - final Value online; - final Value banned; - final Value> extraData; - const _UsersCompanion({ - this.id = const Value.absent(), - this.role = const Value.absent(), - this.createdAt = const Value.absent(), - this.updatedAt = const Value.absent(), - this.lastActive = const Value.absent(), - this.online = const Value.absent(), - this.banned = const Value.absent(), - this.extraData = const Value.absent(), - }); - _UsersCompanion.insert({ - @required String id, - this.role = const Value.absent(), - this.createdAt = const Value.absent(), - this.updatedAt = const Value.absent(), - this.lastActive = const Value.absent(), - this.online = const Value.absent(), - this.banned = const Value.absent(), - this.extraData = const Value.absent(), - }) : id = Value(id); - static Insertable<_User> custom({ - Expression id, - Expression role, - Expression createdAt, - Expression updatedAt, - Expression lastActive, - Expression online, - Expression banned, - Expression extraData, - }) { - return RawValuesInsertable({ - if (id != null) 'id': id, - if (role != null) 'role': role, - if (createdAt != null) 'created_at': createdAt, - if (updatedAt != null) 'updated_at': updatedAt, - if (lastActive != null) 'last_active': lastActive, - if (online != null) 'online': online, - if (banned != null) 'banned': banned, - if (extraData != null) 'extra_data': extraData, - }); - } - - _UsersCompanion copyWith( - {Value id, - Value role, - Value createdAt, - Value updatedAt, - Value lastActive, - Value online, - Value banned, - Value> extraData}) { - return _UsersCompanion( - id: id ?? this.id, - role: role ?? this.role, - createdAt: createdAt ?? this.createdAt, - updatedAt: updatedAt ?? this.updatedAt, - lastActive: lastActive ?? this.lastActive, - online: online ?? this.online, - banned: banned ?? this.banned, - extraData: extraData ?? this.extraData, - ); - } - - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - if (id.present) { - map['id'] = Variable(id.value); - } - if (role.present) { - map['role'] = Variable(role.value); - } - if (createdAt.present) { - map['created_at'] = Variable(createdAt.value); - } - if (updatedAt.present) { - map['updated_at'] = Variable(updatedAt.value); - } - if (lastActive.present) { - map['last_active'] = Variable(lastActive.value); - } - if (online.present) { - map['online'] = Variable(online.value); - } - if (banned.present) { - map['banned'] = Variable(banned.value); - } - if (extraData.present) { - final converter = $_UsersTable.$converter0; - map['extra_data'] = Variable(converter.mapToSql(extraData.value)); - } - return map; - } - - @override - String toString() { - return (StringBuffer('_UsersCompanion(') - ..write('id: $id, ') - ..write('role: $role, ') - ..write('createdAt: $createdAt, ') - ..write('updatedAt: $updatedAt, ') - ..write('lastActive: $lastActive, ') - ..write('online: $online, ') - ..write('banned: $banned, ') - ..write('extraData: $extraData') - ..write(')')) - .toString(); - } -} - -class $_UsersTable extends _Users with TableInfo<$_UsersTable, _User> { - final GeneratedDatabase _db; - final String _alias; - $_UsersTable(this._db, [this._alias]); - final VerificationMeta _idMeta = const VerificationMeta('id'); - GeneratedTextColumn _id; - @override - GeneratedTextColumn get id => _id ??= _constructId(); - GeneratedTextColumn _constructId() { - return GeneratedTextColumn( - 'id', - $tableName, - false, - ); - } - - final VerificationMeta _roleMeta = const VerificationMeta('role'); - GeneratedTextColumn _role; - @override - GeneratedTextColumn get role => _role ??= _constructRole(); - GeneratedTextColumn _constructRole() { - return GeneratedTextColumn( - 'role', - $tableName, - true, - ); - } - - final VerificationMeta _createdAtMeta = const VerificationMeta('createdAt'); - GeneratedDateTimeColumn _createdAt; - @override - GeneratedDateTimeColumn get createdAt => _createdAt ??= _constructCreatedAt(); - GeneratedDateTimeColumn _constructCreatedAt() { - return GeneratedDateTimeColumn( - 'created_at', - $tableName, - true, - ); - } - - final VerificationMeta _updatedAtMeta = const VerificationMeta('updatedAt'); - GeneratedDateTimeColumn _updatedAt; - @override - GeneratedDateTimeColumn get updatedAt => _updatedAt ??= _constructUpdatedAt(); - GeneratedDateTimeColumn _constructUpdatedAt() { - return GeneratedDateTimeColumn( - 'updated_at', - $tableName, - true, - ); - } - - final VerificationMeta _lastActiveMeta = const VerificationMeta('lastActive'); - GeneratedDateTimeColumn _lastActive; - @override - GeneratedDateTimeColumn get lastActive => - _lastActive ??= _constructLastActive(); - GeneratedDateTimeColumn _constructLastActive() { - return GeneratedDateTimeColumn( - 'last_active', - $tableName, - true, - ); - } - - final VerificationMeta _onlineMeta = const VerificationMeta('online'); - GeneratedBoolColumn _online; - @override - GeneratedBoolColumn get online => _online ??= _constructOnline(); - GeneratedBoolColumn _constructOnline() { - return GeneratedBoolColumn( - 'online', - $tableName, - true, - ); - } - - final VerificationMeta _bannedMeta = const VerificationMeta('banned'); - GeneratedBoolColumn _banned; - @override - GeneratedBoolColumn get banned => _banned ??= _constructBanned(); - GeneratedBoolColumn _constructBanned() { - return GeneratedBoolColumn( - 'banned', - $tableName, - true, - ); - } - - final VerificationMeta _extraDataMeta = const VerificationMeta('extraData'); - GeneratedTextColumn _extraData; - @override - GeneratedTextColumn get extraData => _extraData ??= _constructExtraData(); - GeneratedTextColumn _constructExtraData() { - return GeneratedTextColumn( - 'extra_data', - $tableName, - true, - ); - } - - @override - List get $columns => - [id, role, createdAt, updatedAt, lastActive, online, banned, extraData]; - @override - $_UsersTable get asDslTable => this; - @override - String get $tableName => _alias ?? 'users'; - @override - final String actualTableName = 'users'; - @override - VerificationContext validateIntegrity(Insertable<_User> 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('role')) { - context.handle( - _roleMeta, role.isAcceptableOrUnknown(data['role'], _roleMeta)); - } - 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)); - } - if (data.containsKey('last_active')) { - context.handle( - _lastActiveMeta, - lastActive.isAcceptableOrUnknown( - data['last_active'], _lastActiveMeta)); - } - if (data.containsKey('online')) { - context.handle(_onlineMeta, - online.isAcceptableOrUnknown(data['online'], _onlineMeta)); - } - if (data.containsKey('banned')) { - context.handle(_bannedMeta, - banned.isAcceptableOrUnknown(data['banned'], _bannedMeta)); - } - context.handle(_extraDataMeta, const VerificationResult.success()); - return context; - } - - @override - Set get $primaryKey => {id}; - @override - _User map(Map data, {String tablePrefix}) { - final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : null; - return _User.fromData(data, _db, prefix: effectivePrefix); - } - - @override - $_UsersTable createAlias(String alias) { - return $_UsersTable(_db, alias); - } - - static TypeConverter, String> $converter0 = - _ExtraDataConverter(); -} - -class _Message extends DataClass implements Insertable<_Message> { - final String id; - final String messageText; - final String attachmentJson; - final MessageSendingStatus status; - final String type; - final Map reactionCounts; - final Map reactionScores; - final String parentId; - final String quotedMessageId; - final int replyCount; - final bool showInChannel; - final bool shadowed; - final String command; - final DateTime createdAt; - final DateTime updatedAt; - final DateTime deletedAt; - final String userId; - final String channelCid; - final Map extraData; - _Message( - {@required this.id, - this.messageText, - this.attachmentJson, - this.status, - this.type, - this.reactionCounts, - this.reactionScores, - this.parentId, - this.quotedMessageId, - this.replyCount, - this.showInChannel, - this.shadowed, - this.command, - @required this.createdAt, - this.updatedAt, - this.deletedAt, - this.userId, - this.channelCid, - this.extraData}); - factory _Message.fromData(Map data, GeneratedDatabase db, - {String prefix}) { - final effectivePrefix = prefix ?? ''; - final stringType = db.typeSystem.forDartType(); - final intType = db.typeSystem.forDartType(); - final boolType = db.typeSystem.forDartType(); - final dateTimeType = db.typeSystem.forDartType(); - return _Message( - id: stringType.mapFromDatabaseResponse(data['${effectivePrefix}id']), - messageText: stringType - .mapFromDatabaseResponse(data['${effectivePrefix}message_text']), - attachmentJson: stringType - .mapFromDatabaseResponse(data['${effectivePrefix}attachment_json']), - status: $_MessagesTable.$converter0.mapToDart( - intType.mapFromDatabaseResponse(data['${effectivePrefix}status'])), - type: stringType.mapFromDatabaseResponse(data['${effectivePrefix}type']), - reactionCounts: $_MessagesTable.$converter1.mapToDart(stringType - .mapFromDatabaseResponse(data['${effectivePrefix}reaction_counts'])), - reactionScores: $_MessagesTable.$converter2.mapToDart(stringType - .mapFromDatabaseResponse(data['${effectivePrefix}reaction_scores'])), - parentId: stringType - .mapFromDatabaseResponse(data['${effectivePrefix}parent_id']), - quotedMessageId: stringType - .mapFromDatabaseResponse(data['${effectivePrefix}quoted_message_id']), - replyCount: intType - .mapFromDatabaseResponse(data['${effectivePrefix}reply_count']), - showInChannel: boolType - .mapFromDatabaseResponse(data['${effectivePrefix}show_in_channel']), - shadowed: - boolType.mapFromDatabaseResponse(data['${effectivePrefix}shadowed']), - command: - stringType.mapFromDatabaseResponse(data['${effectivePrefix}command']), - createdAt: dateTimeType - .mapFromDatabaseResponse(data['${effectivePrefix}created_at']), - updatedAt: dateTimeType - .mapFromDatabaseResponse(data['${effectivePrefix}updated_at']), - deletedAt: dateTimeType - .mapFromDatabaseResponse(data['${effectivePrefix}deleted_at']), - userId: - stringType.mapFromDatabaseResponse(data['${effectivePrefix}user_id']), - channelCid: stringType - .mapFromDatabaseResponse(data['${effectivePrefix}channel_cid']), - extraData: $_MessagesTable.$converter3.mapToDart(stringType - .mapFromDatabaseResponse(data['${effectivePrefix}extra_data'])), - ); - } - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - if (!nullToAbsent || id != null) { - map['id'] = Variable(id); - } - if (!nullToAbsent || messageText != null) { - map['message_text'] = Variable(messageText); - } - if (!nullToAbsent || attachmentJson != null) { - map['attachment_json'] = Variable(attachmentJson); - } - if (!nullToAbsent || status != null) { - final converter = $_MessagesTable.$converter0; - map['status'] = Variable(converter.mapToSql(status)); - } - if (!nullToAbsent || type != null) { - map['type'] = Variable(type); - } - if (!nullToAbsent || reactionCounts != null) { - final converter = $_MessagesTable.$converter1; - map['reaction_counts'] = - Variable(converter.mapToSql(reactionCounts)); - } - if (!nullToAbsent || reactionScores != null) { - final converter = $_MessagesTable.$converter2; - map['reaction_scores'] = - Variable(converter.mapToSql(reactionScores)); - } - if (!nullToAbsent || parentId != null) { - map['parent_id'] = Variable(parentId); - } - if (!nullToAbsent || quotedMessageId != null) { - map['quoted_message_id'] = Variable(quotedMessageId); - } - if (!nullToAbsent || replyCount != null) { - map['reply_count'] = Variable(replyCount); - } - if (!nullToAbsent || showInChannel != null) { - map['show_in_channel'] = Variable(showInChannel); - } - if (!nullToAbsent || shadowed != null) { - map['shadowed'] = Variable(shadowed); - } - if (!nullToAbsent || command != null) { - map['command'] = Variable(command); - } - if (!nullToAbsent || createdAt != null) { - map['created_at'] = Variable(createdAt); - } - if (!nullToAbsent || updatedAt != null) { - map['updated_at'] = Variable(updatedAt); - } - if (!nullToAbsent || deletedAt != null) { - map['deleted_at'] = Variable(deletedAt); - } - if (!nullToAbsent || userId != null) { - map['user_id'] = Variable(userId); - } - if (!nullToAbsent || channelCid != null) { - map['channel_cid'] = Variable(channelCid); - } - if (!nullToAbsent || extraData != null) { - final converter = $_MessagesTable.$converter3; - map['extra_data'] = Variable(converter.mapToSql(extraData)); - } - return map; - } - - _MessagesCompanion toCompanion(bool nullToAbsent) { - return _MessagesCompanion( - id: id == null && nullToAbsent ? const Value.absent() : Value(id), - messageText: messageText == null && nullToAbsent - ? const Value.absent() - : Value(messageText), - attachmentJson: attachmentJson == null && nullToAbsent - ? const Value.absent() - : Value(attachmentJson), - status: - status == null && nullToAbsent ? const Value.absent() : Value(status), - type: type == null && nullToAbsent ? const Value.absent() : Value(type), - reactionCounts: reactionCounts == null && nullToAbsent - ? const Value.absent() - : Value(reactionCounts), - reactionScores: reactionScores == null && nullToAbsent - ? const Value.absent() - : Value(reactionScores), - parentId: parentId == null && nullToAbsent - ? const Value.absent() - : Value(parentId), - quotedMessageId: quotedMessageId == null && nullToAbsent - ? const Value.absent() - : Value(quotedMessageId), - replyCount: replyCount == null && nullToAbsent - ? const Value.absent() - : Value(replyCount), - showInChannel: showInChannel == null && nullToAbsent - ? const Value.absent() - : Value(showInChannel), - shadowed: shadowed == null && nullToAbsent - ? const Value.absent() - : Value(shadowed), - command: command == null && nullToAbsent - ? const Value.absent() - : Value(command), - createdAt: createdAt == null && nullToAbsent - ? const Value.absent() - : Value(createdAt), - updatedAt: updatedAt == null && nullToAbsent - ? const Value.absent() - : Value(updatedAt), - deletedAt: deletedAt == null && nullToAbsent - ? const Value.absent() - : Value(deletedAt), - userId: - userId == null && nullToAbsent ? const Value.absent() : Value(userId), - channelCid: channelCid == null && nullToAbsent - ? const Value.absent() - : Value(channelCid), - extraData: extraData == null && nullToAbsent - ? const Value.absent() - : Value(extraData), - ); - } - - factory _Message.fromJson(Map json, - {ValueSerializer serializer}) { - serializer ??= moorRuntimeOptions.defaultSerializer; - return _Message( - id: serializer.fromJson(json['id']), - messageText: serializer.fromJson(json['messageText']), - attachmentJson: serializer.fromJson(json['attachmentJson']), - status: serializer.fromJson(json['status']), - type: serializer.fromJson(json['type']), - reactionCounts: - serializer.fromJson>(json['reactionCounts']), - reactionScores: - serializer.fromJson>(json['reactionScores']), - parentId: serializer.fromJson(json['parentId']), - quotedMessageId: serializer.fromJson(json['quotedMessageId']), - replyCount: serializer.fromJson(json['replyCount']), - showInChannel: serializer.fromJson(json['showInChannel']), - shadowed: serializer.fromJson(json['shadowed']), - command: serializer.fromJson(json['command']), - createdAt: serializer.fromJson(json['createdAt']), - updatedAt: serializer.fromJson(json['updatedAt']), - deletedAt: serializer.fromJson(json['deletedAt']), - userId: serializer.fromJson(json['userId']), - channelCid: serializer.fromJson(json['channelCid']), - extraData: serializer.fromJson>(json['extraData']), - ); - } - @override - Map toJson({ValueSerializer serializer}) { - serializer ??= moorRuntimeOptions.defaultSerializer; - return { - 'id': serializer.toJson(id), - 'messageText': serializer.toJson(messageText), - 'attachmentJson': serializer.toJson(attachmentJson), - 'status': serializer.toJson(status), - 'type': serializer.toJson(type), - 'reactionCounts': serializer.toJson>(reactionCounts), - 'reactionScores': serializer.toJson>(reactionScores), - 'parentId': serializer.toJson(parentId), - 'quotedMessageId': serializer.toJson(quotedMessageId), - 'replyCount': serializer.toJson(replyCount), - 'showInChannel': serializer.toJson(showInChannel), - 'shadowed': serializer.toJson(shadowed), - 'command': serializer.toJson(command), - 'createdAt': serializer.toJson(createdAt), - 'updatedAt': serializer.toJson(updatedAt), - 'deletedAt': serializer.toJson(deletedAt), - 'userId': serializer.toJson(userId), - 'channelCid': serializer.toJson(channelCid), - 'extraData': serializer.toJson>(extraData), - }; - } - - _Message copyWith( - {String id, - String messageText, - String attachmentJson, - MessageSendingStatus status, - String type, - Map reactionCounts, - Map reactionScores, - String parentId, - String quotedMessageId, - int replyCount, - bool showInChannel, - bool shadowed, - String command, - DateTime createdAt, - DateTime updatedAt, - DateTime deletedAt, - String userId, - String channelCid, - Map extraData}) => - _Message( - id: id ?? this.id, - messageText: messageText ?? this.messageText, - attachmentJson: attachmentJson ?? this.attachmentJson, - status: status ?? this.status, - type: type ?? this.type, - reactionCounts: reactionCounts ?? this.reactionCounts, - reactionScores: reactionScores ?? this.reactionScores, - parentId: parentId ?? this.parentId, - quotedMessageId: quotedMessageId ?? this.quotedMessageId, - replyCount: replyCount ?? this.replyCount, - showInChannel: showInChannel ?? this.showInChannel, - shadowed: shadowed ?? this.shadowed, - command: command ?? this.command, - createdAt: createdAt ?? this.createdAt, - updatedAt: updatedAt ?? this.updatedAt, - deletedAt: deletedAt ?? this.deletedAt, - userId: userId ?? this.userId, - channelCid: channelCid ?? this.channelCid, - extraData: extraData ?? this.extraData, - ); - @override - String toString() { - return (StringBuffer('_Message(') - ..write('id: $id, ') - ..write('messageText: $messageText, ') - ..write('attachmentJson: $attachmentJson, ') - ..write('status: $status, ') - ..write('type: $type, ') - ..write('reactionCounts: $reactionCounts, ') - ..write('reactionScores: $reactionScores, ') - ..write('parentId: $parentId, ') - ..write('quotedMessageId: $quotedMessageId, ') - ..write('replyCount: $replyCount, ') - ..write('showInChannel: $showInChannel, ') - ..write('shadowed: $shadowed, ') - ..write('command: $command, ') - ..write('createdAt: $createdAt, ') - ..write('updatedAt: $updatedAt, ') - ..write('deletedAt: $deletedAt, ') - ..write('userId: $userId, ') - ..write('channelCid: $channelCid, ') - ..write('extraData: $extraData') - ..write(')')) - .toString(); - } - - @override - int get hashCode => $mrjf($mrjc( - id.hashCode, - $mrjc( - messageText.hashCode, - $mrjc( - attachmentJson.hashCode, - $mrjc( - status.hashCode, - $mrjc( - type.hashCode, - $mrjc( - reactionCounts.hashCode, - $mrjc( - reactionScores.hashCode, - $mrjc( - parentId.hashCode, - $mrjc( - quotedMessageId.hashCode, - $mrjc( - replyCount.hashCode, - $mrjc( - showInChannel.hashCode, - $mrjc( - shadowed.hashCode, - $mrjc( - command.hashCode, - $mrjc( - createdAt.hashCode, - $mrjc( - updatedAt - .hashCode, - $mrjc( - deletedAt - .hashCode, - $mrjc( - userId - .hashCode, - $mrjc( - channelCid - .hashCode, - extraData - .hashCode))))))))))))))))))); - @override - bool operator ==(dynamic other) => - identical(this, other) || - (other is _Message && - other.id == this.id && - other.messageText == this.messageText && - other.attachmentJson == this.attachmentJson && - other.status == this.status && - other.type == this.type && - other.reactionCounts == this.reactionCounts && - other.reactionScores == this.reactionScores && - other.parentId == this.parentId && - other.quotedMessageId == this.quotedMessageId && - other.replyCount == this.replyCount && - other.showInChannel == this.showInChannel && - other.shadowed == this.shadowed && - other.command == this.command && - other.createdAt == this.createdAt && - other.updatedAt == this.updatedAt && - other.deletedAt == this.deletedAt && - other.userId == this.userId && - other.channelCid == this.channelCid && - other.extraData == this.extraData); -} - -class _MessagesCompanion extends UpdateCompanion<_Message> { - final Value id; - final Value messageText; - final Value attachmentJson; - final Value status; - final Value type; - final Value> reactionCounts; - final Value> reactionScores; - final Value parentId; - final Value quotedMessageId; - final Value replyCount; - final Value showInChannel; - final Value shadowed; - final Value command; - final Value createdAt; - final Value updatedAt; - final Value deletedAt; - final Value userId; - final Value channelCid; - final Value> extraData; - const _MessagesCompanion({ - this.id = const Value.absent(), - this.messageText = const Value.absent(), - this.attachmentJson = const Value.absent(), - this.status = const Value.absent(), - this.type = const Value.absent(), - this.reactionCounts = const Value.absent(), - this.reactionScores = const Value.absent(), - this.parentId = const Value.absent(), - this.quotedMessageId = const Value.absent(), - this.replyCount = const Value.absent(), - this.showInChannel = const Value.absent(), - this.shadowed = const Value.absent(), - this.command = const Value.absent(), - this.createdAt = const Value.absent(), - this.updatedAt = const Value.absent(), - this.deletedAt = const Value.absent(), - this.userId = const Value.absent(), - this.channelCid = const Value.absent(), - this.extraData = const Value.absent(), - }); - _MessagesCompanion.insert({ - @required String id, - this.messageText = const Value.absent(), - this.attachmentJson = const Value.absent(), - this.status = const Value.absent(), - this.type = const Value.absent(), - this.reactionCounts = const Value.absent(), - this.reactionScores = const Value.absent(), - this.parentId = const Value.absent(), - this.quotedMessageId = const Value.absent(), - this.replyCount = const Value.absent(), - this.showInChannel = const Value.absent(), - this.shadowed = const Value.absent(), - this.command = const Value.absent(), - @required DateTime createdAt, - this.updatedAt = const Value.absent(), - this.deletedAt = const Value.absent(), - this.userId = const Value.absent(), - this.channelCid = const Value.absent(), - this.extraData = const Value.absent(), - }) : id = Value(id), - createdAt = Value(createdAt); - static Insertable<_Message> custom({ - Expression id, - Expression messageText, - Expression attachmentJson, - Expression status, - Expression type, - Expression reactionCounts, - Expression reactionScores, - Expression parentId, - Expression quotedMessageId, - Expression replyCount, - Expression showInChannel, - Expression shadowed, - Expression command, - Expression createdAt, - Expression updatedAt, - Expression deletedAt, - Expression userId, - Expression channelCid, - Expression extraData, - }) { - return RawValuesInsertable({ - if (id != null) 'id': id, - if (messageText != null) 'message_text': messageText, - if (attachmentJson != null) 'attachment_json': attachmentJson, - if (status != null) 'status': status, - if (type != null) 'type': type, - 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 (replyCount != null) 'reply_count': replyCount, - if (showInChannel != null) 'show_in_channel': showInChannel, - if (shadowed != null) 'shadowed': shadowed, - if (command != null) 'command': command, - if (createdAt != null) 'created_at': createdAt, - if (updatedAt != null) 'updated_at': updatedAt, - if (deletedAt != null) 'deleted_at': deletedAt, - if (userId != null) 'user_id': userId, - if (channelCid != null) 'channel_cid': channelCid, - if (extraData != null) 'extra_data': extraData, - }); - } - - _MessagesCompanion copyWith( - {Value id, - Value messageText, - Value attachmentJson, - Value status, - Value type, - Value> reactionCounts, - Value> reactionScores, - Value parentId, - Value quotedMessageId, - Value replyCount, - Value showInChannel, - Value shadowed, - Value command, - Value createdAt, - Value updatedAt, - Value deletedAt, - Value userId, - Value channelCid, - Value> extraData}) { - return _MessagesCompanion( - id: id ?? this.id, - messageText: messageText ?? this.messageText, - attachmentJson: attachmentJson ?? this.attachmentJson, - status: status ?? this.status, - type: type ?? this.type, - reactionCounts: reactionCounts ?? this.reactionCounts, - reactionScores: reactionScores ?? this.reactionScores, - parentId: parentId ?? this.parentId, - quotedMessageId: quotedMessageId ?? this.quotedMessageId, - replyCount: replyCount ?? this.replyCount, - showInChannel: showInChannel ?? this.showInChannel, - shadowed: shadowed ?? this.shadowed, - command: command ?? this.command, - createdAt: createdAt ?? this.createdAt, - updatedAt: updatedAt ?? this.updatedAt, - deletedAt: deletedAt ?? this.deletedAt, - userId: userId ?? this.userId, - channelCid: channelCid ?? this.channelCid, - extraData: extraData ?? this.extraData, - ); - } - - @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 (attachmentJson.present) { - map['attachment_json'] = Variable(attachmentJson.value); - } - if (status.present) { - final converter = $_MessagesTable.$converter0; - map['status'] = Variable(converter.mapToSql(status.value)); - } - if (type.present) { - map['type'] = Variable(type.value); - } - if (reactionCounts.present) { - final converter = $_MessagesTable.$converter1; - map['reaction_counts'] = - Variable(converter.mapToSql(reactionCounts.value)); - } - if (reactionScores.present) { - final converter = $_MessagesTable.$converter2; - map['reaction_scores'] = - Variable(converter.mapToSql(reactionScores.value)); - } - if (parentId.present) { - map['parent_id'] = Variable(parentId.value); - } - if (quotedMessageId.present) { - map['quoted_message_id'] = Variable(quotedMessageId.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 (createdAt.present) { - map['created_at'] = Variable(createdAt.value); - } - if (updatedAt.present) { - map['updated_at'] = Variable(updatedAt.value); - } - if (deletedAt.present) { - map['deleted_at'] = Variable(deletedAt.value); - } - if (userId.present) { - map['user_id'] = Variable(userId.value); - } - if (channelCid.present) { - map['channel_cid'] = Variable(channelCid.value); - } - if (extraData.present) { - final converter = $_MessagesTable.$converter3; - map['extra_data'] = Variable(converter.mapToSql(extraData.value)); - } - return map; - } - - @override - String toString() { - return (StringBuffer('_MessagesCompanion(') - ..write('id: $id, ') - ..write('messageText: $messageText, ') - ..write('attachmentJson: $attachmentJson, ') - ..write('status: $status, ') - ..write('type: $type, ') - ..write('reactionCounts: $reactionCounts, ') - ..write('reactionScores: $reactionScores, ') - ..write('parentId: $parentId, ') - ..write('quotedMessageId: $quotedMessageId, ') - ..write('replyCount: $replyCount, ') - ..write('showInChannel: $showInChannel, ') - ..write('shadowed: $shadowed, ') - ..write('command: $command, ') - ..write('createdAt: $createdAt, ') - ..write('updatedAt: $updatedAt, ') - ..write('deletedAt: $deletedAt, ') - ..write('userId: $userId, ') - ..write('channelCid: $channelCid, ') - ..write('extraData: $extraData') - ..write(')')) - .toString(); - } -} - -class $_MessagesTable extends _Messages - with TableInfo<$_MessagesTable, _Message> { - final GeneratedDatabase _db; - final String _alias; - $_MessagesTable(this._db, [this._alias]); - final VerificationMeta _idMeta = const VerificationMeta('id'); - GeneratedTextColumn _id; - @override - GeneratedTextColumn get id => _id ??= _constructId(); - GeneratedTextColumn _constructId() { - return GeneratedTextColumn( - 'id', - $tableName, - false, - ); - } - - final VerificationMeta _messageTextMeta = - const VerificationMeta('messageText'); - GeneratedTextColumn _messageText; - @override - GeneratedTextColumn get messageText => - _messageText ??= _constructMessageText(); - GeneratedTextColumn _constructMessageText() { - return GeneratedTextColumn( - 'message_text', - $tableName, - true, - ); - } - - final VerificationMeta _attachmentJsonMeta = - const VerificationMeta('attachmentJson'); - GeneratedTextColumn _attachmentJson; - @override - GeneratedTextColumn get attachmentJson => - _attachmentJson ??= _constructAttachmentJson(); - GeneratedTextColumn _constructAttachmentJson() { - return GeneratedTextColumn( - 'attachment_json', - $tableName, - true, - ); - } - - final VerificationMeta _statusMeta = const VerificationMeta('status'); - GeneratedIntColumn _status; - @override - GeneratedIntColumn get status => _status ??= _constructStatus(); - GeneratedIntColumn _constructStatus() { - return GeneratedIntColumn( - 'status', - $tableName, - true, - ); - } - - final VerificationMeta _typeMeta = const VerificationMeta('type'); - GeneratedTextColumn _type; - @override - GeneratedTextColumn get type => _type ??= _constructType(); - GeneratedTextColumn _constructType() { - return GeneratedTextColumn( - 'type', - $tableName, - true, - ); - } - - final VerificationMeta _reactionCountsMeta = - const VerificationMeta('reactionCounts'); - GeneratedTextColumn _reactionCounts; - @override - GeneratedTextColumn get reactionCounts => - _reactionCounts ??= _constructReactionCounts(); - GeneratedTextColumn _constructReactionCounts() { - return GeneratedTextColumn( - 'reaction_counts', - $tableName, - true, - ); - } - - final VerificationMeta _reactionScoresMeta = - const VerificationMeta('reactionScores'); - GeneratedTextColumn _reactionScores; - @override - GeneratedTextColumn get reactionScores => - _reactionScores ??= _constructReactionScores(); - GeneratedTextColumn _constructReactionScores() { - return GeneratedTextColumn( - 'reaction_scores', - $tableName, - true, - ); - } - - final VerificationMeta _parentIdMeta = const VerificationMeta('parentId'); - GeneratedTextColumn _parentId; - @override - GeneratedTextColumn get parentId => _parentId ??= _constructParentId(); - GeneratedTextColumn _constructParentId() { - return GeneratedTextColumn( - 'parent_id', - $tableName, - true, - ); - } - - final VerificationMeta _quotedMessageIdMeta = - const VerificationMeta('quotedMessageId'); - GeneratedTextColumn _quotedMessageId; - @override - GeneratedTextColumn get quotedMessageId => - _quotedMessageId ??= _constructQuotedMessageId(); - GeneratedTextColumn _constructQuotedMessageId() { - return GeneratedTextColumn( - 'quoted_message_id', - $tableName, - true, - ); - } - - final VerificationMeta _replyCountMeta = const VerificationMeta('replyCount'); - GeneratedIntColumn _replyCount; - @override - GeneratedIntColumn get replyCount => _replyCount ??= _constructReplyCount(); - GeneratedIntColumn _constructReplyCount() { - return GeneratedIntColumn( - 'reply_count', - $tableName, - true, - ); - } - - final VerificationMeta _showInChannelMeta = - const VerificationMeta('showInChannel'); - GeneratedBoolColumn _showInChannel; - @override - GeneratedBoolColumn get showInChannel => - _showInChannel ??= _constructShowInChannel(); - GeneratedBoolColumn _constructShowInChannel() { - return GeneratedBoolColumn( - 'show_in_channel', - $tableName, - true, - ); - } - - final VerificationMeta _shadowedMeta = const VerificationMeta('shadowed'); - GeneratedBoolColumn _shadowed; - @override - GeneratedBoolColumn get shadowed => _shadowed ??= _constructShadowed(); - GeneratedBoolColumn _constructShadowed() { - return GeneratedBoolColumn( - 'shadowed', - $tableName, - true, - ); - } - - final VerificationMeta _commandMeta = const VerificationMeta('command'); - GeneratedTextColumn _command; - @override - GeneratedTextColumn get command => _command ??= _constructCommand(); - GeneratedTextColumn _constructCommand() { - return GeneratedTextColumn( - 'command', - $tableName, - true, - ); - } - - final VerificationMeta _createdAtMeta = const VerificationMeta('createdAt'); - GeneratedDateTimeColumn _createdAt; - @override - GeneratedDateTimeColumn get createdAt => _createdAt ??= _constructCreatedAt(); - GeneratedDateTimeColumn _constructCreatedAt() { - return GeneratedDateTimeColumn( - 'created_at', - $tableName, - false, - ); - } - - final VerificationMeta _updatedAtMeta = const VerificationMeta('updatedAt'); - GeneratedDateTimeColumn _updatedAt; - @override - GeneratedDateTimeColumn get updatedAt => _updatedAt ??= _constructUpdatedAt(); - GeneratedDateTimeColumn _constructUpdatedAt() { - return GeneratedDateTimeColumn( - 'updated_at', - $tableName, - true, - ); - } - - final VerificationMeta _deletedAtMeta = const VerificationMeta('deletedAt'); - GeneratedDateTimeColumn _deletedAt; - @override - GeneratedDateTimeColumn get deletedAt => _deletedAt ??= _constructDeletedAt(); - GeneratedDateTimeColumn _constructDeletedAt() { - return GeneratedDateTimeColumn( - 'deleted_at', - $tableName, - true, - ); - } - - final VerificationMeta _userIdMeta = const VerificationMeta('userId'); - GeneratedTextColumn _userId; - @override - GeneratedTextColumn get userId => _userId ??= _constructUserId(); - GeneratedTextColumn _constructUserId() { - return GeneratedTextColumn( - 'user_id', - $tableName, - true, - ); - } - - final VerificationMeta _channelCidMeta = const VerificationMeta('channelCid'); - GeneratedTextColumn _channelCid; - @override - GeneratedTextColumn get channelCid => _channelCid ??= _constructChannelCid(); - GeneratedTextColumn _constructChannelCid() { - return GeneratedTextColumn( - 'channel_cid', - $tableName, - true, - ); - } - - final VerificationMeta _extraDataMeta = const VerificationMeta('extraData'); - GeneratedTextColumn _extraData; - @override - GeneratedTextColumn get extraData => _extraData ??= _constructExtraData(); - GeneratedTextColumn _constructExtraData() { - return GeneratedTextColumn( - 'extra_data', - $tableName, - true, - ); - } - - @override - List get $columns => [ - id, - messageText, - attachmentJson, - status, - type, - reactionCounts, - reactionScores, - parentId, - quotedMessageId, - replyCount, - showInChannel, - shadowed, - command, - createdAt, - updatedAt, - deletedAt, - userId, - channelCid, - extraData - ]; - @override - $_MessagesTable get asDslTable => this; - @override - String get $tableName => _alias ?? 'messages'; - @override - final String actualTableName = 'messages'; - @override - VerificationContext validateIntegrity(Insertable<_Message> 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('message_text')) { - context.handle( - _messageTextMeta, - messageText.isAcceptableOrUnknown( - data['message_text'], _messageTextMeta)); - } - if (data.containsKey('attachment_json')) { - context.handle( - _attachmentJsonMeta, - attachmentJson.isAcceptableOrUnknown( - data['attachment_json'], _attachmentJsonMeta)); - } - context.handle(_statusMeta, const VerificationResult.success()); - if (data.containsKey('type')) { - context.handle( - _typeMeta, type.isAcceptableOrUnknown(data['type'], _typeMeta)); - } - 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)); - } - if (data.containsKey('quoted_message_id')) { - context.handle( - _quotedMessageIdMeta, - quotedMessageId.isAcceptableOrUnknown( - data['quoted_message_id'], _quotedMessageIdMeta)); - } - 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('created_at')) { - context.handle(_createdAtMeta, - createdAt.isAcceptableOrUnknown(data['created_at'], _createdAtMeta)); - } else if (isInserting) { - context.missing(_createdAtMeta); - } - if (data.containsKey('updated_at')) { - context.handle(_updatedAtMeta, - updatedAt.isAcceptableOrUnknown(data['updated_at'], _updatedAtMeta)); - } - if (data.containsKey('deleted_at')) { - context.handle(_deletedAtMeta, - deletedAt.isAcceptableOrUnknown(data['deleted_at'], _deletedAtMeta)); - } - if (data.containsKey('user_id')) { - context.handle(_userIdMeta, - userId.isAcceptableOrUnknown(data['user_id'], _userIdMeta)); - } - if (data.containsKey('channel_cid')) { - context.handle( - _channelCidMeta, - channelCid.isAcceptableOrUnknown( - data['channel_cid'], _channelCidMeta)); - } - context.handle(_extraDataMeta, const VerificationResult.success()); - return context; - } - - @override - Set get $primaryKey => {id}; - @override - _Message map(Map data, {String tablePrefix}) { - final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : null; - return _Message.fromData(data, _db, prefix: effectivePrefix); - } - - @override - $_MessagesTable createAlias(String alias) { - return $_MessagesTable(_db, alias); - } - - static TypeConverter $converter0 = - _MessageSendingStatusConverter(); - static TypeConverter, String> $converter1 = - _ExtraDataConverter(); - static TypeConverter, String> $converter2 = - _ExtraDataConverter(); - static TypeConverter, String> $converter3 = - _ExtraDataConverter(); -} - -class _Read extends DataClass implements Insertable<_Read> { - final DateTime lastRead; - final String userId; - final String channelCid; - final int unreadMessages; - _Read( - {@required this.lastRead, - @required this.userId, - @required this.channelCid, - this.unreadMessages}); - factory _Read.fromData(Map data, GeneratedDatabase db, - {String prefix}) { - final effectivePrefix = prefix ?? ''; - final dateTimeType = db.typeSystem.forDartType(); - final stringType = db.typeSystem.forDartType(); - final intType = db.typeSystem.forDartType(); - return _Read( - lastRead: dateTimeType - .mapFromDatabaseResponse(data['${effectivePrefix}last_read']), - userId: - stringType.mapFromDatabaseResponse(data['${effectivePrefix}user_id']), - channelCid: stringType - .mapFromDatabaseResponse(data['${effectivePrefix}channel_cid']), - unreadMessages: intType - .mapFromDatabaseResponse(data['${effectivePrefix}unread_messages']), - ); - } - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - if (!nullToAbsent || lastRead != null) { - map['last_read'] = Variable(lastRead); - } - if (!nullToAbsent || userId != null) { - map['user_id'] = Variable(userId); - } - if (!nullToAbsent || channelCid != null) { - map['channel_cid'] = Variable(channelCid); - } - if (!nullToAbsent || unreadMessages != null) { - map['unread_messages'] = Variable(unreadMessages); - } - return map; - } - - _ReadsCompanion toCompanion(bool nullToAbsent) { - return _ReadsCompanion( - lastRead: lastRead == null && nullToAbsent - ? const Value.absent() - : Value(lastRead), - userId: - userId == null && nullToAbsent ? const Value.absent() : Value(userId), - channelCid: channelCid == null && nullToAbsent - ? const Value.absent() - : Value(channelCid), - unreadMessages: unreadMessages == null && nullToAbsent - ? const Value.absent() - : Value(unreadMessages), - ); - } - - factory _Read.fromJson(Map json, - {ValueSerializer serializer}) { - serializer ??= moorRuntimeOptions.defaultSerializer; - return _Read( - lastRead: serializer.fromJson(json['lastRead']), - userId: serializer.fromJson(json['userId']), - channelCid: serializer.fromJson(json['channelCid']), - unreadMessages: serializer.fromJson(json['unreadMessages']), - ); - } - @override - Map toJson({ValueSerializer serializer}) { - serializer ??= moorRuntimeOptions.defaultSerializer; - return { - 'lastRead': serializer.toJson(lastRead), - 'userId': serializer.toJson(userId), - 'channelCid': serializer.toJson(channelCid), - 'unreadMessages': serializer.toJson(unreadMessages), - }; - } - - _Read copyWith( - {DateTime lastRead, - String userId, - String channelCid, - int unreadMessages}) => - _Read( - lastRead: lastRead ?? this.lastRead, - userId: userId ?? this.userId, - channelCid: channelCid ?? this.channelCid, - unreadMessages: unreadMessages ?? this.unreadMessages, - ); - @override - String toString() { - return (StringBuffer('_Read(') - ..write('lastRead: $lastRead, ') - ..write('userId: $userId, ') - ..write('channelCid: $channelCid, ') - ..write('unreadMessages: $unreadMessages') - ..write(')')) - .toString(); - } - - @override - int get hashCode => $mrjf($mrjc( - lastRead.hashCode, - $mrjc(userId.hashCode, - $mrjc(channelCid.hashCode, unreadMessages.hashCode)))); - @override - bool operator ==(dynamic other) => - identical(this, other) || - (other is _Read && - other.lastRead == this.lastRead && - other.userId == this.userId && - other.channelCid == this.channelCid && - other.unreadMessages == this.unreadMessages); -} - -class _ReadsCompanion extends UpdateCompanion<_Read> { - final Value lastRead; - final Value userId; - final Value channelCid; - final Value unreadMessages; - const _ReadsCompanion({ - this.lastRead = const Value.absent(), - this.userId = const Value.absent(), - this.channelCid = const Value.absent(), - this.unreadMessages = const Value.absent(), - }); - _ReadsCompanion.insert({ - @required DateTime lastRead, - @required String userId, - @required String channelCid, - this.unreadMessages = const Value.absent(), - }) : lastRead = Value(lastRead), - userId = Value(userId), - channelCid = Value(channelCid); - static Insertable<_Read> custom({ - Expression lastRead, - Expression userId, - Expression channelCid, - Expression unreadMessages, - }) { - 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, - }); - } - - _ReadsCompanion copyWith( - {Value lastRead, - Value userId, - Value channelCid, - Value unreadMessages}) { - return _ReadsCompanion( - lastRead: lastRead ?? this.lastRead, - userId: userId ?? this.userId, - channelCid: channelCid ?? this.channelCid, - unreadMessages: unreadMessages ?? this.unreadMessages, - ); - } - - @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); - } - return map; - } - - @override - String toString() { - return (StringBuffer('_ReadsCompanion(') - ..write('lastRead: $lastRead, ') - ..write('userId: $userId, ') - ..write('channelCid: $channelCid, ') - ..write('unreadMessages: $unreadMessages') - ..write(')')) - .toString(); - } -} - -class $_ReadsTable extends _Reads with TableInfo<$_ReadsTable, _Read> { - final GeneratedDatabase _db; - final String _alias; - $_ReadsTable(this._db, [this._alias]); - final VerificationMeta _lastReadMeta = const VerificationMeta('lastRead'); - GeneratedDateTimeColumn _lastRead; - @override - GeneratedDateTimeColumn get lastRead => _lastRead ??= _constructLastRead(); - GeneratedDateTimeColumn _constructLastRead() { - return GeneratedDateTimeColumn( - 'last_read', - $tableName, - false, - ); - } - - final VerificationMeta _userIdMeta = const VerificationMeta('userId'); - GeneratedTextColumn _userId; - @override - GeneratedTextColumn get userId => _userId ??= _constructUserId(); - GeneratedTextColumn _constructUserId() { - return GeneratedTextColumn( - 'user_id', - $tableName, - false, - ); - } - - final VerificationMeta _channelCidMeta = const VerificationMeta('channelCid'); - GeneratedTextColumn _channelCid; - @override - GeneratedTextColumn get channelCid => _channelCid ??= _constructChannelCid(); - GeneratedTextColumn _constructChannelCid() { - return GeneratedTextColumn( - 'channel_cid', - $tableName, - false, - ); - } - - final VerificationMeta _unreadMessagesMeta = - const VerificationMeta('unreadMessages'); - GeneratedIntColumn _unreadMessages; - @override - GeneratedIntColumn get unreadMessages => - _unreadMessages ??= _constructUnreadMessages(); - GeneratedIntColumn _constructUnreadMessages() { - return GeneratedIntColumn( - 'unread_messages', - $tableName, - true, - ); - } - - @override - List get $columns => - [lastRead, userId, channelCid, unreadMessages]; - @override - $_ReadsTable get asDslTable => this; - @override - String get $tableName => _alias ?? 'reads'; - @override - final String actualTableName = 'reads'; - @override - VerificationContext validateIntegrity(Insertable<_Read> instance, - {bool isInserting = false}) { - final context = VerificationContext(); - final data = instance.toColumns(true); - if (data.containsKey('last_read')) { - context.handle(_lastReadMeta, - lastRead.isAcceptableOrUnknown(data['last_read'], _lastReadMeta)); - } else if (isInserting) { - context.missing(_lastReadMeta); - } - if (data.containsKey('user_id')) { - context.handle(_userIdMeta, - userId.isAcceptableOrUnknown(data['user_id'], _userIdMeta)); - } else if (isInserting) { - context.missing(_userIdMeta); - } - if (data.containsKey('channel_cid')) { - context.handle( - _channelCidMeta, - channelCid.isAcceptableOrUnknown( - data['channel_cid'], _channelCidMeta)); - } else if (isInserting) { - context.missing(_channelCidMeta); - } - if (data.containsKey('unread_messages')) { - context.handle( - _unreadMessagesMeta, - unreadMessages.isAcceptableOrUnknown( - data['unread_messages'], _unreadMessagesMeta)); - } - return context; - } - - @override - Set get $primaryKey => {userId, channelCid}; - @override - _Read map(Map data, {String tablePrefix}) { - final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : null; - return _Read.fromData(data, _db, prefix: effectivePrefix); - } - - @override - $_ReadsTable createAlias(String alias) { - return $_ReadsTable(_db, alias); - } -} - -class _Member extends DataClass implements Insertable<_Member> { - final String userId; - final String channelCid; - final String role; - final DateTime inviteAcceptedAt; - final DateTime inviteRejectedAt; - final bool invited; - final bool banned; - final bool shadowBanned; - final bool isModerator; - final DateTime createdAt; - final DateTime updatedAt; - _Member( - {@required this.userId, - @required this.channelCid, - this.role, - this.inviteAcceptedAt, - this.inviteRejectedAt, - this.invited, - this.banned, - this.shadowBanned, - this.isModerator, - @required this.createdAt, - this.updatedAt}); - factory _Member.fromData(Map data, GeneratedDatabase db, - {String prefix}) { - final effectivePrefix = prefix ?? ''; - final stringType = db.typeSystem.forDartType(); - final dateTimeType = db.typeSystem.forDartType(); - final boolType = db.typeSystem.forDartType(); - return _Member( - userId: - stringType.mapFromDatabaseResponse(data['${effectivePrefix}user_id']), - channelCid: stringType - .mapFromDatabaseResponse(data['${effectivePrefix}channel_cid']), - role: stringType.mapFromDatabaseResponse(data['${effectivePrefix}role']), - inviteAcceptedAt: dateTimeType.mapFromDatabaseResponse( - data['${effectivePrefix}invite_accepted_at']), - inviteRejectedAt: dateTimeType.mapFromDatabaseResponse( - data['${effectivePrefix}invite_rejected_at']), - invited: - boolType.mapFromDatabaseResponse(data['${effectivePrefix}invited']), - banned: - boolType.mapFromDatabaseResponse(data['${effectivePrefix}banned']), - shadowBanned: boolType - .mapFromDatabaseResponse(data['${effectivePrefix}shadow_banned']), - isModerator: boolType - .mapFromDatabaseResponse(data['${effectivePrefix}is_moderator']), - createdAt: dateTimeType - .mapFromDatabaseResponse(data['${effectivePrefix}created_at']), - updatedAt: dateTimeType - .mapFromDatabaseResponse(data['${effectivePrefix}updated_at']), - ); - } - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - if (!nullToAbsent || userId != null) { - map['user_id'] = Variable(userId); - } - if (!nullToAbsent || channelCid != null) { - map['channel_cid'] = Variable(channelCid); - } - if (!nullToAbsent || role != null) { - map['role'] = Variable(role); - } - if (!nullToAbsent || inviteAcceptedAt != null) { - map['invite_accepted_at'] = Variable(inviteAcceptedAt); - } - if (!nullToAbsent || inviteRejectedAt != null) { - map['invite_rejected_at'] = Variable(inviteRejectedAt); - } - if (!nullToAbsent || invited != null) { - map['invited'] = Variable(invited); - } - if (!nullToAbsent || banned != null) { - map['banned'] = Variable(banned); - } - if (!nullToAbsent || shadowBanned != null) { - map['shadow_banned'] = Variable(shadowBanned); - } - if (!nullToAbsent || isModerator != null) { - map['is_moderator'] = Variable(isModerator); - } - if (!nullToAbsent || createdAt != null) { - map['created_at'] = Variable(createdAt); - } - if (!nullToAbsent || updatedAt != null) { - map['updated_at'] = Variable(updatedAt); - } - return map; - } - - _MembersCompanion toCompanion(bool nullToAbsent) { - return _MembersCompanion( - userId: - userId == null && nullToAbsent ? const Value.absent() : Value(userId), - channelCid: channelCid == null && nullToAbsent - ? const Value.absent() - : Value(channelCid), - role: role == null && nullToAbsent ? const Value.absent() : Value(role), - inviteAcceptedAt: inviteAcceptedAt == null && nullToAbsent - ? const Value.absent() - : Value(inviteAcceptedAt), - inviteRejectedAt: inviteRejectedAt == null && nullToAbsent - ? const Value.absent() - : Value(inviteRejectedAt), - invited: invited == null && nullToAbsent - ? const Value.absent() - : Value(invited), - banned: - banned == null && nullToAbsent ? const Value.absent() : Value(banned), - shadowBanned: shadowBanned == null && nullToAbsent - ? const Value.absent() - : Value(shadowBanned), - isModerator: isModerator == null && nullToAbsent - ? const Value.absent() - : Value(isModerator), - createdAt: createdAt == null && nullToAbsent - ? const Value.absent() - : Value(createdAt), - updatedAt: updatedAt == null && nullToAbsent - ? const Value.absent() - : Value(updatedAt), - ); - } - - factory _Member.fromJson(Map json, - {ValueSerializer serializer}) { - serializer ??= moorRuntimeOptions.defaultSerializer; - return _Member( - userId: serializer.fromJson(json['userId']), - channelCid: serializer.fromJson(json['channelCid']), - role: serializer.fromJson(json['role']), - inviteAcceptedAt: serializer.fromJson(json['inviteAcceptedAt']), - inviteRejectedAt: serializer.fromJson(json['inviteRejectedAt']), - invited: serializer.fromJson(json['invited']), - banned: serializer.fromJson(json['banned']), - shadowBanned: serializer.fromJson(json['shadowBanned']), - isModerator: serializer.fromJson(json['isModerator']), - createdAt: serializer.fromJson(json['createdAt']), - updatedAt: serializer.fromJson(json['updatedAt']), - ); - } - @override - Map toJson({ValueSerializer serializer}) { - serializer ??= moorRuntimeOptions.defaultSerializer; - return { - 'userId': serializer.toJson(userId), - 'channelCid': serializer.toJson(channelCid), - 'role': serializer.toJson(role), - 'inviteAcceptedAt': serializer.toJson(inviteAcceptedAt), - 'inviteRejectedAt': serializer.toJson(inviteRejectedAt), - 'invited': serializer.toJson(invited), - 'banned': serializer.toJson(banned), - 'shadowBanned': serializer.toJson(shadowBanned), - 'isModerator': serializer.toJson(isModerator), - 'createdAt': serializer.toJson(createdAt), - 'updatedAt': serializer.toJson(updatedAt), - }; - } - - _Member copyWith( - {String userId, - String channelCid, - String role, - DateTime inviteAcceptedAt, - DateTime inviteRejectedAt, - bool invited, - bool banned, - bool shadowBanned, - bool isModerator, - DateTime createdAt, - DateTime updatedAt}) => - _Member( - userId: userId ?? this.userId, - channelCid: channelCid ?? this.channelCid, - role: role ?? this.role, - inviteAcceptedAt: inviteAcceptedAt ?? this.inviteAcceptedAt, - inviteRejectedAt: inviteRejectedAt ?? this.inviteRejectedAt, - invited: invited ?? this.invited, - banned: banned ?? this.banned, - shadowBanned: shadowBanned ?? this.shadowBanned, - isModerator: isModerator ?? this.isModerator, - createdAt: createdAt ?? this.createdAt, - updatedAt: updatedAt ?? this.updatedAt, - ); - @override - String toString() { - return (StringBuffer('_Member(') - ..write('userId: $userId, ') - ..write('channelCid: $channelCid, ') - ..write('role: $role, ') - ..write('inviteAcceptedAt: $inviteAcceptedAt, ') - ..write('inviteRejectedAt: $inviteRejectedAt, ') - ..write('invited: $invited, ') - ..write('banned: $banned, ') - ..write('shadowBanned: $shadowBanned, ') - ..write('isModerator: $isModerator, ') - ..write('createdAt: $createdAt, ') - ..write('updatedAt: $updatedAt') - ..write(')')) - .toString(); - } - - @override - int get hashCode => $mrjf($mrjc( - userId.hashCode, - $mrjc( - channelCid.hashCode, - $mrjc( - role.hashCode, - $mrjc( - inviteAcceptedAt.hashCode, - $mrjc( - inviteRejectedAt.hashCode, - $mrjc( - invited.hashCode, - $mrjc( - banned.hashCode, - $mrjc( - shadowBanned.hashCode, - $mrjc( - isModerator.hashCode, - $mrjc(createdAt.hashCode, - updatedAt.hashCode))))))))))); - @override - bool operator ==(dynamic other) => - identical(this, other) || - (other is _Member && - other.userId == this.userId && - other.channelCid == this.channelCid && - other.role == this.role && - other.inviteAcceptedAt == this.inviteAcceptedAt && - other.inviteRejectedAt == this.inviteRejectedAt && - other.invited == this.invited && - other.banned == this.banned && - other.shadowBanned == this.shadowBanned && - other.isModerator == this.isModerator && - other.createdAt == this.createdAt && - other.updatedAt == this.updatedAt); -} - -class _MembersCompanion extends UpdateCompanion<_Member> { - final Value userId; - final Value channelCid; - final Value role; - final Value inviteAcceptedAt; - final Value inviteRejectedAt; - final Value invited; - final Value banned; - final Value shadowBanned; - final Value isModerator; - final Value createdAt; - final Value updatedAt; - const _MembersCompanion({ - this.userId = const Value.absent(), - this.channelCid = const Value.absent(), - this.role = const Value.absent(), - this.inviteAcceptedAt = const Value.absent(), - this.inviteRejectedAt = const Value.absent(), - this.invited = const Value.absent(), - this.banned = const Value.absent(), - this.shadowBanned = const Value.absent(), - this.isModerator = const Value.absent(), - this.createdAt = const Value.absent(), - this.updatedAt = const Value.absent(), - }); - _MembersCompanion.insert({ - @required String userId, - @required String channelCid, - this.role = const Value.absent(), - this.inviteAcceptedAt = const Value.absent(), - this.inviteRejectedAt = const Value.absent(), - this.invited = const Value.absent(), - this.banned = const Value.absent(), - this.shadowBanned = const Value.absent(), - this.isModerator = const Value.absent(), - @required DateTime createdAt, - this.updatedAt = const Value.absent(), - }) : userId = Value(userId), - channelCid = Value(channelCid), - createdAt = Value(createdAt); - static Insertable<_Member> custom({ - Expression userId, - Expression channelCid, - Expression role, - Expression inviteAcceptedAt, - Expression inviteRejectedAt, - Expression invited, - Expression banned, - Expression shadowBanned, - Expression isModerator, - Expression createdAt, - Expression updatedAt, - }) { - return RawValuesInsertable({ - if (userId != null) 'user_id': userId, - if (channelCid != null) 'channel_cid': channelCid, - if (role != null) 'role': role, - if (inviteAcceptedAt != null) 'invite_accepted_at': inviteAcceptedAt, - if (inviteRejectedAt != null) 'invite_rejected_at': inviteRejectedAt, - if (invited != null) 'invited': invited, - if (banned != null) 'banned': banned, - if (shadowBanned != null) 'shadow_banned': shadowBanned, - if (isModerator != null) 'is_moderator': isModerator, - if (createdAt != null) 'created_at': createdAt, - if (updatedAt != null) 'updated_at': updatedAt, - }); - } - - _MembersCompanion copyWith( - {Value userId, - Value channelCid, - Value role, - Value inviteAcceptedAt, - Value inviteRejectedAt, - Value invited, - Value banned, - Value shadowBanned, - Value isModerator, - Value createdAt, - Value updatedAt}) { - return _MembersCompanion( - userId: userId ?? this.userId, - channelCid: channelCid ?? this.channelCid, - role: role ?? this.role, - inviteAcceptedAt: inviteAcceptedAt ?? this.inviteAcceptedAt, - inviteRejectedAt: inviteRejectedAt ?? this.inviteRejectedAt, - invited: invited ?? this.invited, - banned: banned ?? this.banned, - shadowBanned: shadowBanned ?? this.shadowBanned, - isModerator: isModerator ?? this.isModerator, - createdAt: createdAt ?? this.createdAt, - updatedAt: updatedAt ?? this.updatedAt, - ); - } - - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - if (userId.present) { - map['user_id'] = Variable(userId.value); - } - if (channelCid.present) { - map['channel_cid'] = Variable(channelCid.value); - } - if (role.present) { - map['role'] = Variable(role.value); - } - if (inviteAcceptedAt.present) { - map['invite_accepted_at'] = Variable(inviteAcceptedAt.value); - } - if (inviteRejectedAt.present) { - map['invite_rejected_at'] = Variable(inviteRejectedAt.value); - } - if (invited.present) { - map['invited'] = Variable(invited.value); - } - if (banned.present) { - map['banned'] = Variable(banned.value); - } - if (shadowBanned.present) { - map['shadow_banned'] = Variable(shadowBanned.value); - } - if (isModerator.present) { - map['is_moderator'] = Variable(isModerator.value); - } - if (createdAt.present) { - map['created_at'] = Variable(createdAt.value); - } - if (updatedAt.present) { - map['updated_at'] = Variable(updatedAt.value); - } - return map; - } - - @override - String toString() { - return (StringBuffer('_MembersCompanion(') - ..write('userId: $userId, ') - ..write('channelCid: $channelCid, ') - ..write('role: $role, ') - ..write('inviteAcceptedAt: $inviteAcceptedAt, ') - ..write('inviteRejectedAt: $inviteRejectedAt, ') - ..write('invited: $invited, ') - ..write('banned: $banned, ') - ..write('shadowBanned: $shadowBanned, ') - ..write('isModerator: $isModerator, ') - ..write('createdAt: $createdAt, ') - ..write('updatedAt: $updatedAt') - ..write(')')) - .toString(); - } -} - -class $_MembersTable extends _Members with TableInfo<$_MembersTable, _Member> { - final GeneratedDatabase _db; - final String _alias; - $_MembersTable(this._db, [this._alias]); - final VerificationMeta _userIdMeta = const VerificationMeta('userId'); - GeneratedTextColumn _userId; - @override - GeneratedTextColumn get userId => _userId ??= _constructUserId(); - GeneratedTextColumn _constructUserId() { - return GeneratedTextColumn( - 'user_id', - $tableName, - false, - ); - } - - final VerificationMeta _channelCidMeta = const VerificationMeta('channelCid'); - GeneratedTextColumn _channelCid; - @override - GeneratedTextColumn get channelCid => _channelCid ??= _constructChannelCid(); - GeneratedTextColumn _constructChannelCid() { - return GeneratedTextColumn( - 'channel_cid', - $tableName, - false, - ); - } - - final VerificationMeta _roleMeta = const VerificationMeta('role'); - GeneratedTextColumn _role; - @override - GeneratedTextColumn get role => _role ??= _constructRole(); - GeneratedTextColumn _constructRole() { - return GeneratedTextColumn( - 'role', - $tableName, - true, - ); - } - - final VerificationMeta _inviteAcceptedAtMeta = - const VerificationMeta('inviteAcceptedAt'); - GeneratedDateTimeColumn _inviteAcceptedAt; - @override - GeneratedDateTimeColumn get inviteAcceptedAt => - _inviteAcceptedAt ??= _constructInviteAcceptedAt(); - GeneratedDateTimeColumn _constructInviteAcceptedAt() { - return GeneratedDateTimeColumn( - 'invite_accepted_at', - $tableName, - true, - ); - } - - final VerificationMeta _inviteRejectedAtMeta = - const VerificationMeta('inviteRejectedAt'); - GeneratedDateTimeColumn _inviteRejectedAt; - @override - GeneratedDateTimeColumn get inviteRejectedAt => - _inviteRejectedAt ??= _constructInviteRejectedAt(); - GeneratedDateTimeColumn _constructInviteRejectedAt() { - return GeneratedDateTimeColumn( - 'invite_rejected_at', - $tableName, - true, - ); - } - - final VerificationMeta _invitedMeta = const VerificationMeta('invited'); - GeneratedBoolColumn _invited; - @override - GeneratedBoolColumn get invited => _invited ??= _constructInvited(); - GeneratedBoolColumn _constructInvited() { - return GeneratedBoolColumn( - 'invited', - $tableName, - true, - ); - } - - final VerificationMeta _bannedMeta = const VerificationMeta('banned'); - GeneratedBoolColumn _banned; - @override - GeneratedBoolColumn get banned => _banned ??= _constructBanned(); - GeneratedBoolColumn _constructBanned() { - return GeneratedBoolColumn( - 'banned', - $tableName, - true, - ); - } - - final VerificationMeta _shadowBannedMeta = - const VerificationMeta('shadowBanned'); - GeneratedBoolColumn _shadowBanned; - @override - GeneratedBoolColumn get shadowBanned => - _shadowBanned ??= _constructShadowBanned(); - GeneratedBoolColumn _constructShadowBanned() { - return GeneratedBoolColumn( - 'shadow_banned', - $tableName, - true, - ); - } - - final VerificationMeta _isModeratorMeta = - const VerificationMeta('isModerator'); - GeneratedBoolColumn _isModerator; - @override - GeneratedBoolColumn get isModerator => - _isModerator ??= _constructIsModerator(); - GeneratedBoolColumn _constructIsModerator() { - return GeneratedBoolColumn( - 'is_moderator', - $tableName, - true, - ); - } - - final VerificationMeta _createdAtMeta = const VerificationMeta('createdAt'); - GeneratedDateTimeColumn _createdAt; - @override - GeneratedDateTimeColumn get createdAt => _createdAt ??= _constructCreatedAt(); - GeneratedDateTimeColumn _constructCreatedAt() { - return GeneratedDateTimeColumn( - 'created_at', - $tableName, - false, - ); - } - - final VerificationMeta _updatedAtMeta = const VerificationMeta('updatedAt'); - GeneratedDateTimeColumn _updatedAt; - @override - GeneratedDateTimeColumn get updatedAt => _updatedAt ??= _constructUpdatedAt(); - GeneratedDateTimeColumn _constructUpdatedAt() { - return GeneratedDateTimeColumn( - 'updated_at', - $tableName, - true, - ); - } - - @override - List get $columns => [ - userId, - channelCid, - role, - inviteAcceptedAt, - inviteRejectedAt, - invited, - banned, - shadowBanned, - isModerator, - createdAt, - updatedAt - ]; - @override - $_MembersTable get asDslTable => this; - @override - String get $tableName => _alias ?? 'members'; - @override - final String actualTableName = 'members'; - @override - VerificationContext validateIntegrity(Insertable<_Member> instance, - {bool isInserting = false}) { - final context = VerificationContext(); - final data = instance.toColumns(true); - if (data.containsKey('user_id')) { - context.handle(_userIdMeta, - userId.isAcceptableOrUnknown(data['user_id'], _userIdMeta)); - } else if (isInserting) { - context.missing(_userIdMeta); - } - if (data.containsKey('channel_cid')) { - context.handle( - _channelCidMeta, - channelCid.isAcceptableOrUnknown( - data['channel_cid'], _channelCidMeta)); - } else if (isInserting) { - context.missing(_channelCidMeta); - } - if (data.containsKey('role')) { - context.handle( - _roleMeta, role.isAcceptableOrUnknown(data['role'], _roleMeta)); - } - if (data.containsKey('invite_accepted_at')) { - context.handle( - _inviteAcceptedAtMeta, - inviteAcceptedAt.isAcceptableOrUnknown( - data['invite_accepted_at'], _inviteAcceptedAtMeta)); - } - if (data.containsKey('invite_rejected_at')) { - context.handle( - _inviteRejectedAtMeta, - inviteRejectedAt.isAcceptableOrUnknown( - data['invite_rejected_at'], _inviteRejectedAtMeta)); - } - if (data.containsKey('invited')) { - context.handle(_invitedMeta, - invited.isAcceptableOrUnknown(data['invited'], _invitedMeta)); - } - if (data.containsKey('banned')) { - context.handle(_bannedMeta, - banned.isAcceptableOrUnknown(data['banned'], _bannedMeta)); - } - if (data.containsKey('shadow_banned')) { - context.handle( - _shadowBannedMeta, - shadowBanned.isAcceptableOrUnknown( - data['shadow_banned'], _shadowBannedMeta)); - } - if (data.containsKey('is_moderator')) { - context.handle( - _isModeratorMeta, - isModerator.isAcceptableOrUnknown( - data['is_moderator'], _isModeratorMeta)); - } - if (data.containsKey('created_at')) { - context.handle(_createdAtMeta, - createdAt.isAcceptableOrUnknown(data['created_at'], _createdAtMeta)); - } else if (isInserting) { - context.missing(_createdAtMeta); - } - if (data.containsKey('updated_at')) { - context.handle(_updatedAtMeta, - updatedAt.isAcceptableOrUnknown(data['updated_at'], _updatedAtMeta)); - } - return context; - } - - @override - Set get $primaryKey => {userId, channelCid}; - @override - _Member map(Map data, {String tablePrefix}) { - final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : null; - return _Member.fromData(data, _db, prefix: effectivePrefix); - } - - @override - $_MembersTable createAlias(String alias) { - return $_MembersTable(_db, alias); - } -} - -class ChannelQuery extends DataClass implements Insertable { - final String queryHash; - final String channelCid; - ChannelQuery({@required this.queryHash, @required this.channelCid}); - factory ChannelQuery.fromData(Map data, GeneratedDatabase db, - {String prefix}) { - final effectivePrefix = prefix ?? ''; - final stringType = db.typeSystem.forDartType(); - return ChannelQuery( - queryHash: stringType - .mapFromDatabaseResponse(data['${effectivePrefix}query_hash']), - channelCid: stringType - .mapFromDatabaseResponse(data['${effectivePrefix}channel_cid']), - ); - } - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - if (!nullToAbsent || queryHash != null) { - map['query_hash'] = Variable(queryHash); - } - if (!nullToAbsent || channelCid != null) { - map['channel_cid'] = Variable(channelCid); - } - return map; - } - - _ChannelQueriesCompanion toCompanion(bool nullToAbsent) { - return _ChannelQueriesCompanion( - queryHash: queryHash == null && nullToAbsent - ? const Value.absent() - : Value(queryHash), - channelCid: channelCid == null && nullToAbsent - ? const Value.absent() - : Value(channelCid), - ); - } - - factory ChannelQuery.fromJson(Map json, - {ValueSerializer serializer}) { - serializer ??= moorRuntimeOptions.defaultSerializer; - return ChannelQuery( - queryHash: serializer.fromJson(json['queryHash']), - channelCid: serializer.fromJson(json['channelCid']), - ); - } - @override - Map toJson({ValueSerializer serializer}) { - serializer ??= moorRuntimeOptions.defaultSerializer; - return { - 'queryHash': serializer.toJson(queryHash), - 'channelCid': serializer.toJson(channelCid), - }; - } - - ChannelQuery copyWith({String queryHash, String channelCid}) => ChannelQuery( - queryHash: queryHash ?? this.queryHash, - channelCid: channelCid ?? this.channelCid, - ); - @override - String toString() { - return (StringBuffer('ChannelQuery(') - ..write('queryHash: $queryHash, ') - ..write('channelCid: $channelCid') - ..write(')')) - .toString(); - } - - @override - int get hashCode => $mrjf($mrjc(queryHash.hashCode, channelCid.hashCode)); - @override - bool operator ==(dynamic other) => - identical(this, other) || - (other is ChannelQuery && - other.queryHash == this.queryHash && - other.channelCid == this.channelCid); -} - -class _ChannelQueriesCompanion extends UpdateCompanion { - final Value queryHash; - final Value channelCid; - const _ChannelQueriesCompanion({ - this.queryHash = const Value.absent(), - this.channelCid = const Value.absent(), - }); - _ChannelQueriesCompanion.insert({ - @required String queryHash, - @required String channelCid, - }) : queryHash = Value(queryHash), - channelCid = Value(channelCid); - static Insertable custom({ - Expression queryHash, - Expression channelCid, - }) { - return RawValuesInsertable({ - if (queryHash != null) 'query_hash': queryHash, - if (channelCid != null) 'channel_cid': channelCid, - }); - } - - _ChannelQueriesCompanion copyWith( - {Value queryHash, Value channelCid}) { - return _ChannelQueriesCompanion( - queryHash: queryHash ?? this.queryHash, - channelCid: channelCid ?? this.channelCid, - ); - } - - @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); - } - return map; - } - - @override - String toString() { - return (StringBuffer('_ChannelQueriesCompanion(') - ..write('queryHash: $queryHash, ') - ..write('channelCid: $channelCid') - ..write(')')) - .toString(); - } -} - -class $_ChannelQueriesTable extends _ChannelQueries - with TableInfo<$_ChannelQueriesTable, ChannelQuery> { - final GeneratedDatabase _db; - final String _alias; - $_ChannelQueriesTable(this._db, [this._alias]); - final VerificationMeta _queryHashMeta = const VerificationMeta('queryHash'); - GeneratedTextColumn _queryHash; - @override - GeneratedTextColumn get queryHash => _queryHash ??= _constructQueryHash(); - GeneratedTextColumn _constructQueryHash() { - return GeneratedTextColumn( - 'query_hash', - $tableName, - false, - ); - } - - final VerificationMeta _channelCidMeta = const VerificationMeta('channelCid'); - GeneratedTextColumn _channelCid; - @override - GeneratedTextColumn get channelCid => _channelCid ??= _constructChannelCid(); - GeneratedTextColumn _constructChannelCid() { - return GeneratedTextColumn( - 'channel_cid', - $tableName, - false, - ); - } - - @override - List get $columns => [queryHash, channelCid]; - @override - $_ChannelQueriesTable get asDslTable => this; - @override - String get $tableName => _alias ?? 'channel_queries'; - @override - final String actualTableName = '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 - ChannelQuery map(Map data, {String tablePrefix}) { - final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : null; - return ChannelQuery.fromData(data, _db, prefix: effectivePrefix); - } - - @override - $_ChannelQueriesTable createAlias(String alias) { - return $_ChannelQueriesTable(_db, alias); - } -} - -class _Reaction extends DataClass implements Insertable<_Reaction> { - final String messageId; - final String type; - final DateTime createdAt; - final int score; - final String userId; - final Map extraData; - _Reaction( - {@required this.messageId, - @required this.type, - @required this.createdAt, - this.score, - @required this.userId, - this.extraData}); - factory _Reaction.fromData(Map data, GeneratedDatabase db, - {String prefix}) { - final effectivePrefix = prefix ?? ''; - final stringType = db.typeSystem.forDartType(); - final dateTimeType = db.typeSystem.forDartType(); - final intType = db.typeSystem.forDartType(); - return _Reaction( - messageId: stringType - .mapFromDatabaseResponse(data['${effectivePrefix}message_id']), - type: stringType.mapFromDatabaseResponse(data['${effectivePrefix}type']), - createdAt: dateTimeType - .mapFromDatabaseResponse(data['${effectivePrefix}created_at']), - score: intType.mapFromDatabaseResponse(data['${effectivePrefix}score']), - userId: - stringType.mapFromDatabaseResponse(data['${effectivePrefix}user_id']), - extraData: $_ReactionsTable.$converter0.mapToDart(stringType - .mapFromDatabaseResponse(data['${effectivePrefix}extra_data'])), - ); - } - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - if (!nullToAbsent || messageId != null) { - map['message_id'] = Variable(messageId); - } - if (!nullToAbsent || type != null) { - map['type'] = Variable(type); - } - if (!nullToAbsent || createdAt != null) { - map['created_at'] = Variable(createdAt); - } - if (!nullToAbsent || score != null) { - map['score'] = Variable(score); - } - if (!nullToAbsent || userId != null) { - map['user_id'] = Variable(userId); - } - if (!nullToAbsent || extraData != null) { - final converter = $_ReactionsTable.$converter0; - map['extra_data'] = Variable(converter.mapToSql(extraData)); - } - return map; - } - - _ReactionsCompanion toCompanion(bool nullToAbsent) { - return _ReactionsCompanion( - messageId: messageId == null && nullToAbsent - ? const Value.absent() - : Value(messageId), - type: type == null && nullToAbsent ? const Value.absent() : Value(type), - createdAt: createdAt == null && nullToAbsent - ? const Value.absent() - : Value(createdAt), - score: - score == null && nullToAbsent ? const Value.absent() : Value(score), - userId: - userId == null && nullToAbsent ? const Value.absent() : Value(userId), - extraData: extraData == null && nullToAbsent - ? const Value.absent() - : Value(extraData), - ); - } - - factory _Reaction.fromJson(Map json, - {ValueSerializer serializer}) { - serializer ??= moorRuntimeOptions.defaultSerializer; - return _Reaction( - messageId: serializer.fromJson(json['messageId']), - type: serializer.fromJson(json['type']), - createdAt: serializer.fromJson(json['createdAt']), - score: serializer.fromJson(json['score']), - userId: serializer.fromJson(json['userId']), - extraData: serializer.fromJson>(json['extraData']), - ); - } - @override - Map toJson({ValueSerializer serializer}) { - serializer ??= moorRuntimeOptions.defaultSerializer; - return { - 'messageId': serializer.toJson(messageId), - 'type': serializer.toJson(type), - 'createdAt': serializer.toJson(createdAt), - 'score': serializer.toJson(score), - 'userId': serializer.toJson(userId), - 'extraData': serializer.toJson>(extraData), - }; - } - - _Reaction copyWith( - {String messageId, - String type, - DateTime createdAt, - int score, - String userId, - Map extraData}) => - _Reaction( - messageId: messageId ?? this.messageId, - type: type ?? this.type, - createdAt: createdAt ?? this.createdAt, - score: score ?? this.score, - userId: userId ?? this.userId, - extraData: extraData ?? this.extraData, - ); - @override - String toString() { - return (StringBuffer('_Reaction(') - ..write('messageId: $messageId, ') - ..write('type: $type, ') - ..write('createdAt: $createdAt, ') - ..write('score: $score, ') - ..write('userId: $userId, ') - ..write('extraData: $extraData') - ..write(')')) - .toString(); - } - - @override - int get hashCode => $mrjf($mrjc( - messageId.hashCode, - $mrjc( - type.hashCode, - $mrjc( - createdAt.hashCode, - $mrjc(score.hashCode, - $mrjc(userId.hashCode, extraData.hashCode)))))); - @override - bool operator ==(dynamic other) => - identical(this, other) || - (other is _Reaction && - other.messageId == this.messageId && - other.type == this.type && - other.createdAt == this.createdAt && - other.score == this.score && - other.userId == this.userId && - other.extraData == this.extraData); -} - -class _ReactionsCompanion extends UpdateCompanion<_Reaction> { - final Value messageId; - final Value type; - final Value createdAt; - final Value score; - final Value userId; - final Value> extraData; - const _ReactionsCompanion({ - this.messageId = const Value.absent(), - this.type = const Value.absent(), - this.createdAt = const Value.absent(), - this.score = const Value.absent(), - this.userId = const Value.absent(), - this.extraData = const Value.absent(), - }); - _ReactionsCompanion.insert({ - @required String messageId, - @required String type, - @required DateTime createdAt, - this.score = const Value.absent(), - @required String userId, - this.extraData = const Value.absent(), - }) : messageId = Value(messageId), - type = Value(type), - createdAt = Value(createdAt), - userId = Value(userId); - static Insertable<_Reaction> custom({ - Expression messageId, - Expression type, - Expression createdAt, - Expression score, - Expression userId, - Expression extraData, - }) { - return RawValuesInsertable({ - if (messageId != null) 'message_id': messageId, - if (type != null) 'type': type, - if (createdAt != null) 'created_at': createdAt, - if (score != null) 'score': score, - if (userId != null) 'user_id': userId, - if (extraData != null) 'extra_data': extraData, - }); - } - - _ReactionsCompanion copyWith( - {Value messageId, - Value type, - Value createdAt, - Value score, - Value userId, - Value> extraData}) { - return _ReactionsCompanion( - messageId: messageId ?? this.messageId, - type: type ?? this.type, - createdAt: createdAt ?? this.createdAt, - score: score ?? this.score, - userId: userId ?? this.userId, - extraData: extraData ?? this.extraData, - ); - } - - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - if (messageId.present) { - map['message_id'] = Variable(messageId.value); - } - if (type.present) { - map['type'] = Variable(type.value); - } - if (createdAt.present) { - map['created_at'] = Variable(createdAt.value); - } - if (score.present) { - map['score'] = Variable(score.value); - } - if (userId.present) { - map['user_id'] = Variable(userId.value); - } - if (extraData.present) { - final converter = $_ReactionsTable.$converter0; - map['extra_data'] = Variable(converter.mapToSql(extraData.value)); - } - return map; - } - - @override - String toString() { - return (StringBuffer('_ReactionsCompanion(') - ..write('messageId: $messageId, ') - ..write('type: $type, ') - ..write('createdAt: $createdAt, ') - ..write('score: $score, ') - ..write('userId: $userId, ') - ..write('extraData: $extraData') - ..write(')')) - .toString(); - } -} - -class $_ReactionsTable extends _Reactions - with TableInfo<$_ReactionsTable, _Reaction> { - final GeneratedDatabase _db; - final String _alias; - $_ReactionsTable(this._db, [this._alias]); - final VerificationMeta _messageIdMeta = const VerificationMeta('messageId'); - GeneratedTextColumn _messageId; - @override - GeneratedTextColumn get messageId => _messageId ??= _constructMessageId(); - GeneratedTextColumn _constructMessageId() { - return GeneratedTextColumn( - 'message_id', - $tableName, - false, - ); - } - - final VerificationMeta _typeMeta = const VerificationMeta('type'); - GeneratedTextColumn _type; - @override - GeneratedTextColumn get type => _type ??= _constructType(); - GeneratedTextColumn _constructType() { - return GeneratedTextColumn( - 'type', - $tableName, - false, - ); - } - - final VerificationMeta _createdAtMeta = const VerificationMeta('createdAt'); - GeneratedDateTimeColumn _createdAt; - @override - GeneratedDateTimeColumn get createdAt => _createdAt ??= _constructCreatedAt(); - GeneratedDateTimeColumn _constructCreatedAt() { - return GeneratedDateTimeColumn( - 'created_at', - $tableName, - false, - ); - } - - final VerificationMeta _scoreMeta = const VerificationMeta('score'); - GeneratedIntColumn _score; - @override - GeneratedIntColumn get score => _score ??= _constructScore(); - GeneratedIntColumn _constructScore() { - return GeneratedIntColumn( - 'score', - $tableName, - true, - ); - } - - final VerificationMeta _userIdMeta = const VerificationMeta('userId'); - GeneratedTextColumn _userId; - @override - GeneratedTextColumn get userId => _userId ??= _constructUserId(); - GeneratedTextColumn _constructUserId() { - return GeneratedTextColumn( - 'user_id', - $tableName, - false, - ); - } - - final VerificationMeta _extraDataMeta = const VerificationMeta('extraData'); - GeneratedTextColumn _extraData; - @override - GeneratedTextColumn get extraData => _extraData ??= _constructExtraData(); - GeneratedTextColumn _constructExtraData() { - return GeneratedTextColumn( - 'extra_data', - $tableName, - true, - ); - } - - @override - List get $columns => - [messageId, type, createdAt, score, userId, extraData]; - @override - $_ReactionsTable get asDslTable => this; - @override - String get $tableName => _alias ?? 'reactions'; - @override - final String actualTableName = 'reactions'; - @override - VerificationContext validateIntegrity(Insertable<_Reaction> instance, - {bool isInserting = false}) { - final context = VerificationContext(); - final data = instance.toColumns(true); - if (data.containsKey('message_id')) { - context.handle(_messageIdMeta, - messageId.isAcceptableOrUnknown(data['message_id'], _messageIdMeta)); - } else if (isInserting) { - context.missing(_messageIdMeta); - } - if (data.containsKey('type')) { - context.handle( - _typeMeta, type.isAcceptableOrUnknown(data['type'], _typeMeta)); - } else if (isInserting) { - context.missing(_typeMeta); - } - if (data.containsKey('created_at')) { - context.handle(_createdAtMeta, - createdAt.isAcceptableOrUnknown(data['created_at'], _createdAtMeta)); - } else if (isInserting) { - context.missing(_createdAtMeta); - } - if (data.containsKey('score')) { - context.handle( - _scoreMeta, score.isAcceptableOrUnknown(data['score'], _scoreMeta)); - } - if (data.containsKey('user_id')) { - context.handle(_userIdMeta, - userId.isAcceptableOrUnknown(data['user_id'], _userIdMeta)); - } else if (isInserting) { - context.missing(_userIdMeta); - } - context.handle(_extraDataMeta, const VerificationResult.success()); - return context; - } - - @override - Set get $primaryKey => {messageId, type, userId}; - @override - _Reaction map(Map data, {String tablePrefix}) { - final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : null; - return _Reaction.fromData(data, _db, prefix: effectivePrefix); - } - - @override - $_ReactionsTable createAlias(String alias) { - return $_ReactionsTable(_db, alias); - } - - static TypeConverter, String> $converter0 = - _ExtraDataConverter(); -} - -abstract class _$OfflineStorage extends GeneratedDatabase { - _$OfflineStorage(QueryExecutor e) : super(SqlTypeSystem.defaultInstance, e); - _$OfflineStorage.connect(DatabaseConnection c) : super.connect(c); - $_ConnectionEventTable _connectionEvent; - $_ConnectionEventTable get connectionEvent => - _connectionEvent ??= $_ConnectionEventTable(this); - $_ChannelsTable _channels; - $_ChannelsTable get channels => _channels ??= $_ChannelsTable(this); - $_UsersTable _users; - $_UsersTable get users => _users ??= $_UsersTable(this); - $_MessagesTable _messages; - $_MessagesTable get messages => _messages ??= $_MessagesTable(this); - $_ReadsTable _reads; - $_ReadsTable get reads => _reads ??= $_ReadsTable(this); - $_MembersTable _members; - $_MembersTable get members => _members ??= $_MembersTable(this); - $_ChannelQueriesTable _channelQueries; - $_ChannelQueriesTable get channelQueries => - _channelQueries ??= $_ChannelQueriesTable(this); - $_ReactionsTable _reactions; - $_ReactionsTable get reactions => _reactions ??= $_ReactionsTable(this); - @override - Iterable get allTables => allSchemaEntities.whereType(); - @override - List get allSchemaEntities => [ - connectionEvent, - channels, - users, - messages, - reads, - members, - channelQueries, - reactions - ]; -} diff --git a/packages/dart_client/lib/src/db/shared/native_db.dart b/packages/dart_client/lib/src/db/shared/native_db.dart deleted file mode 100644 index deee5b08..00000000 --- a/packages/dart_client/lib/src/db/shared/native_db.dart +++ /dev/null @@ -1,65 +0,0 @@ -//ignore_for_file: public_member_api_docs -import 'dart:io'; -import 'dart:isolate'; -import 'package:flutter/material.dart'; -import 'package:moor/ffi.dart'; -import 'package:moor/isolate.dart'; -import 'package:moor/moor.dart'; -import 'package:path/path.dart'; -import 'package:path_provider/path_provider.dart'; -import 'package:stream_chat/src/db/offline_storage.dart'; - -class SharedDB { - static Future constructDatabase(dbName) async { - final dir = await getApplicationDocumentsDirectory(); - final path = join(dir.path, dbName); - final file = File(path); - return VmDatabase(file); - } - - static Future createMoorIsolate(String userId) async { - WidgetsFlutterBinding.ensureInitialized(); - final dir = await getApplicationDocumentsDirectory(); - final path = join(dir.path, 'db_$userId.sqlite'); - - final receivePort = ReceivePort(); - await Isolate.spawn( - startBackground, - _IsolateStartRequest(receivePort.sendPort, path), - ); - - return (await receivePort.first as MoorIsolate); - } - - static void startBackground(_IsolateStartRequest request) { - final executor = LazyDatabase(() async { - return VmDatabase(File(request.targetPath)); - }); - final moorIsolate = MoorIsolate.inCurrent( - () => DatabaseConnection.fromExecutor(executor), - ); - request.sendMoorIsolate.send(moorIsolate); - } - - static Future constructOfflineStorage({ - userId, - logger, - }) async { - logger.info('Connecting on background isolate'); - final isolate = await createMoorIsolate(userId); - final connection = await isolate.connect(); - return OfflineStorage.connect( - connection, - userId, - isolate, - logger, - ); - } -} - -class _IsolateStartRequest { - final SendPort sendMoorIsolate; - final String targetPath; - - _IsolateStartRequest(this.sendMoorIsolate, this.targetPath); -} diff --git a/packages/dart_client/lib/src/db/shared/shared_db.dart b/packages/dart_client/lib/src/db/shared/shared_db.dart deleted file mode 100644 index 25120fcf..00000000 --- a/packages/dart_client/lib/src/db/shared/shared_db.dart +++ /dev/null @@ -1,3 +0,0 @@ -export 'unsupported_db.dart' - if (dart.library.io) 'native_db.dart' // implementation using dart:io - if (dart.library.html) 'web_db.dart'; diff --git a/packages/dart_client/lib/src/db/shared/unsupported_db.dart b/packages/dart_client/lib/src/db/shared/unsupported_db.dart deleted file mode 100644 index bbb4ccb7..00000000 --- a/packages/dart_client/lib/src/db/shared/unsupported_db.dart +++ /dev/null @@ -1,14 +0,0 @@ -//ignore_for_file: public_member_api_docs -//ignore_for_file: always_declare_return_types -class SharedDB { - static constructDatabase(dbName) async { - print('Unsupported Platform'); - return null; - } - - static createMoorIsolate(userId) {} - - static startBackground(request) {} - - static constructOfflineStorage({userId, logger}) {} -} diff --git a/packages/dart_client/lib/src/db/shared/web_db.dart b/packages/dart_client/lib/src/db/shared/web_db.dart deleted file mode 100644 index f79c224a..00000000 --- a/packages/dart_client/lib/src/db/shared/web_db.dart +++ /dev/null @@ -1,20 +0,0 @@ -//ignore_for_file: public_member_api_docs -//ignore_for_file: always_declare_return_types -import 'package:moor/moor_web.dart'; -import 'package:stream_chat/src/db/offline_storage.dart'; - -class SharedDB { - static constructDatabase(dbName) async { - return WebDatabase(dbName); - } - - static Future constructOfflineStorage({ - userId, - logger, - }) async { - return OfflineStorage( - userId, - logger, - ); - } -} diff --git a/packages/dart_client/lib/src/db/stream_chat_database.dart b/packages/dart_client/lib/src/db/stream_chat_database.dart deleted file mode 100644 index 87ab828e..00000000 --- a/packages/dart_client/lib/src/db/stream_chat_database.dart +++ /dev/null @@ -1,97 +0,0 @@ -import 'package:stream_chat/src/api/requests.dart'; -import 'package:stream_chat/src/models/channel_model.dart'; -import 'package:stream_chat/src/models/channel_state.dart'; -import 'package:stream_chat/src/models/event.dart'; -import 'package:stream_chat/src/models/member.dart'; -import 'package:stream_chat/src/models/message.dart'; -import 'package:stream_chat/src/models/reaction.dart'; -import 'package:stream_chat/src/models/read.dart'; -import 'package:stream_chat/src/models/user.dart'; - -/// -abstract class StreamChatDatabase { - /// Creates a new connection to the database - Future connect({ - bool connectBackground = false, - bool logStatements = false, - }); - - /// Closes the database instance - /// If [flush] is true, the database data will be deleted - Future disconnect({bool flush = false}); - - /// Get stored replies by messageId - Future> getReplies( - String parentId, { - String lessThan, - }); - - /// Get stored connection event - Future getConnectionInfo(); - - /// Get stored lastSyncAt - Future getLastSyncAt(); - - /// Update stored connection event - Future updateConnectionInfo(Event event); - - /// Update stored lastSyncAt - Future updateLastSyncAt(DateTime lastSyncAt); - - /// Get the channel cids saved in the offline storage - Future> getChannelCids(); - - Future getChannelByCid(String cid); - - Future> getMembersByCid(String cid); - - Future> getReadsByCid(String cid); - - Future> getMessagesByCid( - String cid, { - int limit = 20, - String messageLessThan, - String messageGreaterThan, - }); - - /// Get list of channels by filter, sort and paginationParams - Future> getChannelStates({ - Map filter, - List sort = const [], - PaginationParams paginationParams, - }); - - /// Update list of channel queries - /// If [clearQueryCache] is true before the insert - /// the list of matching rows will be deleted - Future updateChannelQueries( - Map filter, - List cids, - bool clearQueryCache, - ); - - /// Remove a message by message id - Future deleteMessageByIds(List messageIds); - - /// Remove a message by message id - Future deleteMessageByCids(List cids); - - /// Remove a channel by cid - Future deleteChannelByCids(List cids); - - /// Update messages data from a list - Future updateMessages(String cid, List messages); - - /// Get the info about channel threads - Future>> getChannelThreads(String cid); - - Future updateChannels(List channels); - - Future updateMembers(String cid, List members); - - Future updateReads(String cid, List reads); - - Future updateUsers(List users); - - Future updateReactions(List reactions); -} diff --git a/packages/dart_client/lib/src/db/stream_chat_persistence.dart b/packages/dart_client/lib/src/db/stream_chat_persistence.dart new file mode 100644 index 00000000..40004825 --- /dev/null +++ b/packages/dart_client/lib/src/db/stream_chat_persistence.dart @@ -0,0 +1,196 @@ +import 'package:stream_chat/src/api/requests.dart'; +import 'package:stream_chat/src/models/channel_model.dart'; +import 'package:stream_chat/src/models/channel_state.dart'; +import 'package:stream_chat/src/models/event.dart'; +import 'package:stream_chat/src/models/member.dart'; +import 'package:stream_chat/src/models/message.dart'; +import 'package:stream_chat/src/models/reaction.dart'; +import 'package:stream_chat/src/models/read.dart'; +import 'package:stream_chat/src/models/user.dart'; + +/// +abstract class StreamChatPersistence { + /// Creates a new connection to the database + Future connect({ + bool connectBackground = false, + bool logStatements = false, + }); + + /// Closes the database instance + /// If [flush] is true, the database data will be deleted + Future disconnect({bool flush = false}); + + /// Get stored replies by messageId + Future> getReplies( + String parentId, { + String lessThan, + }); + + /// Get stored connection event + Future getConnectionInfo(); + + /// Get stored lastSyncAt + Future getLastSyncAt(); + + /// Update stored connection event + Future updateConnectionInfo(Event event); + + /// Update stored lastSyncAt + Future updateLastSyncAt(DateTime lastSyncAt); + + /// Get the channel cids saved in the offline storage + Future> getChannelCids(); + + /// + Future getChannelByCid(String cid); + + /// + Future> getMembersByCid(String cid); + + /// + Future> getReadsByCid(String cid); + + /// + Future> getMessagesByCid( + String cid, { + PaginationParams messagePagination, + }); + + /// Get channel data by cid + Future getChannelStateByCid( + String cid, { + PaginationParams messagePagination, + }) async { + final members = await getMembersByCid(cid); + final reads = await getReadsByCid(cid); + final channel = await getChannelByCid(cid); + final messages = await getMessagesByCid( + cid, + messagePagination: messagePagination, + ); + return ChannelState( + members: members, + read: reads, + messages: messages, + channel: channel, + ); + } + + /// Get list of channels by filter, sort and paginationParams + Future> getChannelStates({ + Map filter, + List sort = const [], + PaginationParams paginationParams, + }); + + /// Update list of channel queries + /// If [clearQueryCache] is true before the insert + /// the list of matching rows will be deleted + Future updateChannelQueries( + Map filter, + List cids, + bool clearQueryCache, + ); + + /// Remove a message by message id + Future deleteMessageById(String messageId) { + return deleteMessageByIds([messageId]); + } + + /// Remove a message by message ids + Future deleteMessageByIds(List messageIds); + + /// Remove a message by channel cid + Future deleteMessageByCid(String cid) { + return deleteMessageByCids([cid]); + } + + /// Remove a message by message cids + Future deleteMessageByCids(List cids); + + /// Remove a channel by cid + Future deleteChannels(List cids); + + /// Update messages data from a list + Future updateMessages(String cid, List messages); + + /// Get the info about channel threads + Future>> getChannelThreads(String cid); + + /// + Future updateChannels(List channels); + + /// + Future updateMembers(String cid, List members); + + /// + Future updateReads(String cid, List reads); + + /// + Future updateUsers(List users); + + /// + Future updateReactions(List reactions); + + /// + Future updateChannelState(ChannelState channelState) { + return updateChannelStates([channelState]); + } + + /// Update list of channel states + Future updateChannelStates(List channelStates) async { + final channels = channelStates.map((it) { + return it.channel; + }).where((it) => it != null); + + final reactions = channelStates.expand((it) => it.messages).expand((it) { + return [ + ...it.ownReactions.where((r) => r.userId != null), + ...it.latestReactions.where((r) => r.userId != null) + ]; + }).where((it) => it != null); + + final users = channelStates + .map((cs) => [ + cs.channel?.createdBy, + ...cs.messages?.map((m) { + return [ + m.user, + ...m.latestReactions?.map((r) => r.user), + ...m.ownReactions?.map((r) => r.user), + ]; + })?.expand((v) => v), + ...cs.read?.map((r) => r.user), + ...cs.members?.map((m) => m.user), + ]) + .expand((it) => it) + .where((it) => it != null); + + final updateMessagesFuture = channelStates.map((it) { + final cid = it.channel.cid; + final messages = it.messages.where((it) => it != null); + return updateMessages(cid, messages.toList(growable: false)); + }).toList(growable: false); + + final updateReadsFuture = channelStates.map((it) { + final cid = it.channel.cid; + final reads = it.read.where((it) => it != null); + return updateReads(cid, reads.toList(growable: false)); + }).toList(growable: false); + + final updateMembersFuture = channelStates.map((it) { + final cid = it.channel.cid; + final members = it.members.where((it) => it != null); + return updateMembers(cid, members.toList(growable: false)); + }).toList(growable: false); + + await Future.wait([ + ...updateMessagesFuture, + ...updateReadsFuture, + ...updateMembersFuture, + updateChannels(channels.toList(growable: false)), + updateReactions(reactions.toList(growable: false)), + updateUsers(users.toList(growable: false)), + ]); + } +} diff --git a/packages/dart_client/lib/src/notifications.dart b/packages/dart_client/lib/src/notifications.dart index 2fc500cf..e4cef9b5 100644 --- a/packages/dart_client/lib/src/notifications.dart +++ b/packages/dart_client/lib/src/notifications.dart @@ -3,10 +3,10 @@ import 'dart:convert'; import 'package:logging/logging.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:stream_chat/src/api/responses.dart'; -import 'package:stream_chat/src/db/offline_storage.dart'; import 'package:stream_chat/src/models/channel_model.dart'; import 'package:stream_chat/src/models/channel_state.dart'; import 'package:stream_chat/src/models/message.dart'; +import 'package:stream_chat_persistence/stream_chat_persistence.dart'; import 'client.dart'; import 'models/own_user.dart'; @@ -23,14 +23,18 @@ class NotificationService { final sharedPreferences = await _getSharedPreferences(); final userId = sharedPreferences.getString(KEY_USER_ID); - final offlineStorage = OfflineStorage(userId, Logger('💽')); - await offlineStorage.updateChannelState( + final chatPersistence = StreamChatPersistenceImpl( + userId, + logger: Logger('💽'), + ); + await chatPersistence.connect(); + await chatPersistence.updateChannelState( ChannelState( channel: channelModel, messages: [message], ), ); - await offlineStorage.disconnect(); + await chatPersistence.disconnect(); } else { final channel = client.state.channels[channelModel.cid]; channel.state.updateChannelState( @@ -44,6 +48,7 @@ class NotificationService { } static SharedPreferences _sharedPreferences; + static Future _getSharedPreferences() async { _sharedPreferences ??= await SharedPreferences.getInstance(); return _sharedPreferences; @@ -74,17 +79,18 @@ class NotificationService { final sharedPreferences = await _getSharedPreferences(); final userId = sharedPreferences.getString(KEY_USER_ID); - final offlineStorage = OfflineStorage( + final chatPersistence = StreamChatPersistenceImpl( userId, - Logger('💽'), + logger: Logger('💽'), ); + await chatPersistence.connect(); - await offlineStorage.updateChannelState(ChannelState( + await chatPersistence.updateChannelState(ChannelState( messages: [messageResponse.message], channel: messageResponse.channel, )); - await offlineStorage.disconnect(); + await chatPersistence.disconnect(); } /// Gets the message using the client and stores it in the offline storage diff --git a/packages/dart_client/lib/stream_chat.dart b/packages/dart_client/lib/stream_chat.dart index 8bac944f..f9a366c3 100644 --- a/packages/dart_client/lib/stream_chat.dart +++ b/packages/dart_client/lib/stream_chat.dart @@ -27,5 +27,5 @@ export './src/models/reaction.dart'; export './src/models/read.dart'; export './src/models/user.dart'; export './src/notifications.dart'; -export './src/db/stream_chat_database.dart'; -export './src/utils/result.dart'; +export './src/db/stream_chat_persistence.dart'; +export './src/utils/result.dart' hide Success, Error; diff --git a/packages/dart_client/pubspec.yaml b/packages/dart_client/pubspec.yaml index d4734e44..0032453a 100644 --- a/packages/dart_client/pubspec.yaml +++ b/packages/dart_client/pubspec.yaml @@ -19,12 +19,8 @@ dependencies: uuid: ^2.2.2 async: ^2.4.1 stream_channel: ^2.0.0 - moor: ^3.3.1 - path_provider: ^1.6.10 - path: ^1.6.4 rxdart: ^0.24.1 collection: ^1.14.12 - sqlite3_flutter_libs: ^0.3.0 pedantic: ^1.9.2 freezed: ^0.12.7 stream_chat_persistence: @@ -33,7 +29,6 @@ dependencies: dev_dependencies: build_runner: ^1.10.0 json_serializable: ^3.3.0 - moor_generator: ^3.1.0 flutter_test: sdk: flutter mockito: ^4.1.1 diff --git a/packages/flutter_widgets/pubspec.yaml b/packages/flutter_widgets/pubspec.yaml index 2b82aca2..5d7ff855 100644 --- a/packages/flutter_widgets/pubspec.yaml +++ b/packages/flutter_widgets/pubspec.yaml @@ -29,7 +29,8 @@ dependencies: image_picker: ^0.6.7+17 flutter_keyboard_visibility: ^4.0.2 mime: ^0.9.7 - stream_chat: ^0.2.24 + stream_chat: + path: ../dart_client video_compress: ^2.1.1 visibility_detector: ^0.1.5 http_parser: ^3.1.4