[StreamChatPersistence] Add initial implementation

Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
Sahil Kumar
2021-01-25 19:14:55 +05:30
parent 1021814a75
commit 657b58af8b
47 changed files with 1878 additions and 1 deletions
@@ -0,0 +1,61 @@
import 'package:stream_chat/stream_chat.dart';
import 'user_mapper.dart';
import 'package:stream_chat_persistence/src/db/moor_chat_database.dart';
///
extension ChannelEntityX on ChannelEntity {
///
ChannelModel toChannelModel({User createdBy}) {
final config = ChannelConfig.fromJson(this.config ?? {});
return ChannelModel(
id: id,
config: config,
type: type,
frozen: frozen,
createdAt: createdAt,
updatedAt: updatedAt,
memberCount: memberCount,
cid: cid,
lastMessageAt: lastMessageAt,
deletedAt: deletedAt,
extraData: extraData,
createdBy: createdBy,
);
}
///
ChannelState toChannelState({
User createdBy,
List<Member> members,
List<Read> reads,
List<Message> messages,
}) {
return ChannelState(
members: members,
read: reads,
messages: messages,
channel: toChannelModel(createdBy: createdBy),
);
}
}
///
extension ChannelModelX on ChannelModel {
///
ChannelEntity toEntity() {
return ChannelEntity(
id: id,
type: type,
cid: cid,
config: config.toJson(),
frozen: frozen,
lastMessageAt: lastMessageAt,
createdAt: createdAt,
updatedAt: updatedAt,
deletedAt: deletedAt,
memberCount: memberCount,
createdById: createdBy.id,
extraData: extraData,
);
}
}
@@ -0,0 +1,15 @@
import 'package:stream_chat/stream_chat.dart';
import 'user_mapper.dart';
import 'package:stream_chat_persistence/src/db/moor_chat_database.dart';
///
extension ConnectionEventX on ConnectionEventEntity {
///
Event toEvent({User user}) {
return Event(
me: user,
totalUnreadCount: totalUnreadCount,
unreadChannels: unreadChannels,
);
}
}
@@ -0,0 +1,7 @@
export 'user_mapper.dart';
export 'reaction_mapper.dart';
export 'channel_mapper.dart';
export 'event_mapper.dart';
export 'member_mapper.dart';
export 'read_mapper.dart';
export 'message_mapper.dart';
@@ -0,0 +1,43 @@
import 'package:stream_chat/stream_chat.dart';
import 'package:stream_chat_persistence/src/db/moor_chat_database.dart';
import 'user_mapper.dart';
///
extension MemberEntityX on MemberEntity {
///
Member toMember({User user}) {
return Member(
user: user,
userId: userId,
banned: banned,
shadowBanned: shadowBanned,
updatedAt: updatedAt,
createdAt: createdAt,
role: role,
inviteAcceptedAt: inviteAcceptedAt,
invited: invited,
inviteRejectedAt: inviteRejectedAt,
isModerator: isModerator,
);
}
}
///
extension MemberX on Member {
///
MemberEntity toEntity({String cid}) {
return MemberEntity(
userId: user?.id,
banned: banned,
shadowBanned: shadowBanned,
channelCid: cid,
createdAt: createdAt,
isModerator: isModerator,
inviteRejectedAt: inviteRejectedAt,
invited: invited,
inviteAcceptedAt: inviteAcceptedAt,
role: role,
updatedAt: updatedAt,
);
}
}
@@ -0,0 +1,70 @@
import 'dart:convert';
import 'package:stream_chat/stream_chat.dart';
import 'package:stream_chat_persistence/src/db/moor_chat_database.dart';
///
extension MessageEntityX on MessageEntity {
///
Message toMessage({
User user,
List<Reaction> latestReactions,
List<Reaction> ownReactions,
Message quotedMessage,
}) {
return Message(
shadowed: shadowed,
latestReactions: latestReactions,
ownReactions: ownReactions,
attachments: attachments?.map((it) {
final json = jsonDecode(it);
return Attachment.fromJson(json);
})?.toList(),
createdAt: createdAt,
extraData: extraData,
updatedAt: updatedAt,
id: id,
type: type,
status: status,
command: command,
parentId: parentId,
quotedMessageId: quotedMessageId,
quotedMessage: quotedMessage,
reactionCounts: reactionCounts,
reactionScores: reactionScores,
replyCount: replyCount,
showInChannel: showInChannel,
text: messageText,
user: user,
deletedAt: deletedAt,
);
}
}
///
extension MessageX on Message {
///
MessageEntity toEntity({String cid}) {
return MessageEntity(
id: id,
attachments: attachments.map((it) => jsonEncode(it)).toList(),
channelCid: cid,
type: type,
parentId: parentId,
quotedMessageId: quotedMessageId,
command: command,
createdAt: createdAt,
shadowed: shadowed,
showInChannel: showInChannel,
replyCount: replyCount,
reactionScores: reactionScores,
reactionCounts: reactionCounts,
status: status,
updatedAt: updatedAt,
extraData: extraData,
userId: user?.id,
deletedAt: deletedAt,
messageText: text,
);
}
}
@@ -0,0 +1,33 @@
import 'package:stream_chat/stream_chat.dart';
import 'package:stream_chat_persistence/src/db/moor_chat_database.dart';
///
extension ReactionEntityX on ReactionEntity {
///
Reaction toReaction({User user}) {
return Reaction(
extraData: extraData,
type: type,
createdAt: createdAt,
userId: userId,
user: user,
messageId: messageId,
score: score,
);
}
}
///
extension ReactionX on Reaction {
///
ReactionEntity toEntity() {
return ReactionEntity(
extraData: extraData,
type: type,
createdAt: createdAt,
userId: userId,
messageId: messageId,
score: score,
);
}
}
@@ -0,0 +1,28 @@
import 'package:stream_chat/stream_chat.dart';
import 'package:stream_chat_persistence/src/db/moor_chat_database.dart';
import 'user_mapper.dart';
///
extension ReadEntityX on ReadEntity {
///
Read toRead({User user}) {
return Read(
user: user,
lastRead: lastRead,
unreadMessages: unreadMessages,
);
}
}
///
extension ReadX on Read {
///
ReadEntity toEntity({String cid}) {
return ReadEntity(
lastRead: lastRead,
userId: user?.id,
channelCid: cid,
unreadMessages: unreadMessages,
);
}
}
@@ -0,0 +1,36 @@
import 'package:stream_chat/stream_chat.dart';
import 'package:stream_chat_persistence/src/db/moor_chat_database.dart';
///
extension UserEntityX on UserEntity {
///
User toUser() {
return User(
id: id,
updatedAt: updatedAt,
role: role,
online: online,
lastActive: lastActive,
extraData: extraData,
banned: banned,
createdAt: createdAt,
);
}
}
///
extension UserX on User {
///
UserEntity toEntity() {
return UserEntity(
id: id,
role: role,
createdAt: createdAt,
updatedAt: updatedAt,
lastActive: lastActive,
online: online,
banned: banned,
extraData: extraData,
);
}
}