[StreamChatPersistence] Fix connectionEventEntity, MessageDao

Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
Sahil Kumar
2021-01-26 15:58:11 +05:30
parent 82fee14f68
commit a168d3695d
9 changed files with 35 additions and 34 deletions
@@ -0,0 +1,3 @@
export 'list_converter.dart';
export 'map_converter.dart';
export 'message_sending_status_converter.dart';
@@ -16,12 +16,8 @@ class ConnectionEventDao extends DatabaseAccessor<MoorChatDatabase>
/// Get the latest stored connection event /// Get the latest stored connection event
Future<Event> get connectionEvent { Future<Event> get connectionEvent {
return select(connectionEvents).join([ return select(connectionEvents).map((eventEntity) {
leftOuterJoin(users, connectionEvents.ownUserId.equalsExp(users.id)), return eventEntity.toEvent();
]).map((rows) {
final event = rows.readTable(connectionEvents);
final user = rows.readTable(users);
return event.toEvent(user: user?.toUser());
}).getSingle(); }).getSingle();
} }
@@ -40,7 +36,7 @@ class ConnectionEventDao extends DatabaseAccessor<MoorChatDatabase>
lastEventAt: event.createdAt ?? connectionInfo?.lastEventAt, lastEventAt: event.createdAt ?? connectionInfo?.lastEventAt,
totalUnreadCount: totalUnreadCount:
event.totalUnreadCount ?? connectionInfo?.totalUnreadCount, event.totalUnreadCount ?? connectionInfo?.totalUnreadCount,
ownUserId: event.me?.id ?? connectionInfo?.ownUserId, ownUser: event.me?.toJson() ?? connectionInfo?.ownUser,
unreadChannels: event.unreadChannels ?? connectionInfo?.unreadChannels, unreadChannels: event.unreadChannels ?? connectionInfo?.unreadChannels,
), ),
mode: InsertMode.insertOrReplace, mode: InsertMode.insertOrReplace,
@@ -97,9 +97,7 @@ class MessageDao extends DatabaseAccessor<MoorChatDatabase>
/// ///
Future<List<Message>> getMessagesByCid( Future<List<Message>> getMessagesByCid(
String cid, { String cid, {
int limit = 20, PaginationParams messagePagination,
String messageLessThan,
String messageGreaterThan,
}) async { }) async {
final msgList = await Future.wait(await (select(messages).join([ final msgList = await Future.wait(await (select(messages).join([
leftOuterJoin(users, messages.userId.equalsExp(users.id)), leftOuterJoin(users, messages.userId.equalsExp(users.id)),
@@ -111,27 +109,30 @@ class MessageDao extends DatabaseAccessor<MoorChatDatabase>
.map(_messageFromJoinRow) .map(_messageFromJoinRow)
.get()); .get());
if (messageLessThan != null) { if (messagePagination.lessThan != null) {
final lessThanIndex = msgList.indexWhere((m) => m.id == messageLessThan); final lessThanIndex = msgList.indexWhere(
(m) => m.id == messagePagination.lessThan,
);
if (lessThanIndex != -1) { if (lessThanIndex != -1) {
msgList.removeRange(lessThanIndex, msgList.length); msgList.removeRange(lessThanIndex, msgList.length);
} }
} }
if (messageGreaterThan != null) { if (messagePagination.greaterThanOrEqual != null) {
final greaterThanIndex = final greaterThanIndex = msgList.indexWhere(
msgList.indexWhere((m) => m.id == messageGreaterThan); (m) => m.id == messagePagination.greaterThanOrEqual,
);
if (greaterThanIndex != -1) { if (greaterThanIndex != -1) {
msgList.removeRange(0, greaterThanIndex); msgList.removeRange(0, greaterThanIndex);
} }
} }
if (limit != null) { if (messagePagination.limit != null) {
return msgList.take(limit).toList(); return msgList.take(messagePagination.limit).toList();
} }
return msgList; return msgList;
} }
/// ///
Future<int> updateMessages(String cid, List<Message> messageList) { Future<void> updateMessages(String cid, List<Message> messageList) {
return batch((batch) { return batch((batch) {
batch.insertAll( batch.insertAll(
messages, messages,
@@ -4,6 +4,7 @@ import 'package:stream_chat/stream_chat.dart';
import '../entity/entity.dart'; import '../entity/entity.dart';
import '../dao/dao.dart'; import '../dao/dao.dart';
import '../converter/converter.dart';
import 'shared/shared_db.dart'; import 'shared/shared_db.dart';
part 'moor_chat_database.g.dart'; part 'moor_chat_database.g.dart';
@@ -1,10 +1,11 @@
import 'package:moor/moor.dart'; import 'package:moor/moor.dart';
import 'package:stream_chat_persistence/src/converter/map_converter.dart';
@DataClassName('ConnectionEventEntity') @DataClassName('ConnectionEventEntity')
class ConnectionEvents extends Table { class ConnectionEvents extends Table {
IntColumn get id => integer()(); IntColumn get id => integer()();
TextColumn get ownUserId => text().nullable()(); TextColumn get ownUser => text().nullable().map(MapConverter<Object>())();
IntColumn get totalUnreadCount => integer().nullable()(); IntColumn get totalUnreadCount => integer().nullable()();
@@ -5,9 +5,9 @@ import 'package:stream_chat_persistence/src/db/moor_chat_database.dart';
/// ///
extension ConnectionEventX on ConnectionEventEntity { extension ConnectionEventX on ConnectionEventEntity {
/// ///
Event toEvent({User user}) { Event toEvent() {
return Event( return Event(
me: user, me: ownUser != null ? OwnUser.fromJson(ownUser) : null,
totalUnreadCount: totalUnreadCount, totalUnreadCount: totalUnreadCount,
unreadChannels: unreadChannels, unreadChannels: unreadChannels,
); );
@@ -1,12 +1,12 @@
import 'package:stream_chat/stream_chat.dart'; import 'package:stream_chat/stream_chat.dart';
import 'moor_chat_database.dart'; import 'db/moor_chat_database.dart';
import 'shared/shared_db.dart'; import 'db/shared/shared_db.dart';
/// ///
class StreamChatDatabaseImpl implements StreamChatDatabase { class StreamChatPersistenceImpl extends StreamChatPersistence {
/// ///
StreamChatDatabaseImpl( StreamChatPersistenceImpl(
this._userId, { this._userId, {
Logger logger, Logger logger,
}) : _logger = logger, }) : _logger = logger,
@@ -75,7 +75,7 @@ class StreamChatDatabaseImpl implements StreamChatDatabase {
} }
@override @override
Future<void> deleteChannelByCids(List<String> cids) { Future<void> deleteChannels(List<String> cids) {
return _db.channelDao.deleteChannelByCids(cids); return _db.channelDao.deleteChannelByCids(cids);
} }
@@ -105,15 +105,11 @@ class StreamChatDatabaseImpl implements StreamChatDatabase {
@override @override
Future<List<Message>> getMessagesByCid( Future<List<Message>> getMessagesByCid(
String cid, { String cid, {
int limit = 20, PaginationParams messagePagination,
String messageLessThan,
String messageGreaterThan,
}) { }) {
return _db.messageDao.getMessagesByCid( return _db.messageDao.getMessagesByCid(
cid, cid,
limit: limit, messagePagination: messagePagination,
messageLessThan: messageLessThan,
messageGreaterThan: messageGreaterThan,
); );
} }
@@ -1,3 +1,3 @@
library stream_chat_persistence; library stream_chat_persistence;
export 'src/db/stream_chat_database_impl.dart'; export 'src/stream_chat_persistence_impl.dart';
@@ -9,10 +9,13 @@ environment:
dependencies: dependencies:
moor: ^3.4.0 moor: ^3.4.0
path: ^1.7.0
path_provider: ^1.6.27
sqlite3_flutter_libs: ^0.3.0
stream_chat: stream_chat:
path: ../dart_client path: ../dart_client
dev_dependencies: dev_dependencies:
test: ^1.15.7 test: ^1.15.7
build_runner: ^1.10.13 build_runner: ^1.11.0
moor_generator: ^3.4.1 moor_generator: ^3.4.1