Merge pull request #1568 from GetStream/fix/nullable-date

This commit is contained in:
Sahil Kumar
2023-05-24 18:15:25 +05:30
committed by GitHub
15 changed files with 86 additions and 79 deletions
+5
View File
@@ -1,5 +1,10 @@
## Upcoming
🐞 Fixed
- [[#1422]](https://github.com/GetStream/stream-chat-flutter/issues/1422) Fixed `User.createdAt` property using
currentTime when the ws connection is not established.
✅ Added
- Added support for `ChatPersistenceClient.isConnected` for checking if the client is connected to the database.
@@ -35,8 +35,8 @@ class User extends Equatable {
this.role,
String? name,
String? image,
DateTime? createdAt,
DateTime? updatedAt,
this.createdAt,
this.updatedAt,
this.lastActive,
Map<String, Object?> extraData = const {},
this.online = false,
@@ -44,8 +44,7 @@ class User extends Equatable {
this.banExpires,
this.teams = const [],
this.language,
}) : createdAt = createdAt ?? DateTime.now(),
updatedAt = updatedAt ?? DateTime.now(),
}) :
// For backwards compatibility, set 'name', 'image' in [extraData].
extraData = {
...extraData,
@@ -104,11 +103,11 @@ class User extends Equatable {
/// Date of user creation.
@JsonKey(includeToJson: false)
final DateTime createdAt;
final DateTime? createdAt;
/// Date of last user update.
@JsonKey(includeToJson: false)
final DateTime updatedAt;
final DateTime? updatedAt;
/// Date of last user connection.
@JsonKey(includeToJson: false)
@@ -198,8 +198,8 @@ void main() {
expect(user.banned, false);
expect(user.teams, []);
expect(user.lastActive, null);
expect(user.createdAt, isNotNull);
expect(user.updatedAt, isNotNull);
expect(user.createdAt, null);
expect(user.updatedAt, null);
});
test('default values, parse json', () {
@@ -214,8 +214,8 @@ void main() {
expect(user.banned, false);
expect(user.teams, []);
expect(user.lastActive, null);
expect(user.createdAt, isNotNull);
expect(user.updatedAt, isNotNull);
expect(user.createdAt, null);
expect(user.updatedAt, null);
});
});
}
@@ -1,6 +1,8 @@
## Upcoming
- Added support for `StreamChatPersistenceClient.isConnected` for checking if the client is connected to the database.
- [[#1422]](https://github.com/GetStream/stream-chat-flutter/issues/1422) Removed default values
from `UserEntity` `createdAt` and `updatedAt` fields.
## 6.1.0
@@ -49,7 +49,7 @@ class DriftChatDatabase extends _$DriftChatDatabase {
// you should bump this number whenever you change or add a table definition.
@override
int get schemaVersion => 10;
int get schemaVersion => 11;
@override
MigrationStrategy get migration => MigrationStrategy(
@@ -3651,18 +3651,14 @@ class $UsersTable extends Users with TableInfo<$UsersTable, UserEntity> {
const VerificationMeta('createdAt');
@override
late final GeneratedColumn<DateTime> createdAt = GeneratedColumn<DateTime>(
'created_at', aliasedName, false,
type: DriftSqlType.dateTime,
requiredDuringInsert: false,
defaultValue: currentDateAndTime);
'created_at', aliasedName, true,
type: DriftSqlType.dateTime, requiredDuringInsert: false);
static const VerificationMeta _updatedAtMeta =
const VerificationMeta('updatedAt');
@override
late final GeneratedColumn<DateTime> updatedAt = GeneratedColumn<DateTime>(
'updated_at', aliasedName, false,
type: DriftSqlType.dateTime,
requiredDuringInsert: false,
defaultValue: currentDateAndTime);
'updated_at', aliasedName, true,
type: DriftSqlType.dateTime, requiredDuringInsert: false);
static const VerificationMeta _lastActiveMeta =
const VerificationMeta('lastActive');
@override
@@ -3773,9 +3769,9 @@ class $UsersTable extends Users with TableInfo<$UsersTable, UserEntity> {
language: attachedDatabase.typeMapping
.read(DriftSqlType.string, data['${effectivePrefix}language']),
createdAt: attachedDatabase.typeMapping
.read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!,
.read(DriftSqlType.dateTime, data['${effectivePrefix}created_at']),
updatedAt: attachedDatabase.typeMapping
.read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!,
.read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at']),
lastActive: attachedDatabase.typeMapping
.read(DriftSqlType.dateTime, data['${effectivePrefix}last_active']),
online: attachedDatabase.typeMapping
@@ -3808,10 +3804,10 @@ class UserEntity extends DataClass implements Insertable<UserEntity> {
final String? language;
/// Date of user creation
final DateTime createdAt;
final DateTime? createdAt;
/// Date of last user update
final DateTime updatedAt;
final DateTime? updatedAt;
/// Date of last user connection
final DateTime? lastActive;
@@ -3828,8 +3824,8 @@ class UserEntity extends DataClass implements Insertable<UserEntity> {
{required this.id,
this.role,
this.language,
required this.createdAt,
required this.updatedAt,
this.createdAt,
this.updatedAt,
this.lastActive,
required this.online,
required this.banned,
@@ -3844,8 +3840,12 @@ class UserEntity extends DataClass implements Insertable<UserEntity> {
if (!nullToAbsent || language != null) {
map['language'] = Variable<String>(language);
}
map['created_at'] = Variable<DateTime>(createdAt);
map['updated_at'] = Variable<DateTime>(updatedAt);
if (!nullToAbsent || createdAt != null) {
map['created_at'] = Variable<DateTime>(createdAt);
}
if (!nullToAbsent || updatedAt != null) {
map['updated_at'] = Variable<DateTime>(updatedAt);
}
if (!nullToAbsent || lastActive != null) {
map['last_active'] = Variable<DateTime>(lastActive);
}
@@ -3865,8 +3865,8 @@ class UserEntity extends DataClass implements Insertable<UserEntity> {
id: serializer.fromJson<String>(json['id']),
role: serializer.fromJson<String?>(json['role']),
language: serializer.fromJson<String?>(json['language']),
createdAt: serializer.fromJson<DateTime>(json['createdAt']),
updatedAt: serializer.fromJson<DateTime>(json['updatedAt']),
createdAt: serializer.fromJson<DateTime?>(json['createdAt']),
updatedAt: serializer.fromJson<DateTime?>(json['updatedAt']),
lastActive: serializer.fromJson<DateTime?>(json['lastActive']),
online: serializer.fromJson<bool>(json['online']),
banned: serializer.fromJson<bool>(json['banned']),
@@ -3880,8 +3880,8 @@ class UserEntity extends DataClass implements Insertable<UserEntity> {
'id': serializer.toJson<String>(id),
'role': serializer.toJson<String?>(role),
'language': serializer.toJson<String?>(language),
'createdAt': serializer.toJson<DateTime>(createdAt),
'updatedAt': serializer.toJson<DateTime>(updatedAt),
'createdAt': serializer.toJson<DateTime?>(createdAt),
'updatedAt': serializer.toJson<DateTime?>(updatedAt),
'lastActive': serializer.toJson<DateTime?>(lastActive),
'online': serializer.toJson<bool>(online),
'banned': serializer.toJson<bool>(banned),
@@ -3893,8 +3893,8 @@ class UserEntity extends DataClass implements Insertable<UserEntity> {
{String? id,
Value<String?> role = const Value.absent(),
Value<String?> language = const Value.absent(),
DateTime? createdAt,
DateTime? updatedAt,
Value<DateTime?> createdAt = const Value.absent(),
Value<DateTime?> updatedAt = const Value.absent(),
Value<DateTime?> lastActive = const Value.absent(),
bool? online,
bool? banned,
@@ -3903,8 +3903,8 @@ class UserEntity extends DataClass implements Insertable<UserEntity> {
id: id ?? this.id,
role: role.present ? role.value : this.role,
language: language.present ? language.value : this.language,
createdAt: createdAt ?? this.createdAt,
updatedAt: updatedAt ?? this.updatedAt,
createdAt: createdAt.present ? createdAt.value : this.createdAt,
updatedAt: updatedAt.present ? updatedAt.value : this.updatedAt,
lastActive: lastActive.present ? lastActive.value : this.lastActive,
online: online ?? this.online,
banned: banned ?? this.banned,
@@ -3948,8 +3948,8 @@ class UsersCompanion extends UpdateCompanion<UserEntity> {
final Value<String> id;
final Value<String?> role;
final Value<String?> language;
final Value<DateTime> createdAt;
final Value<DateTime> updatedAt;
final Value<DateTime?> createdAt;
final Value<DateTime?> updatedAt;
final Value<DateTime?> lastActive;
final Value<bool> online;
final Value<bool> banned;
@@ -4010,8 +4010,8 @@ class UsersCompanion extends UpdateCompanion<UserEntity> {
{Value<String>? id,
Value<String?>? role,
Value<String?>? language,
Value<DateTime>? createdAt,
Value<DateTime>? updatedAt,
Value<DateTime?>? createdAt,
Value<DateTime?>? updatedAt,
Value<DateTime?>? lastActive,
Value<bool>? online,
Value<bool>? banned,
@@ -15,10 +15,10 @@ class Users extends Table {
TextColumn get language => text().nullable()();
/// Date of user creation
DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)();
DateTimeColumn get createdAt => dateTime().nullable()();
/// Date of last user update
DateTimeColumn get updatedAt => dateTime().withDefault(currentDateAndTime)();
DateTimeColumn get updatedAt => dateTime().nullable()();
/// Date of last user connection
DateTimeColumn get lastActive => dateTime().nullable()();
@@ -132,7 +132,7 @@ void main() {
// Should match lastMessageAt date
expect(
updatedChannel.lastMessageAt,
isSameDateAs(insertedChannel.lastMessageAt!),
isSameDateAs(insertedChannel.lastMessageAt),
);
}
});
@@ -177,7 +177,7 @@ void main() {
// Should match lastMessageAt date
expect(
updatedChannel.lastMessageAt,
isSameDateAs(insertedChannel.lastMessageAt!),
isSameDateAs(insertedChannel.lastMessageAt),
);
}
});
@@ -220,7 +220,7 @@ void main() {
// Should match lastMessageAt date
expect(
updatedChannel.lastMessageAt,
isSameDateAs(insertedChannel.lastMessageAt!),
isSameDateAs(insertedChannel.lastMessageAt),
);
}
});
@@ -66,7 +66,7 @@ void main() {
expect(fetchedMember.updatedAt, isSameDateAs(member.updatedAt));
expect(
fetchedMember.inviteAcceptedAt,
isSameDateAs(member.inviteAcceptedAt!),
isSameDateAs(member.inviteAcceptedAt),
);
}
});
@@ -93,7 +93,7 @@ void main() {
expect(fetchedMember.updatedAt, isSameDateAs(member.updatedAt));
expect(
fetchedMember.inviteAcceptedAt,
isSameDateAs(member.inviteAcceptedAt!),
isSameDateAs(member.inviteAcceptedAt),
);
}
@@ -37,8 +37,8 @@ void main() {
expect(channelModel.updatedAt, isSameDateAs(entity.updatedAt));
expect(channelModel.memberCount, entity.memberCount);
expect(channelModel.cid, entity.cid);
expect(channelModel.lastMessageAt, isSameDateAs(entity.lastMessageAt!));
expect(channelModel.deletedAt, isSameDateAs(entity.deletedAt!));
expect(channelModel.lastMessageAt, isSameDateAs(entity.lastMessageAt));
expect(channelModel.deletedAt, isSameDateAs(entity.deletedAt));
expect(channelModel.extraData, entity.extraData);
expect(channelModel.createdBy!.id, entity.createdById);
});
@@ -77,8 +77,8 @@ void main() {
expect(channelModel.updatedAt, isSameDateAs(entity.updatedAt));
expect(channelModel.memberCount, entity.memberCount);
expect(channelModel.cid, entity.cid);
expect(channelModel.lastMessageAt, isSameDateAs(entity.lastMessageAt!));
expect(channelModel.deletedAt, isSameDateAs(entity.deletedAt!));
expect(channelModel.lastMessageAt, isSameDateAs(entity.lastMessageAt));
expect(channelModel.deletedAt, isSameDateAs(entity.deletedAt));
expect(channelModel.extraData, entity.extraData);
expect(channelModel.createdBy!.id, entity.createdById);
});
@@ -115,8 +115,8 @@ void main() {
expect(channelEntity.updatedAt, isSameDateAs(model.updatedAt));
expect(channelEntity.memberCount, model.memberCount);
expect(channelEntity.cid, model.cid);
expect(channelEntity.lastMessageAt, isSameDateAs(model.lastMessageAt!));
expect(channelEntity.deletedAt, isSameDateAs(model.deletedAt!));
expect(channelEntity.lastMessageAt, isSameDateAs(model.lastMessageAt));
expect(channelEntity.deletedAt, isSameDateAs(model.deletedAt));
expect(channelEntity.extraData, model.extraData);
expect(channelEntity.createdById, model.createdBy!.id);
});
@@ -29,8 +29,8 @@ void main() {
expect(member.createdAt, isSameDateAs(entity.createdAt));
expect(member.updatedAt, isSameDateAs(entity.updatedAt));
expect(member.channelRole, entity.channelRole);
expect(member.inviteAcceptedAt, isSameDateAs(entity.inviteAcceptedAt!));
expect(member.inviteRejectedAt, isSameDateAs(entity.inviteRejectedAt!));
expect(member.inviteAcceptedAt, isSameDateAs(entity.inviteAcceptedAt));
expect(member.inviteRejectedAt, isSameDateAs(entity.inviteRejectedAt));
expect(member.invited, entity.invited);
expect(member.banned, entity.banned);
expect(member.shadowBanned, entity.shadowBanned);
@@ -59,8 +59,8 @@ void main() {
expect(entity.createdAt, isSameDateAs(member.createdAt));
expect(entity.updatedAt, isSameDateAs(member.updatedAt));
expect(entity.channelRole, member.channelRole);
expect(entity.inviteAcceptedAt, isSameDateAs(member.inviteAcceptedAt!));
expect(entity.inviteRejectedAt, isSameDateAs(member.inviteRejectedAt!));
expect(entity.inviteAcceptedAt, isSameDateAs(member.inviteAcceptedAt));
expect(entity.inviteRejectedAt, isSameDateAs(member.inviteRejectedAt));
expect(entity.invited, member.invited);
expect(entity.banned, member.banned);
expect(entity.shadowBanned, member.shadowBanned);
@@ -96,11 +96,11 @@ void main() {
expect(message.updatedAt, isSameDateAs(entity.updatedAt));
expect(message.extraData, entity.extraData);
expect(message.user!.id, entity.userId);
expect(message.deletedAt, isSameDateAs(entity.deletedAt!));
expect(message.deletedAt, isSameDateAs(entity.deletedAt));
expect(message.text, entity.messageText);
expect(message.pinned, entity.pinned);
expect(message.pinExpires, isSameDateAs(entity.pinExpires!));
expect(message.pinnedAt, isSameDateAs(entity.pinnedAt!));
expect(message.pinExpires, isSameDateAs(entity.pinExpires));
expect(message.pinnedAt, isSameDateAs(entity.pinnedAt));
expect(message.pinnedBy!.id, entity.pinnedByUserId);
expect(message.reactionCounts, entity.reactionCounts);
expect(message.reactionScores, entity.reactionScores);
@@ -191,11 +191,11 @@ void main() {
expect(entity.updatedAt, isSameDateAs(message.updatedAt));
expect(entity.extraData, message.extraData);
expect(entity.userId, message.user!.id);
expect(entity.deletedAt, isSameDateAs(message.deletedAt!));
expect(entity.deletedAt, isSameDateAs(message.deletedAt));
expect(entity.messageText, message.text);
expect(entity.pinned, message.pinned);
expect(entity.pinExpires, isSameDateAs(message.pinExpires!));
expect(entity.pinnedAt, isSameDateAs(message.pinnedAt!));
expect(entity.pinExpires, isSameDateAs(message.pinExpires));
expect(entity.pinnedAt, isSameDateAs(message.pinnedAt));
expect(entity.pinnedByUserId, message.pinnedBy!.id);
expect(entity.reactionCounts, message.reactionCounts);
expect(entity.reactionScores, message.reactionScores);
@@ -89,11 +89,11 @@ void main() {
expect(message.updatedAt, isSameDateAs(entity.updatedAt));
expect(message.extraData, entity.extraData);
expect(message.user!.id, entity.userId);
expect(message.deletedAt, isSameDateAs(entity.deletedAt!));
expect(message.deletedAt, isSameDateAs(entity.deletedAt));
expect(message.text, entity.messageText);
expect(message.pinned, entity.pinned);
expect(message.pinExpires, isSameDateAs(entity.pinExpires!));
expect(message.pinnedAt, isSameDateAs(entity.pinnedAt!));
expect(message.pinExpires, isSameDateAs(entity.pinExpires));
expect(message.pinnedAt, isSameDateAs(entity.pinnedAt));
expect(message.pinnedBy!.id, entity.pinnedByUserId);
expect(message.reactionCounts, entity.reactionCounts);
expect(message.reactionScores, entity.reactionScores);
@@ -179,11 +179,11 @@ void main() {
expect(entity.updatedAt, isSameDateAs(message.updatedAt));
expect(entity.extraData, message.extraData);
expect(entity.userId, message.user!.id);
expect(entity.deletedAt, isSameDateAs(message.deletedAt!));
expect(entity.deletedAt, isSameDateAs(message.deletedAt));
expect(entity.messageText, message.text);
expect(entity.pinned, message.pinned);
expect(entity.pinExpires, isSameDateAs(message.pinExpires!));
expect(entity.pinnedAt, isSameDateAs(message.pinnedAt!));
expect(entity.pinExpires, isSameDateAs(message.pinExpires));
expect(entity.pinnedAt, isSameDateAs(message.pinnedAt));
expect(entity.pinnedByUserId, message.pinnedBy!.id);
expect(entity.reactionCounts, message.reactionCounts);
expect(entity.reactionScores, message.reactionScores);
@@ -27,7 +27,7 @@ void main() {
expect(user.language, entity.language);
expect(user.createdAt, isSameDateAs(entity.createdAt));
expect(user.updatedAt, isSameDateAs(entity.updatedAt));
expect(user.lastActive, isSameDateAs(entity.lastActive!));
expect(user.lastActive, isSameDateAs(entity.lastActive));
expect(user.online, entity.online);
expect(user.banned, entity.banned);
expect(user.extraData, entity.extraData);
@@ -52,7 +52,7 @@ void main() {
expect(entity.language, user.language);
expect(entity.createdAt, isSameDateAs(user.createdAt));
expect(entity.updatedAt, isSameDateAs(user.updatedAt));
expect(entity.lastActive, isSameDateAs(user.lastActive!));
expect(entity.lastActive, isSameDateAs(user.lastActive));
expect(entity.online, user.online);
expect(entity.banned, user.banned);
expect(entity.extraData, user.extraData);
@@ -1,21 +1,22 @@
import 'package:flutter_test/flutter_test.dart';
Matcher isSameDateAs(DateTime targetDate) =>
Matcher isSameDateAs(DateTime? targetDate) =>
_IsSameDateAs(targetDate: targetDate);
class _IsSameDateAs extends Matcher {
const _IsSameDateAs({required this.targetDate});
final DateTime targetDate;
final DateTime? targetDate;
@override
bool matches(covariant DateTime date, Map matchState) =>
date.year == targetDate.year &&
date.month == targetDate.month &&
date.day == targetDate.day &&
date.hour == targetDate.hour &&
date.minute == targetDate.minute &&
date.second == targetDate.second;
bool matches(covariant DateTime date, Map matchState) {
return date.year == targetDate?.year &&
date.month == targetDate?.month &&
date.day == targetDate?.day &&
date.hour == targetDate?.hour &&
date.minute == targetDate?.minute &&
date.second == targetDate?.second;
}
@override
Description describe(Description description) =>