diff --git a/packages/stream_chat_persistence/lib/src/converter/converter.dart b/packages/stream_chat_persistence/lib/src/converter/converter.dart new file mode 100644 index 00000000..f32f4b54 --- /dev/null +++ b/packages/stream_chat_persistence/lib/src/converter/converter.dart @@ -0,0 +1,3 @@ +export 'list_converter.dart'; +export 'map_converter.dart'; +export 'message_sending_status_converter.dart'; \ No newline at end of file diff --git a/packages/stream_chat_persistence/lib/src/dao/connection_event_dao.dart b/packages/stream_chat_persistence/lib/src/dao/connection_event_dao.dart index 59d22010..baf91095 100644 --- a/packages/stream_chat_persistence/lib/src/dao/connection_event_dao.dart +++ b/packages/stream_chat_persistence/lib/src/dao/connection_event_dao.dart @@ -16,12 +16,8 @@ class ConnectionEventDao extends DatabaseAccessor /// Get the latest stored connection event Future get connectionEvent { - return select(connectionEvents).join([ - leftOuterJoin(users, connectionEvents.ownUserId.equalsExp(users.id)), - ]).map((rows) { - final event = rows.readTable(connectionEvents); - final user = rows.readTable(users); - return event.toEvent(user: user?.toUser()); + return select(connectionEvents).map((eventEntity) { + return eventEntity.toEvent(); }).getSingle(); } @@ -40,7 +36,7 @@ class ConnectionEventDao extends DatabaseAccessor lastEventAt: event.createdAt ?? connectionInfo?.lastEventAt, totalUnreadCount: event.totalUnreadCount ?? connectionInfo?.totalUnreadCount, - ownUserId: event.me?.id ?? connectionInfo?.ownUserId, + ownUser: event.me?.toJson() ?? connectionInfo?.ownUser, unreadChannels: event.unreadChannels ?? connectionInfo?.unreadChannels, ), mode: InsertMode.insertOrReplace, diff --git a/packages/stream_chat_persistence/lib/src/dao/message_dao.dart b/packages/stream_chat_persistence/lib/src/dao/message_dao.dart index 700f8bed..320cb022 100644 --- a/packages/stream_chat_persistence/lib/src/dao/message_dao.dart +++ b/packages/stream_chat_persistence/lib/src/dao/message_dao.dart @@ -97,9 +97,7 @@ class MessageDao extends DatabaseAccessor /// Future> getMessagesByCid( String cid, { - int limit = 20, - String messageLessThan, - String messageGreaterThan, + PaginationParams messagePagination, }) async { final msgList = await Future.wait(await (select(messages).join([ leftOuterJoin(users, messages.userId.equalsExp(users.id)), @@ -111,27 +109,30 @@ class MessageDao extends DatabaseAccessor .map(_messageFromJoinRow) .get()); - if (messageLessThan != null) { - final lessThanIndex = msgList.indexWhere((m) => m.id == messageLessThan); + if (messagePagination.lessThan != null) { + final lessThanIndex = msgList.indexWhere( + (m) => m.id == messagePagination.lessThan, + ); if (lessThanIndex != -1) { msgList.removeRange(lessThanIndex, msgList.length); } } - if (messageGreaterThan != null) { - final greaterThanIndex = - msgList.indexWhere((m) => m.id == messageGreaterThan); + if (messagePagination.greaterThanOrEqual != null) { + final greaterThanIndex = msgList.indexWhere( + (m) => m.id == messagePagination.greaterThanOrEqual, + ); if (greaterThanIndex != -1) { msgList.removeRange(0, greaterThanIndex); } } - if (limit != null) { - return msgList.take(limit).toList(); + if (messagePagination.limit != null) { + return msgList.take(messagePagination.limit).toList(); } return msgList; } /// - Future updateMessages(String cid, List messageList) { + Future updateMessages(String cid, List messageList) { return batch((batch) { batch.insertAll( messages, diff --git a/packages/stream_chat_persistence/lib/src/db/moor_chat_database.dart b/packages/stream_chat_persistence/lib/src/db/moor_chat_database.dart index 21447981..e32c3e3c 100644 --- a/packages/stream_chat_persistence/lib/src/db/moor_chat_database.dart +++ b/packages/stream_chat_persistence/lib/src/db/moor_chat_database.dart @@ -4,6 +4,7 @@ import 'package:stream_chat/stream_chat.dart'; import '../entity/entity.dart'; import '../dao/dao.dart'; +import '../converter/converter.dart'; import 'shared/shared_db.dart'; part 'moor_chat_database.g.dart'; diff --git a/packages/stream_chat_persistence/lib/src/entity/connection_events.dart b/packages/stream_chat_persistence/lib/src/entity/connection_events.dart index 311f2da0..3ca4592e 100644 --- a/packages/stream_chat_persistence/lib/src/entity/connection_events.dart +++ b/packages/stream_chat_persistence/lib/src/entity/connection_events.dart @@ -1,10 +1,11 @@ import 'package:moor/moor.dart'; +import 'package:stream_chat_persistence/src/converter/map_converter.dart'; @DataClassName('ConnectionEventEntity') class ConnectionEvents extends Table { IntColumn get id => integer()(); - TextColumn get ownUserId => text().nullable()(); + TextColumn get ownUser => text().nullable().map(MapConverter())(); IntColumn get totalUnreadCount => integer().nullable()(); diff --git a/packages/stream_chat_persistence/lib/src/mapper/event_mapper.dart b/packages/stream_chat_persistence/lib/src/mapper/event_mapper.dart index 41e90205..9746dc20 100644 --- a/packages/stream_chat_persistence/lib/src/mapper/event_mapper.dart +++ b/packages/stream_chat_persistence/lib/src/mapper/event_mapper.dart @@ -5,9 +5,9 @@ import 'package:stream_chat_persistence/src/db/moor_chat_database.dart'; /// extension ConnectionEventX on ConnectionEventEntity { /// - Event toEvent({User user}) { + Event toEvent() { return Event( - me: user, + me: ownUser != null ? OwnUser.fromJson(ownUser) : null, totalUnreadCount: totalUnreadCount, unreadChannels: unreadChannels, ); diff --git a/packages/stream_chat_persistence/lib/src/db/stream_chat_database_impl.dart b/packages/stream_chat_persistence/lib/src/stream_chat_persistence_impl.dart similarity index 92% rename from packages/stream_chat_persistence/lib/src/db/stream_chat_database_impl.dart rename to packages/stream_chat_persistence/lib/src/stream_chat_persistence_impl.dart index de9bbe45..2d4caae8 100644 --- a/packages/stream_chat_persistence/lib/src/db/stream_chat_database_impl.dart +++ b/packages/stream_chat_persistence/lib/src/stream_chat_persistence_impl.dart @@ -1,12 +1,12 @@ import 'package:stream_chat/stream_chat.dart'; -import 'moor_chat_database.dart'; -import 'shared/shared_db.dart'; +import 'db/moor_chat_database.dart'; +import 'db/shared/shared_db.dart'; /// -class StreamChatDatabaseImpl implements StreamChatDatabase { +class StreamChatPersistenceImpl extends StreamChatPersistence { /// - StreamChatDatabaseImpl( + StreamChatPersistenceImpl( this._userId, { Logger logger, }) : _logger = logger, @@ -75,7 +75,7 @@ class StreamChatDatabaseImpl implements StreamChatDatabase { } @override - Future deleteChannelByCids(List cids) { + Future deleteChannels(List cids) { return _db.channelDao.deleteChannelByCids(cids); } @@ -105,15 +105,11 @@ class StreamChatDatabaseImpl implements StreamChatDatabase { @override Future> getMessagesByCid( String cid, { - int limit = 20, - String messageLessThan, - String messageGreaterThan, + PaginationParams messagePagination, }) { return _db.messageDao.getMessagesByCid( cid, - limit: limit, - messageLessThan: messageLessThan, - messageGreaterThan: messageGreaterThan, + messagePagination: messagePagination, ); } diff --git a/packages/stream_chat_persistence/lib/stream_chat_persistence.dart b/packages/stream_chat_persistence/lib/stream_chat_persistence.dart index 3388d36e..3d58cb17 100644 --- a/packages/stream_chat_persistence/lib/stream_chat_persistence.dart +++ b/packages/stream_chat_persistence/lib/stream_chat_persistence.dart @@ -1,3 +1,3 @@ library stream_chat_persistence; -export 'src/db/stream_chat_database_impl.dart'; +export 'src/stream_chat_persistence_impl.dart'; diff --git a/packages/stream_chat_persistence/pubspec.yaml b/packages/stream_chat_persistence/pubspec.yaml index 9ba42d1a..a0c97c89 100644 --- a/packages/stream_chat_persistence/pubspec.yaml +++ b/packages/stream_chat_persistence/pubspec.yaml @@ -9,10 +9,13 @@ environment: dependencies: moor: ^3.4.0 + path: ^1.7.0 + path_provider: ^1.6.27 + sqlite3_flutter_libs: ^0.3.0 stream_chat: path: ../dart_client dev_dependencies: test: ^1.15.7 - build_runner: ^1.10.13 + build_runner: ^1.11.0 moor_generator: ^3.4.1