[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
Future<Event> 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<MoorChatDatabase>
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,
@@ -97,9 +97,7 @@ class MessageDao extends DatabaseAccessor<MoorChatDatabase>
///
Future<List<Message>> 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<MoorChatDatabase>
.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<int> updateMessages(String cid, List<Message> messageList) {
Future<void> updateMessages(String cid, List<Message> messageList) {
return batch((batch) {
batch.insertAll(
messages,
@@ -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';
@@ -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<Object>())();
IntColumn get totalUnreadCount => integer().nullable()();
@@ -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,
);
@@ -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<void> deleteChannelByCids(List<String> cids) {
Future<void> deleteChannels(List<String> cids) {
return _db.channelDao.deleteChannelByCids(cids);
}
@@ -105,15 +105,11 @@ class StreamChatDatabaseImpl implements StreamChatDatabase {
@override
Future<List<Message>> 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,
);
}
@@ -1,3 +1,3 @@
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:
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