[Persistence] Delete members, read data before adding new one
Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
@@ -129,6 +129,12 @@ abstract class ChatPersistenceClient {
|
|||||||
///
|
///
|
||||||
Future<void> updateReactions(List<Reaction> reactions);
|
Future<void> updateReactions(List<Reaction> reactions);
|
||||||
|
|
||||||
|
///
|
||||||
|
Future<void> deleteReactionsByMessageId(List<String> messageIds);
|
||||||
|
|
||||||
|
///
|
||||||
|
Future<void> deleteMembersByCids(List<String> cids);
|
||||||
|
|
||||||
///
|
///
|
||||||
Future<void> updateChannelState(ChannelState channelState) {
|
Future<void> updateChannelState(ChannelState channelState) {
|
||||||
return updateChannelStates([channelState]);
|
return updateChannelStates([channelState]);
|
||||||
@@ -181,13 +187,26 @@ abstract class ChatPersistenceClient {
|
|||||||
return updateMembers(cid, members.toList(growable: false));
|
return updateMembers(cid, members.toList(growable: false));
|
||||||
}).toList(growable: false);
|
}).toList(growable: false);
|
||||||
|
|
||||||
|
final deleteReactions = deleteReactionsByMessageId(channelStates
|
||||||
|
.expand((it) => it.messages)
|
||||||
|
.map((m) => m.id)
|
||||||
|
.toList(growable: false));
|
||||||
|
|
||||||
|
final deleteMembers = deleteMembersByCids(
|
||||||
|
channelStates.map((it) => it.channel.cid).toList(growable: false),
|
||||||
|
);
|
||||||
|
|
||||||
|
await Future.wait([
|
||||||
|
deleteReactions,
|
||||||
|
deleteMembers,
|
||||||
|
]);
|
||||||
await Future.wait([
|
await Future.wait([
|
||||||
...updateMessagesFuture,
|
...updateMessagesFuture,
|
||||||
...updateReadsFuture,
|
...updateReadsFuture,
|
||||||
...updateMembersFuture,
|
...updateMembersFuture,
|
||||||
|
updateUsers(users.toList(growable: false)),
|
||||||
updateChannels(channels.toList(growable: false)),
|
updateChannels(channels.toList(growable: false)),
|
||||||
updateReactions(reactions.toList(growable: false)),
|
updateReactions(reactions.toList(growable: false)),
|
||||||
updateUsers(users.toList(growable: false)),
|
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ class MemberDao extends DatabaseAccessor<MoorChatDatabase>
|
|||||||
/// Creates a new member dao instance
|
/// Creates a new member dao instance
|
||||||
MemberDao(MoorChatDatabase db) : super(db);
|
MemberDao(MoorChatDatabase db) : super(db);
|
||||||
|
|
||||||
/// Get all members where [members.channelCid] matches [cid]
|
/// Get all members where [Members.channelCid] matches [cid]
|
||||||
Future<List<Member>> getMembersByCid(String cid) async {
|
Future<List<Member>> getMembersByCid(String cid) async {
|
||||||
return (select(members).join([
|
return (select(members).join([
|
||||||
leftOuterJoin(users, members.userId.equalsExp(users.id)),
|
leftOuterJoin(users, members.userId.equalsExp(users.id)),
|
||||||
@@ -40,4 +40,14 @@ class MemberDao extends DatabaseAccessor<MoorChatDatabase>
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Deletes all the members whose [Members.channelCid] is present in [cids]
|
||||||
|
Future<void> deleteMemberByCids(List<String> cids) async {
|
||||||
|
return batch((it) {
|
||||||
|
it.deleteWhere<Members, MemberEntity>(
|
||||||
|
members,
|
||||||
|
(m) => m.channelCid.isIn(cids),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ class MessageDao extends DatabaseAccessor<MoorChatDatabase>
|
|||||||
|
|
||||||
final MoorChatDatabase _db;
|
final MoorChatDatabase _db;
|
||||||
|
|
||||||
/// Removes all the messages by matching [messages.id] in [messageIds]
|
/// Removes all the messages by matching [Messages.id] in [messageIds]
|
||||||
///
|
///
|
||||||
/// This will automatically delete the following linked records
|
/// This will automatically delete the following linked records
|
||||||
/// 1. Message Reactions
|
/// 1. Message Reactions
|
||||||
@@ -24,7 +24,7 @@ class MessageDao extends DatabaseAccessor<MoorChatDatabase>
|
|||||||
return (delete(messages)..where((tbl) => tbl.id.isIn(messageIds))).go();
|
return (delete(messages)..where((tbl) => tbl.id.isIn(messageIds))).go();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Removes all the messages by matching [messages.channelCid] in [cids]
|
/// Removes all the messages by matching [Messages.channelCid] in [cids]
|
||||||
///
|
///
|
||||||
/// This will automatically delete the following linked records
|
/// This will automatically delete the following linked records
|
||||||
/// 1. Message Reactions
|
/// 1. Message Reactions
|
||||||
@@ -52,7 +52,7 @@ class MessageDao extends DatabaseAccessor<MoorChatDatabase>
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns a single message by matching the [messages.id] with [id]
|
/// Returns a single message by matching the [Messages.id] with [id]
|
||||||
Future<Message> getMessageById(String id) async {
|
Future<Message> getMessageById(String id) async {
|
||||||
return await (select(messages).join([
|
return await (select(messages).join([
|
||||||
leftOuterJoin(users, messages.userId.equalsExp(users.id)),
|
leftOuterJoin(users, messages.userId.equalsExp(users.id)),
|
||||||
@@ -63,7 +63,7 @@ class MessageDao extends DatabaseAccessor<MoorChatDatabase>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Returns all the messages of a particular thread by matching
|
/// Returns all the messages of a particular thread by matching
|
||||||
/// [messages.channelCid] with [cid]
|
/// [Messages.channelCid] with [cid]
|
||||||
Future<List<Message>> getThreadMessages(String cid) async {
|
Future<List<Message>> getThreadMessages(String cid) async {
|
||||||
return Future.wait(await (select(messages).join([
|
return Future.wait(await (select(messages).join([
|
||||||
leftOuterJoin(users, messages.userId.equalsExp(users.id)),
|
leftOuterJoin(users, messages.userId.equalsExp(users.id)),
|
||||||
@@ -76,7 +76,7 @@ class MessageDao extends DatabaseAccessor<MoorChatDatabase>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Returns all the messages of a particular thread by matching
|
/// Returns all the messages of a particular thread by matching
|
||||||
/// [messages.parentId] with [parentId]
|
/// [Messages.parentId] with [parentId]
|
||||||
Future<List<Message>> getThreadMessagesByParentId(
|
Future<List<Message>> getThreadMessagesByParentId(
|
||||||
String parentId, {
|
String parentId, {
|
||||||
PaginationParams options,
|
PaginationParams options,
|
||||||
@@ -97,7 +97,7 @@ class MessageDao extends DatabaseAccessor<MoorChatDatabase>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Returns all the messages of a channel by matching
|
/// Returns all the messages of a channel by matching
|
||||||
/// [messages.channelCid] with [parentId]
|
/// [Messages.channelCid] with [parentId]
|
||||||
Future<List<Message>> getMessagesByCid(
|
Future<List<Message>> getMessagesByCid(
|
||||||
String cid, {
|
String cid, {
|
||||||
PaginationParams messagePagination,
|
PaginationParams messagePagination,
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ class ReactionDao extends DatabaseAccessor<MoorChatDatabase>
|
|||||||
ReactionDao(MoorChatDatabase db) : super(db);
|
ReactionDao(MoorChatDatabase db) : super(db);
|
||||||
|
|
||||||
/// Returns all the reactions of a particular message by matching
|
/// Returns all the reactions of a particular message by matching
|
||||||
/// [reactions.messageId] with [messageId]
|
/// [Reactions.messageId] with [messageId]
|
||||||
Future<List<Reaction>> getReactions(String messageId) {
|
Future<List<Reaction>> getReactions(String messageId) {
|
||||||
return (select(reactions).join([
|
return (select(reactions).join([
|
||||||
leftOuterJoin(users, reactions.userId.equalsExp(users.id)),
|
leftOuterJoin(users, reactions.userId.equalsExp(users.id)),
|
||||||
@@ -31,8 +31,8 @@ class ReactionDao extends DatabaseAccessor<MoorChatDatabase>
|
|||||||
|
|
||||||
/// Returns all the reactions of a particular message
|
/// Returns all the reactions of a particular message
|
||||||
/// added by a particular user by matching
|
/// added by a particular user by matching
|
||||||
/// [reactions.messageId] with [messageId] and
|
/// [Reactions.messageId] with [messageId] and
|
||||||
/// [reactions.userId] with [userId]
|
/// [Reactions.userId] with [userId]
|
||||||
Future<List<Reaction>> getReactionsByUserId(
|
Future<List<Reaction>> getReactionsByUserId(
|
||||||
String messageId,
|
String messageId,
|
||||||
String userId,
|
String userId,
|
||||||
@@ -51,4 +51,14 @@ class ReactionDao extends DatabaseAccessor<MoorChatDatabase>
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Deletes all the reactions whose [Reactions.messageId] is present in [messageIds]
|
||||||
|
Future<void> deleteReactionsByMessageIds(List<String> messageIds) {
|
||||||
|
return batch((it) {
|
||||||
|
it.deleteWhere<Reactions, ReactionEntity>(
|
||||||
|
reactions,
|
||||||
|
(r) => r.messageId.isIn(messageIds),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class ReadDao extends DatabaseAccessor<MoorChatDatabase> with _$ReadDaoMixin {
|
|||||||
/// Creates a new read dao instance
|
/// Creates a new read dao instance
|
||||||
ReadDao(MoorChatDatabase db) : super(db);
|
ReadDao(MoorChatDatabase db) : super(db);
|
||||||
|
|
||||||
/// Get all reads where [reads.channelCid] matches [cid]
|
/// Get all reads where [Reads.channelCid] matches [cid]
|
||||||
Future<List<Read>> getReadsByCid(String cid) async {
|
Future<List<Read>> getReadsByCid(String cid) async {
|
||||||
return (select(reads).join([
|
return (select(reads).join([
|
||||||
leftOuterJoin(users, reads.userId.equalsExp(users.id)),
|
leftOuterJoin(users, reads.userId.equalsExp(users.id)),
|
||||||
|
|||||||
@@ -193,6 +193,16 @@ class StreamChatPersistenceClient extends ChatPersistenceClient {
|
|||||||
return _db.userDao.updateUsers(users);
|
return _db.userDao.updateUsers(users);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> deleteReactionsByMessageId(List<String> messageIds) {
|
||||||
|
return _db.reactionDao.deleteReactionsByMessageIds(messageIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> deleteMembersByCids(List<String> cids) {
|
||||||
|
return _db.memberDao.deleteMemberByCids(cids);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> disconnect({bool flush = false}) async {
|
Future<void> disconnect({bool flush = false}) async {
|
||||||
if (_db != null) {
|
if (_db != null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user