Получение и отправка текста, статусы сообщения

This commit is contained in:
Халимов Рустам
2026-05-15 14:59:54 +03:00
parent 4d4bc8edd1
commit a426b63b7d
22 changed files with 3777 additions and 358 deletions
@@ -194,9 +194,10 @@ class ChatRemoteDataSourceImpl implements ChatRemoteDataSource {
senderId: json['userId'] ?? (json['senderId'] ?? ''),
content: json['content'] ?? '',
messageType: json['type']?.toString().toLowerCase() ?? 'text',
sequenceId: int.tryParse(json['sequenceId']?.toString() ?? '0') ?? 0,
createdAt: _parseDateTime(json['createdAt']),
updatedAt: _parseDateTime(json['updatedAt']),
isRead: json['isRead'] ?? false,
status: (json['isRead'] ?? false) ? MessageStatus.read : MessageStatus.delivered,
media: json['media'] is Map<String, dynamic> ? json['media'] as Map<String, dynamic> : null,
);
}
@@ -62,7 +62,11 @@ class LastMessageModel {
late String id;
late String content;
late String messageType;
late int sequenceId;
DateTime? createdAt;
@Enumerated(EnumType.name)
MessageStatus status = MessageStatus.delivered;
Message toEntity() {
return Message(
@@ -71,7 +75,9 @@ class LastMessageModel {
senderId: '',
content: content,
messageType: messageType,
sequenceId: sequenceId,
createdAt: createdAt,
status: status,
);
}
@@ -80,7 +86,9 @@ class LastMessageModel {
..id = message.id
..content = message.content
..messageType = message.messageType
..createdAt = message.createdAt;
..sequenceId = message.sequenceId
..createdAt = message.createdAt
..status = message.status;
}
}
@@ -1663,6 +1663,17 @@ const LastMessageModelSchema = Schema(
id: 3,
name: r'messageType',
type: IsarType.string,
),
r'sequenceId': PropertySchema(
id: 4,
name: r'sequenceId',
type: IsarType.long,
),
r'status': PropertySchema(
id: 5,
name: r'status',
type: IsarType.string,
enumMap: _LastMessageModelstatusEnumValueMap,
)
},
estimateSize: _lastMessageModelEstimateSize,
@@ -1680,6 +1691,7 @@ int _lastMessageModelEstimateSize(
bytesCount += 3 + object.content.length * 3;
bytesCount += 3 + object.id.length * 3;
bytesCount += 3 + object.messageType.length * 3;
bytesCount += 3 + object.status.name.length * 3;
return bytesCount;
}
@@ -1693,6 +1705,8 @@ void _lastMessageModelSerialize(
writer.writeDateTime(offsets[1], object.createdAt);
writer.writeString(offsets[2], object.id);
writer.writeString(offsets[3], object.messageType);
writer.writeLong(offsets[4], object.sequenceId);
writer.writeString(offsets[5], object.status.name);
}
LastMessageModel _lastMessageModelDeserialize(
@@ -1706,6 +1720,10 @@ LastMessageModel _lastMessageModelDeserialize(
object.createdAt = reader.readDateTimeOrNull(offsets[1]);
object.id = reader.readString(offsets[2]);
object.messageType = reader.readString(offsets[3]);
object.sequenceId = reader.readLong(offsets[4]);
object.status = _LastMessageModelstatusValueEnumMap[
reader.readStringOrNull(offsets[5])] ??
MessageStatus.sending;
return object;
}
@@ -1724,11 +1742,30 @@ P _lastMessageModelDeserializeProp<P>(
return (reader.readString(offset)) as P;
case 3:
return (reader.readString(offset)) as P;
case 4:
return (reader.readLong(offset)) as P;
case 5:
return (_LastMessageModelstatusValueEnumMap[
reader.readStringOrNull(offset)] ??
MessageStatus.sending) as P;
default:
throw IsarError('Unknown property with id $propertyId');
}
}
const _LastMessageModelstatusEnumValueMap = {
r'sending': r'sending',
r'delivered': r'delivered',
r'read': r'read',
r'error': r'error',
};
const _LastMessageModelstatusValueEnumMap = {
r'sending': MessageStatus.sending,
r'delivered': MessageStatus.delivered,
r'read': MessageStatus.read,
r'error': MessageStatus.error,
};
extension LastMessageModelQueryFilter
on QueryBuilder<LastMessageModel, LastMessageModel, QFilterCondition> {
QueryBuilder<LastMessageModel, LastMessageModel, QAfterFilterCondition>
@@ -2212,6 +2249,198 @@ extension LastMessageModelQueryFilter
));
});
}
QueryBuilder<LastMessageModel, LastMessageModel, QAfterFilterCondition>
sequenceIdEqualTo(int value) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'sequenceId',
value: value,
));
});
}
QueryBuilder<LastMessageModel, LastMessageModel, QAfterFilterCondition>
sequenceIdGreaterThan(
int value, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
include: include,
property: r'sequenceId',
value: value,
));
});
}
QueryBuilder<LastMessageModel, LastMessageModel, QAfterFilterCondition>
sequenceIdLessThan(
int value, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.lessThan(
include: include,
property: r'sequenceId',
value: value,
));
});
}
QueryBuilder<LastMessageModel, LastMessageModel, QAfterFilterCondition>
sequenceIdBetween(
int lower,
int upper, {
bool includeLower = true,
bool includeUpper = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.between(
property: r'sequenceId',
lower: lower,
includeLower: includeLower,
upper: upper,
includeUpper: includeUpper,
));
});
}
QueryBuilder<LastMessageModel, LastMessageModel, QAfterFilterCondition>
statusEqualTo(
MessageStatus value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'status',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<LastMessageModel, LastMessageModel, QAfterFilterCondition>
statusGreaterThan(
MessageStatus value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
include: include,
property: r'status',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<LastMessageModel, LastMessageModel, QAfterFilterCondition>
statusLessThan(
MessageStatus value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.lessThan(
include: include,
property: r'status',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<LastMessageModel, LastMessageModel, QAfterFilterCondition>
statusBetween(
MessageStatus lower,
MessageStatus upper, {
bool includeLower = true,
bool includeUpper = true,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.between(
property: r'status',
lower: lower,
includeLower: includeLower,
upper: upper,
includeUpper: includeUpper,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<LastMessageModel, LastMessageModel, QAfterFilterCondition>
statusStartsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.startsWith(
property: r'status',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<LastMessageModel, LastMessageModel, QAfterFilterCondition>
statusEndsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.endsWith(
property: r'status',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<LastMessageModel, LastMessageModel, QAfterFilterCondition>
statusContains(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.contains(
property: r'status',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<LastMessageModel, LastMessageModel, QAfterFilterCondition>
statusMatches(String pattern, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.matches(
property: r'status',
wildcard: pattern,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<LastMessageModel, LastMessageModel, QAfterFilterCondition>
statusIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'status',
value: '',
));
});
}
QueryBuilder<LastMessageModel, LastMessageModel, QAfterFilterCondition>
statusIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
property: r'status',
value: '',
));
});
}
}
extension LastMessageModelQueryObject
@@ -16,12 +16,15 @@ class MessageModel {
late String senderId;
late String content;
late String messageType;
late int sequenceId;
@Index()
DateTime? createdAt;
DateTime? updatedAt;
bool isRead = false;
@Enumerated(EnumType.name)
MessageStatus status = MessageStatus.delivered;
// For simplicity, store media as a JSON string or ignore for now
String? mediaJson;
@@ -33,9 +36,10 @@ class MessageModel {
senderId: senderId,
content: content,
messageType: messageType,
sequenceId: sequenceId,
createdAt: createdAt,
updatedAt: updatedAt,
isRead: isRead,
status: status,
);
}
@@ -46,8 +50,9 @@ class MessageModel {
..senderId = message.senderId
..content = message.content
..messageType = message.messageType
..sequenceId = message.sequenceId
..createdAt = message.createdAt
..updatedAt = message.updatedAt
..isRead = message.isRead ?? false;
..status = message.status;
}
}
@@ -37,28 +37,34 @@ const MessageModelSchema = CollectionSchema(
name: r'id',
type: IsarType.string,
),
r'isRead': PropertySchema(
id: 4,
name: r'isRead',
type: IsarType.bool,
),
r'mediaJson': PropertySchema(
id: 5,
id: 4,
name: r'mediaJson',
type: IsarType.string,
),
r'messageType': PropertySchema(
id: 6,
id: 5,
name: r'messageType',
type: IsarType.string,
),
r'senderId': PropertySchema(
id: 7,
id: 6,
name: r'senderId',
type: IsarType.string,
),
r'updatedAt': PropertySchema(
r'sequenceId': PropertySchema(
id: 7,
name: r'sequenceId',
type: IsarType.long,
),
r'status': PropertySchema(
id: 8,
name: r'status',
type: IsarType.string,
enumMap: _MessageModelstatusEnumValueMap,
),
r'updatedAt': PropertySchema(
id: 9,
name: r'updatedAt',
type: IsarType.dateTime,
)
@@ -134,6 +140,7 @@ int _messageModelEstimateSize(
}
bytesCount += 3 + object.messageType.length * 3;
bytesCount += 3 + object.senderId.length * 3;
bytesCount += 3 + object.status.name.length * 3;
return bytesCount;
}
@@ -147,11 +154,12 @@ void _messageModelSerialize(
writer.writeString(offsets[1], object.content);
writer.writeDateTime(offsets[2], object.createdAt);
writer.writeString(offsets[3], object.id);
writer.writeBool(offsets[4], object.isRead);
writer.writeString(offsets[5], object.mediaJson);
writer.writeString(offsets[6], object.messageType);
writer.writeString(offsets[7], object.senderId);
writer.writeDateTime(offsets[8], object.updatedAt);
writer.writeString(offsets[4], object.mediaJson);
writer.writeString(offsets[5], object.messageType);
writer.writeString(offsets[6], object.senderId);
writer.writeLong(offsets[7], object.sequenceId);
writer.writeString(offsets[8], object.status.name);
writer.writeDateTime(offsets[9], object.updatedAt);
}
MessageModel _messageModelDeserialize(
@@ -165,12 +173,15 @@ MessageModel _messageModelDeserialize(
object.content = reader.readString(offsets[1]);
object.createdAt = reader.readDateTimeOrNull(offsets[2]);
object.id = reader.readString(offsets[3]);
object.isRead = reader.readBool(offsets[4]);
object.isarId = id;
object.mediaJson = reader.readStringOrNull(offsets[5]);
object.messageType = reader.readString(offsets[6]);
object.senderId = reader.readString(offsets[7]);
object.updatedAt = reader.readDateTimeOrNull(offsets[8]);
object.mediaJson = reader.readStringOrNull(offsets[4]);
object.messageType = reader.readString(offsets[5]);
object.senderId = reader.readString(offsets[6]);
object.sequenceId = reader.readLong(offsets[7]);
object.status =
_MessageModelstatusValueEnumMap[reader.readStringOrNull(offsets[8])] ??
MessageStatus.sending;
object.updatedAt = reader.readDateTimeOrNull(offsets[9]);
return object;
}
@@ -190,20 +201,37 @@ P _messageModelDeserializeProp<P>(
case 3:
return (reader.readString(offset)) as P;
case 4:
return (reader.readBool(offset)) as P;
case 5:
return (reader.readStringOrNull(offset)) as P;
case 5:
return (reader.readString(offset)) as P;
case 6:
return (reader.readString(offset)) as P;
case 7:
return (reader.readString(offset)) as P;
return (reader.readLong(offset)) as P;
case 8:
return (_MessageModelstatusValueEnumMap[
reader.readStringOrNull(offset)] ??
MessageStatus.sending) as P;
case 9:
return (reader.readDateTimeOrNull(offset)) as P;
default:
throw IsarError('Unknown property with id $propertyId');
}
}
const _MessageModelstatusEnumValueMap = {
r'sending': r'sending',
r'delivered': r'delivered',
r'read': r'read',
r'error': r'error',
};
const _MessageModelstatusValueEnumMap = {
r'sending': MessageStatus.sending,
r'delivered': MessageStatus.delivered,
r'read': MessageStatus.read,
r'error': MessageStatus.error,
};
Id _messageModelGetId(MessageModel object) {
return object.isarId;
}
@@ -1041,16 +1069,6 @@ extension MessageModelQueryFilter
});
}
QueryBuilder<MessageModel, MessageModel, QAfterFilterCondition> isReadEqualTo(
bool value) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'isRead',
value: value,
));
});
}
QueryBuilder<MessageModel, MessageModel, QAfterFilterCondition> isarIdEqualTo(
Id value) {
return QueryBuilder.apply(this, (query) {
@@ -1532,6 +1550,197 @@ extension MessageModelQueryFilter
});
}
QueryBuilder<MessageModel, MessageModel, QAfterFilterCondition>
sequenceIdEqualTo(int value) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'sequenceId',
value: value,
));
});
}
QueryBuilder<MessageModel, MessageModel, QAfterFilterCondition>
sequenceIdGreaterThan(
int value, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
include: include,
property: r'sequenceId',
value: value,
));
});
}
QueryBuilder<MessageModel, MessageModel, QAfterFilterCondition>
sequenceIdLessThan(
int value, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.lessThan(
include: include,
property: r'sequenceId',
value: value,
));
});
}
QueryBuilder<MessageModel, MessageModel, QAfterFilterCondition>
sequenceIdBetween(
int lower,
int upper, {
bool includeLower = true,
bool includeUpper = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.between(
property: r'sequenceId',
lower: lower,
includeLower: includeLower,
upper: upper,
includeUpper: includeUpper,
));
});
}
QueryBuilder<MessageModel, MessageModel, QAfterFilterCondition> statusEqualTo(
MessageStatus value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'status',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<MessageModel, MessageModel, QAfterFilterCondition>
statusGreaterThan(
MessageStatus value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
include: include,
property: r'status',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<MessageModel, MessageModel, QAfterFilterCondition>
statusLessThan(
MessageStatus value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.lessThan(
include: include,
property: r'status',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<MessageModel, MessageModel, QAfterFilterCondition> statusBetween(
MessageStatus lower,
MessageStatus upper, {
bool includeLower = true,
bool includeUpper = true,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.between(
property: r'status',
lower: lower,
includeLower: includeLower,
upper: upper,
includeUpper: includeUpper,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<MessageModel, MessageModel, QAfterFilterCondition>
statusStartsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.startsWith(
property: r'status',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<MessageModel, MessageModel, QAfterFilterCondition>
statusEndsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.endsWith(
property: r'status',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<MessageModel, MessageModel, QAfterFilterCondition>
statusContains(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.contains(
property: r'status',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<MessageModel, MessageModel, QAfterFilterCondition> statusMatches(
String pattern,
{bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.matches(
property: r'status',
wildcard: pattern,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<MessageModel, MessageModel, QAfterFilterCondition>
statusIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'status',
value: '',
));
});
}
QueryBuilder<MessageModel, MessageModel, QAfterFilterCondition>
statusIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
property: r'status',
value: '',
));
});
}
QueryBuilder<MessageModel, MessageModel, QAfterFilterCondition>
updatedAtIsNull() {
return QueryBuilder.apply(this, (query) {
@@ -1663,18 +1872,6 @@ extension MessageModelQuerySortBy
});
}
QueryBuilder<MessageModel, MessageModel, QAfterSortBy> sortByIsRead() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'isRead', Sort.asc);
});
}
QueryBuilder<MessageModel, MessageModel, QAfterSortBy> sortByIsReadDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'isRead', Sort.desc);
});
}
QueryBuilder<MessageModel, MessageModel, QAfterSortBy> sortByMediaJson() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'mediaJson', Sort.asc);
@@ -1712,6 +1909,31 @@ extension MessageModelQuerySortBy
});
}
QueryBuilder<MessageModel, MessageModel, QAfterSortBy> sortBySequenceId() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'sequenceId', Sort.asc);
});
}
QueryBuilder<MessageModel, MessageModel, QAfterSortBy>
sortBySequenceIdDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'sequenceId', Sort.desc);
});
}
QueryBuilder<MessageModel, MessageModel, QAfterSortBy> sortByStatus() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'status', Sort.asc);
});
}
QueryBuilder<MessageModel, MessageModel, QAfterSortBy> sortByStatusDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'status', Sort.desc);
});
}
QueryBuilder<MessageModel, MessageModel, QAfterSortBy> sortByUpdatedAt() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'updatedAt', Sort.asc);
@@ -1775,18 +1997,6 @@ extension MessageModelQuerySortThenBy
});
}
QueryBuilder<MessageModel, MessageModel, QAfterSortBy> thenByIsRead() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'isRead', Sort.asc);
});
}
QueryBuilder<MessageModel, MessageModel, QAfterSortBy> thenByIsReadDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'isRead', Sort.desc);
});
}
QueryBuilder<MessageModel, MessageModel, QAfterSortBy> thenByIsarId() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'isarId', Sort.asc);
@@ -1836,6 +2046,31 @@ extension MessageModelQuerySortThenBy
});
}
QueryBuilder<MessageModel, MessageModel, QAfterSortBy> thenBySequenceId() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'sequenceId', Sort.asc);
});
}
QueryBuilder<MessageModel, MessageModel, QAfterSortBy>
thenBySequenceIdDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'sequenceId', Sort.desc);
});
}
QueryBuilder<MessageModel, MessageModel, QAfterSortBy> thenByStatus() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'status', Sort.asc);
});
}
QueryBuilder<MessageModel, MessageModel, QAfterSortBy> thenByStatusDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'status', Sort.desc);
});
}
QueryBuilder<MessageModel, MessageModel, QAfterSortBy> thenByUpdatedAt() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'updatedAt', Sort.asc);
@@ -1878,12 +2113,6 @@ extension MessageModelQueryWhereDistinct
});
}
QueryBuilder<MessageModel, MessageModel, QDistinct> distinctByIsRead() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'isRead');
});
}
QueryBuilder<MessageModel, MessageModel, QDistinct> distinctByMediaJson(
{bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
@@ -1905,6 +2134,19 @@ extension MessageModelQueryWhereDistinct
});
}
QueryBuilder<MessageModel, MessageModel, QDistinct> distinctBySequenceId() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'sequenceId');
});
}
QueryBuilder<MessageModel, MessageModel, QDistinct> distinctByStatus(
{bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'status', caseSensitive: caseSensitive);
});
}
QueryBuilder<MessageModel, MessageModel, QDistinct> distinctByUpdatedAt() {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'updatedAt');
@@ -1944,12 +2186,6 @@ extension MessageModelQueryProperty
});
}
QueryBuilder<MessageModel, bool, QQueryOperations> isReadProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'isRead');
});
}
QueryBuilder<MessageModel, String?, QQueryOperations> mediaJsonProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'mediaJson');
@@ -1968,6 +2204,18 @@ extension MessageModelQueryProperty
});
}
QueryBuilder<MessageModel, int, QQueryOperations> sequenceIdProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'sequenceId');
});
}
QueryBuilder<MessageModel, MessageStatus, QQueryOperations> statusProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'status');
});
}
QueryBuilder<MessageModel, DateTime?, QQueryOperations> updatedAtProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'updatedAt');
@@ -24,9 +24,19 @@ class ChatRepositoryImpl implements ChatRepository {
@override
Stream<Map<String, dynamic>> get typingStream => signalRService.typingUpdates;
@override
Stream<Map<String, dynamic>> get statusStream => signalRService.statusUpdates;
@override
Stream<Map<String, dynamic>> get readReceiptStream => signalRService.readReceipts;
@override
Future<void> sendTypingStatus(String chatId, bool isTyping) => signalRService.sendTypingStatus(chatId, isTyping);
@override
Future<void> markAsRead(String chatId, String lastReadMessageId, int lastReadSequenceId) =>
signalRService.markMessagesAsRead(chatId, lastReadMessageId, lastReadSequenceId);
@override
Future<void> initSignalR() => signalRService.init();