[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,14 @@
import 'package:moor/moor.dart';
@DataClassName('ChannelQueryEntity')
class ChannelQueries extends Table {
TextColumn get queryHash => text()();
TextColumn get channelCid => text()();
@override
Set<Column> get primaryKey => {
queryHash,
channelCid,
};
}
@@ -0,0 +1,32 @@
import 'package:moor/moor.dart';
import 'package:stream_chat_persistence/src/converter/map_converter.dart';
@DataClassName('ChannelEntity')
class Channels extends Table {
TextColumn get id => text()();
TextColumn get type => text()();
TextColumn get cid => text()();
TextColumn get config => text().map(MapConverter<Object>())();
BoolColumn get frozen => boolean().withDefault(Constant(false))();
DateTimeColumn get lastMessageAt => dateTime().nullable()();
DateTimeColumn get createdAt => dateTime().nullable()();
DateTimeColumn get updatedAt => dateTime().nullable()();
DateTimeColumn get deletedAt => dateTime().nullable()();
IntColumn get memberCount => integer().nullable()();
TextColumn get createdById => text().nullable()();
TextColumn get extraData => text().nullable().map(MapConverter<Object>())();
@override
Set<Column> get primaryKey => {cid};
}
@@ -0,0 +1,19 @@
import 'package:moor/moor.dart';
@DataClassName('ConnectionEventEntity')
class ConnectionEvents extends Table {
IntColumn get id => integer()();
TextColumn get ownUserId => text().nullable()();
IntColumn get totalUnreadCount => integer().nullable()();
IntColumn get unreadChannels => integer().nullable()();
DateTimeColumn get lastEventAt => dateTime().nullable()();
DateTimeColumn get lastSyncAt => dateTime().nullable()();
@override
Set<Column> get primaryKey => {id};
}
@@ -0,0 +1,8 @@
export 'channels.dart';
export 'messages.dart';
export 'reactions.dart';
export 'users.dart';
export 'members.dart';
export 'reads.dart';
export 'channel_queries.dart';
export 'connection_events.dart';
@@ -0,0 +1,33 @@
import 'package:moor/moor.dart';
@DataClassName('MemberEntity')
class Members extends Table {
TextColumn get userId => text()();
TextColumn get channelCid =>
text().customConstraint('REFERENCES channels(cid) ON DELETE CASCADE')();
TextColumn get role => text().nullable()();
DateTimeColumn get inviteAcceptedAt => dateTime().nullable()();
DateTimeColumn get inviteRejectedAt => dateTime().nullable()();
BoolColumn get invited => boolean().nullable()();
BoolColumn get banned => boolean().nullable()();
BoolColumn get shadowBanned => boolean().nullable()();
BoolColumn get isModerator => boolean().nullable()();
DateTimeColumn get createdAt => dateTime()();
DateTimeColumn get updatedAt => dateTime().nullable()();
@override
Set<Column> get primaryKey => {
userId,
channelCid,
};
}
@@ -0,0 +1,54 @@
import 'package:moor/moor.dart';
import 'package:stream_chat_persistence/src/converter/list_converter.dart';
import 'package:stream_chat_persistence/src/converter/map_converter.dart';
import 'package:stream_chat_persistence/src/converter/message_sending_status_converter.dart';
@DataClassName('MessageEntity')
class Messages extends Table {
TextColumn get id => text()();
TextColumn get messageText => text().nullable()();
TextColumn get attachments =>
text().nullable().map(ListConverter<String>())();
IntColumn get status =>
integer().nullable().map(MessageSendingStatusConverter())();
TextColumn get type => text().nullable()();
TextColumn get mentionedUsers =>
text().nullable().map(ListConverter<String>())();
TextColumn get reactionCounts => text().nullable().map(MapConverter<int>())();
TextColumn get reactionScores => text().nullable().map(MapConverter<int>())();
TextColumn get parentId => text().nullable()();
TextColumn get quotedMessageId => text().nullable()();
IntColumn get replyCount => integer().nullable()();
BoolColumn get showInChannel => boolean().nullable()();
BoolColumn get shadowed => boolean().nullable()();
TextColumn get command => text().nullable()();
DateTimeColumn get createdAt => dateTime()();
DateTimeColumn get updatedAt => dateTime().nullable()();
DateTimeColumn get deletedAt => dateTime().nullable()();
TextColumn get userId => text().nullable()();
TextColumn get channelCid => text().nullable().customConstraint(
'NULLABLE REFERENCES channels(cid) ON DELETE CASCADE')();
TextColumn get extraData => text().nullable().map(MapConverter<Object>())();
@override
Set<Column> get primaryKey => {id};
}
@@ -0,0 +1,25 @@
import 'package:moor/moor.dart';
import 'package:stream_chat_persistence/src/converter/map_converter.dart';
@DataClassName('ReactionEntity')
class Reactions extends Table {
TextColumn get userId => text()();
TextColumn get messageId =>
text().customConstraint('REFERENCES messages(id) ON DELETE CASCADE')();
TextColumn get type => text()();
DateTimeColumn get createdAt => dateTime()();
IntColumn get score => integer().nullable()();
TextColumn get extraData => text().nullable().map(MapConverter<Object>())();
@override
Set<Column> get primaryKey => {
messageId,
type,
userId,
};
}
@@ -0,0 +1,19 @@
import 'package:moor/moor.dart';
@DataClassName('ReadEntity')
class Reads extends Table {
DateTimeColumn get lastRead => dateTime()();
TextColumn get userId => text()();
TextColumn get channelCid =>
text().customConstraint('REFERENCES channels(cid) ON DELETE CASCADE')();
IntColumn get unreadMessages => integer().nullable()();
@override
Set<Column> get primaryKey => {
userId,
channelCid,
};
}
@@ -0,0 +1,24 @@
import 'package:moor/moor.dart';
import 'package:stream_chat_persistence/src/converter/map_converter.dart';
@DataClassName('UserEntity')
class Users extends Table {
TextColumn get id => text()();
TextColumn get role => text().nullable()();
DateTimeColumn get createdAt => dateTime().nullable()();
DateTimeColumn get updatedAt => dateTime().nullable()();
DateTimeColumn get lastActive => dateTime().nullable()();
BoolColumn get online => boolean().nullable()();
BoolColumn get banned => boolean().nullable()();
TextColumn get extraData => text().nullable().map(MapConverter<Object>())();
@override
Set<Column> get primaryKey => {id};
}