Timestamp zu allen Objekten hinzufügen #36
@@ -15,7 +15,11 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
|
||||
Future<List<Game>> getAllGames() async {
|
||||
final query = select(gameTable);
|
||||
final result = await query.get();
|
||||
return result.map((row) => Game(id: row.id, name: row.name)).toList();
|
||||
return result
|
||||
.map(
|
||||
(row) => Game(id: row.id, name: row.name, createdAt: row.createdAt),
|
||||
)
|
||||
.toList();
|
||||
}
|
||||
|
||||
/// Retrieves a [Game] by its [gameId].
|
||||
@@ -38,6 +42,7 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
|
||||
players: players,
|
||||
group: group,
|
||||
winner: result.winnerId,
|
||||
createdAt: result.createdAt,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -58,6 +63,7 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
|
||||
id: game.id,
|
||||
name: game.name,
|
||||
winnerId: game.winner,
|
||||
createdAt: game.createdAt,
|
||||
),
|
||||
mode: InsertMode.insertOrReplace,
|
||||
);
|
||||
|
||||
@@ -19,7 +19,12 @@ class GroupDao extends DatabaseAccessor<AppDatabase> with _$GroupDaoMixin {
|
||||
final members = await db.playerGroupDao.getPlayersOfGroupById(
|
||||
groupId: groupData.id,
|
||||
);
|
||||
return Group(id: groupData.id, name: groupData.name, members: members);
|
||||
return Group(
|
||||
id: groupData.id,
|
||||
name: groupData.name,
|
||||
members: members,
|
||||
createdAt: groupData.createdAt,
|
||||
);
|
||||
}),
|
||||
);
|
||||
}
|
||||
@@ -33,7 +38,12 @@ class GroupDao extends DatabaseAccessor<AppDatabase> with _$GroupDaoMixin {
|
||||
groupId: groupId,
|
||||
);
|
||||
|
||||
return Group(id: result.id, name: result.name, members: members);
|
||||
return Group(
|
||||
id: result.id,
|
||||
name: result.name,
|
||||
members: members,
|
||||
createdAt: result.createdAt,
|
||||
);
|
||||
}
|
||||
|
||||
/// Adds a new group with the given [id] and [name] to the database.
|
||||
@@ -41,9 +51,13 @@ class GroupDao extends DatabaseAccessor<AppDatabase> with _$GroupDaoMixin {
|
||||
Future<bool> addGroup({required Group group}) async {
|
||||
if (!await groupExists(groupId: group.id)) {
|
||||
await db.transaction(() async {
|
||||
await into(
|
||||
groupTable,
|
||||
).insert(GroupTableCompanion.insert(id: group.id, name: group.name));
|
||||
await into(groupTable).insert(
|
||||
GroupTableCompanion.insert(
|
||||
id: group.id,
|
||||
name: group.name,
|
||||
createdAt: group.createdAt,
|
||||
),
|
||||
);
|
||||
await db.batch(
|
||||
(b) => b.insertAll(
|
||||
db.playerGroupTable,
|
||||
|
||||
@@ -13,14 +13,22 @@ class PlayerDao extends DatabaseAccessor<AppDatabase> with _$PlayerDaoMixin {
|
||||
Future<List<Player>> getAllPlayers() async {
|
||||
final query = select(playerTable);
|
||||
final result = await query.get();
|
||||
return result.map((row) => Player(id: row.id, name: row.name)).toList();
|
||||
return result
|
||||
.map(
|
||||
(row) => Player(id: row.id, name: row.name, createdAt: row.createdAt),
|
||||
)
|
||||
.toList();
|
||||
}
|
||||
|
||||
/// Retrieves a [Player] by their [id].
|
||||
Future<Player> getPlayerById({required String playerId}) async {
|
||||
final query = select(playerTable)..where((p) => p.id.equals(playerId));
|
||||
final result = await query.getSingle();
|
||||
return Player(id: result.id, name: result.name);
|
||||
return Player(
|
||||
id: result.id,
|
||||
name: result.name,
|
||||
createdAt: result.createdAt,
|
||||
);
|
||||
}
|
||||
|
||||
/// Adds a new [player] to the database.
|
||||
@@ -28,9 +36,13 @@ class PlayerDao extends DatabaseAccessor<AppDatabase> with _$PlayerDaoMixin {
|
||||
/// the new one.
|
||||
Future<bool> addPlayer({required Player player}) async {
|
||||
if (!await playerExists(playerId: player.id)) {
|
||||
await into(
|
||||
playerTable,
|
||||
).insert(PlayerTableCompanion.insert(id: player.id, name: player.name));
|
||||
await into(playerTable).insert(
|
||||
PlayerTableCompanion.insert(
|
||||
id: player.id,
|
||||
name: player.name,
|
||||
createdAt: player.createdAt,
|
||||
),
|
||||
);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -27,8 +27,19 @@ class $PlayerTableTable extends PlayerTable
|
||||
type: DriftSqlType.string,
|
||||
requiredDuringInsert: true,
|
||||
);
|
||||
static const VerificationMeta _createdAtMeta = const VerificationMeta(
|
||||
'createdAt',
|
||||
);
|
||||
@override
|
||||
List<GeneratedColumn> get $columns => [id, name];
|
||||
late final GeneratedColumn<DateTime> createdAt = GeneratedColumn<DateTime>(
|
||||
'created_at',
|
||||
aliasedName,
|
||||
false,
|
||||
type: DriftSqlType.dateTime,
|
||||
requiredDuringInsert: true,
|
||||
);
|
||||
@override
|
||||
List<GeneratedColumn> get $columns => [id, name, createdAt];
|
||||
@override
|
||||
String get aliasedName => _alias ?? actualTableName;
|
||||
@override
|
||||
@@ -54,6 +65,14 @@ class $PlayerTableTable extends PlayerTable
|
||||
} else if (isInserting) {
|
||||
context.missing(_nameMeta);
|
||||
}
|
||||
if (data.containsKey('created_at')) {
|
||||
context.handle(
|
||||
_createdAtMeta,
|
||||
createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta),
|
||||
);
|
||||
} else if (isInserting) {
|
||||
context.missing(_createdAtMeta);
|
||||
}
|
||||
return context;
|
||||
}
|
||||
|
||||
@@ -71,6 +90,10 @@ class $PlayerTableTable extends PlayerTable
|
||||
DriftSqlType.string,
|
||||
data['${effectivePrefix}name'],
|
||||
)!,
|
||||
createdAt: attachedDatabase.typeMapping.read(
|
||||
DriftSqlType.dateTime,
|
||||
data['${effectivePrefix}created_at'],
|
||||
)!,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -83,17 +106,27 @@ class $PlayerTableTable extends PlayerTable
|
||||
class PlayerTableData extends DataClass implements Insertable<PlayerTableData> {
|
||||
final String id;
|
||||
final String name;
|
||||
const PlayerTableData({required this.id, required this.name});
|
||||
final DateTime createdAt;
|
||||
const PlayerTableData({
|
||||
required this.id,
|
||||
required this.name,
|
||||
required this.createdAt,
|
||||
});
|
||||
@override
|
||||
Map<String, Expression> toColumns(bool nullToAbsent) {
|
||||
final map = <String, Expression>{};
|
||||
map['id'] = Variable<String>(id);
|
||||
map['name'] = Variable<String>(name);
|
||||
map['created_at'] = Variable<DateTime>(createdAt);
|
||||
return map;
|
||||
}
|
||||
|
||||
PlayerTableCompanion toCompanion(bool nullToAbsent) {
|
||||
return PlayerTableCompanion(id: Value(id), name: Value(name));
|
||||
return PlayerTableCompanion(
|
||||
id: Value(id),
|
||||
name: Value(name),
|
||||
createdAt: Value(createdAt),
|
||||
);
|
||||
}
|
||||
|
||||
factory PlayerTableData.fromJson(
|
||||
@@ -104,6 +137,7 @@ class PlayerTableData extends DataClass implements Insertable<PlayerTableData> {
|
||||
return PlayerTableData(
|
||||
id: serializer.fromJson<String>(json['id']),
|
||||
name: serializer.fromJson<String>(json['name']),
|
||||
createdAt: serializer.fromJson<DateTime>(json['createdAt']),
|
||||
);
|
||||
}
|
||||
@override
|
||||
@@ -112,15 +146,21 @@ class PlayerTableData extends DataClass implements Insertable<PlayerTableData> {
|
||||
return <String, dynamic>{
|
||||
'id': serializer.toJson<String>(id),
|
||||
'name': serializer.toJson<String>(name),
|
||||
'createdAt': serializer.toJson<DateTime>(createdAt),
|
||||
};
|
||||
}
|
||||
|
||||
PlayerTableData copyWith({String? id, String? name}) =>
|
||||
PlayerTableData(id: id ?? this.id, name: name ?? this.name);
|
||||
PlayerTableData copyWith({String? id, String? name, DateTime? createdAt}) =>
|
||||
PlayerTableData(
|
||||
id: id ?? this.id,
|
||||
name: name ?? this.name,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
);
|
||||
PlayerTableData copyWithCompanion(PlayerTableCompanion data) {
|
||||
return PlayerTableData(
|
||||
id: data.id.present ? data.id.value : this.id,
|
||||
name: data.name.present ? data.name.value : this.name,
|
||||
createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -128,44 +168,52 @@ class PlayerTableData extends DataClass implements Insertable<PlayerTableData> {
|
||||
String toString() {
|
||||
return (StringBuffer('PlayerTableData(')
|
||||
..write('id: $id, ')
|
||||
..write('name: $name')
|
||||
..write('name: $name, ')
|
||||
..write('createdAt: $createdAt')
|
||||
..write(')'))
|
||||
.toString();
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(id, name);
|
||||
int get hashCode => Object.hash(id, name, createdAt);
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
(other is PlayerTableData &&
|
||||
other.id == this.id &&
|
||||
other.name == this.name);
|
||||
other.name == this.name &&
|
||||
other.createdAt == this.createdAt);
|
||||
}
|
||||
|
||||
class PlayerTableCompanion extends UpdateCompanion<PlayerTableData> {
|
||||
final Value<String> id;
|
||||
final Value<String> name;
|
||||
final Value<DateTime> createdAt;
|
||||
final Value<int> rowid;
|
||||
const PlayerTableCompanion({
|
||||
this.id = const Value.absent(),
|
||||
this.name = const Value.absent(),
|
||||
this.createdAt = const Value.absent(),
|
||||
this.rowid = const Value.absent(),
|
||||
});
|
||||
PlayerTableCompanion.insert({
|
||||
required String id,
|
||||
required String name,
|
||||
required DateTime createdAt,
|
||||
this.rowid = const Value.absent(),
|
||||
}) : id = Value(id),
|
||||
name = Value(name);
|
||||
name = Value(name),
|
||||
createdAt = Value(createdAt);
|
||||
static Insertable<PlayerTableData> custom({
|
||||
Expression<String>? id,
|
||||
Expression<String>? name,
|
||||
Expression<DateTime>? createdAt,
|
||||
Expression<int>? rowid,
|
||||
}) {
|
||||
return RawValuesInsertable({
|
||||
if (id != null) 'id': id,
|
||||
if (name != null) 'name': name,
|
||||
if (createdAt != null) 'created_at': createdAt,
|
||||
if (rowid != null) 'rowid': rowid,
|
||||
});
|
||||
}
|
||||
@@ -173,11 +221,13 @@ class PlayerTableCompanion extends UpdateCompanion<PlayerTableData> {
|
||||
PlayerTableCompanion copyWith({
|
||||
Value<String>? id,
|
||||
Value<String>? name,
|
||||
Value<DateTime>? createdAt,
|
||||
Value<int>? rowid,
|
||||
}) {
|
||||
return PlayerTableCompanion(
|
||||
id: id ?? this.id,
|
||||
name: name ?? this.name,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
rowid: rowid ?? this.rowid,
|
||||
);
|
||||
}
|
||||
@@ -191,6 +241,9 @@ class PlayerTableCompanion extends UpdateCompanion<PlayerTableData> {
|
||||
if (name.present) {
|
||||
map['name'] = Variable<String>(name.value);
|
||||
}
|
||||
if (createdAt.present) {
|
||||
map['created_at'] = Variable<DateTime>(createdAt.value);
|
||||
}
|
||||
if (rowid.present) {
|
||||
map['rowid'] = Variable<int>(rowid.value);
|
||||
}
|
||||
@@ -202,6 +255,7 @@ class PlayerTableCompanion extends UpdateCompanion<PlayerTableData> {
|
||||
return (StringBuffer('PlayerTableCompanion(')
|
||||
..write('id: $id, ')
|
||||
..write('name: $name, ')
|
||||
..write('createdAt: $createdAt, ')
|
||||
..write('rowid: $rowid')
|
||||
..write(')'))
|
||||
.toString();
|
||||
@@ -232,8 +286,19 @@ class $GroupTableTable extends GroupTable
|
||||
type: DriftSqlType.string,
|
||||
requiredDuringInsert: true,
|
||||
);
|
||||
static const VerificationMeta _createdAtMeta = const VerificationMeta(
|
||||
'createdAt',
|
||||
);
|
||||
@override
|
||||
List<GeneratedColumn> get $columns => [id, name];
|
||||
late final GeneratedColumn<DateTime> createdAt = GeneratedColumn<DateTime>(
|
||||
'created_at',
|
||||
aliasedName,
|
||||
false,
|
||||
type: DriftSqlType.dateTime,
|
||||
requiredDuringInsert: true,
|
||||
);
|
||||
@override
|
||||
List<GeneratedColumn> get $columns => [id, name, createdAt];
|
||||
@override
|
||||
String get aliasedName => _alias ?? actualTableName;
|
||||
@override
|
||||
@@ -259,6 +324,14 @@ class $GroupTableTable extends GroupTable
|
||||
} else if (isInserting) {
|
||||
context.missing(_nameMeta);
|
||||
}
|
||||
if (data.containsKey('created_at')) {
|
||||
context.handle(
|
||||
_createdAtMeta,
|
||||
createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta),
|
||||
);
|
||||
} else if (isInserting) {
|
||||
context.missing(_createdAtMeta);
|
||||
}
|
||||
return context;
|
||||
}
|
||||
|
||||
@@ -276,6 +349,10 @@ class $GroupTableTable extends GroupTable
|
||||
DriftSqlType.string,
|
||||
data['${effectivePrefix}name'],
|
||||
)!,
|
||||
createdAt: attachedDatabase.typeMapping.read(
|
||||
DriftSqlType.dateTime,
|
||||
data['${effectivePrefix}created_at'],
|
||||
)!,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -288,17 +365,27 @@ class $GroupTableTable extends GroupTable
|
||||
class GroupTableData extends DataClass implements Insertable<GroupTableData> {
|
||||
final String id;
|
||||
final String name;
|
||||
const GroupTableData({required this.id, required this.name});
|
||||
final DateTime createdAt;
|
||||
const GroupTableData({
|
||||
required this.id,
|
||||
required this.name,
|
||||
required this.createdAt,
|
||||
});
|
||||
@override
|
||||
Map<String, Expression> toColumns(bool nullToAbsent) {
|
||||
final map = <String, Expression>{};
|
||||
map['id'] = Variable<String>(id);
|
||||
map['name'] = Variable<String>(name);
|
||||
map['created_at'] = Variable<DateTime>(createdAt);
|
||||
return map;
|
||||
}
|
||||
|
||||
GroupTableCompanion toCompanion(bool nullToAbsent) {
|
||||
return GroupTableCompanion(id: Value(id), name: Value(name));
|
||||
return GroupTableCompanion(
|
||||
id: Value(id),
|
||||
name: Value(name),
|
||||
createdAt: Value(createdAt),
|
||||
);
|
||||
}
|
||||
|
||||
factory GroupTableData.fromJson(
|
||||
@@ -309,6 +396,7 @@ class GroupTableData extends DataClass implements Insertable<GroupTableData> {
|
||||
return GroupTableData(
|
||||
id: serializer.fromJson<String>(json['id']),
|
||||
name: serializer.fromJson<String>(json['name']),
|
||||
createdAt: serializer.fromJson<DateTime>(json['createdAt']),
|
||||
);
|
||||
}
|
||||
@override
|
||||
@@ -317,15 +405,21 @@ class GroupTableData extends DataClass implements Insertable<GroupTableData> {
|
||||
return <String, dynamic>{
|
||||
'id': serializer.toJson<String>(id),
|
||||
'name': serializer.toJson<String>(name),
|
||||
'createdAt': serializer.toJson<DateTime>(createdAt),
|
||||
};
|
||||
}
|
||||
|
||||
GroupTableData copyWith({String? id, String? name}) =>
|
||||
GroupTableData(id: id ?? this.id, name: name ?? this.name);
|
||||
GroupTableData copyWith({String? id, String? name, DateTime? createdAt}) =>
|
||||
GroupTableData(
|
||||
id: id ?? this.id,
|
||||
name: name ?? this.name,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
);
|
||||
GroupTableData copyWithCompanion(GroupTableCompanion data) {
|
||||
return GroupTableData(
|
||||
id: data.id.present ? data.id.value : this.id,
|
||||
name: data.name.present ? data.name.value : this.name,
|
||||
createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -333,44 +427,52 @@ class GroupTableData extends DataClass implements Insertable<GroupTableData> {
|
||||
String toString() {
|
||||
return (StringBuffer('GroupTableData(')
|
||||
..write('id: $id, ')
|
||||
..write('name: $name')
|
||||
..write('name: $name, ')
|
||||
..write('createdAt: $createdAt')
|
||||
..write(')'))
|
||||
.toString();
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(id, name);
|
||||
int get hashCode => Object.hash(id, name, createdAt);
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
(other is GroupTableData &&
|
||||
other.id == this.id &&
|
||||
other.name == this.name);
|
||||
other.name == this.name &&
|
||||
other.createdAt == this.createdAt);
|
||||
}
|
||||
|
||||
class GroupTableCompanion extends UpdateCompanion<GroupTableData> {
|
||||
final Value<String> id;
|
||||
final Value<String> name;
|
||||
final Value<DateTime> createdAt;
|
||||
final Value<int> rowid;
|
||||
const GroupTableCompanion({
|
||||
this.id = const Value.absent(),
|
||||
this.name = const Value.absent(),
|
||||
this.createdAt = const Value.absent(),
|
||||
this.rowid = const Value.absent(),
|
||||
});
|
||||
GroupTableCompanion.insert({
|
||||
required String id,
|
||||
required String name,
|
||||
required DateTime createdAt,
|
||||
this.rowid = const Value.absent(),
|
||||
}) : id = Value(id),
|
||||
name = Value(name);
|
||||
name = Value(name),
|
||||
createdAt = Value(createdAt);
|
||||
static Insertable<GroupTableData> custom({
|
||||
Expression<String>? id,
|
||||
Expression<String>? name,
|
||||
Expression<DateTime>? createdAt,
|
||||
Expression<int>? rowid,
|
||||
}) {
|
||||
return RawValuesInsertable({
|
||||
if (id != null) 'id': id,
|
||||
if (name != null) 'name': name,
|
||||
if (createdAt != null) 'created_at': createdAt,
|
||||
if (rowid != null) 'rowid': rowid,
|
||||
});
|
||||
}
|
||||
@@ -378,11 +480,13 @@ class GroupTableCompanion extends UpdateCompanion<GroupTableData> {
|
||||
GroupTableCompanion copyWith({
|
||||
Value<String>? id,
|
||||
Value<String>? name,
|
||||
Value<DateTime>? createdAt,
|
||||
Value<int>? rowid,
|
||||
}) {
|
||||
return GroupTableCompanion(
|
||||
id: id ?? this.id,
|
||||
name: name ?? this.name,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
rowid: rowid ?? this.rowid,
|
||||
);
|
||||
}
|
||||
@@ -396,6 +500,9 @@ class GroupTableCompanion extends UpdateCompanion<GroupTableData> {
|
||||
if (name.present) {
|
||||
map['name'] = Variable<String>(name.value);
|
||||
}
|
||||
if (createdAt.present) {
|
||||
map['created_at'] = Variable<DateTime>(createdAt.value);
|
||||
}
|
||||
if (rowid.present) {
|
||||
map['rowid'] = Variable<int>(rowid.value);
|
||||
}
|
||||
@@ -407,6 +514,7 @@ class GroupTableCompanion extends UpdateCompanion<GroupTableData> {
|
||||
return (StringBuffer('GroupTableCompanion(')
|
||||
..write('id: $id, ')
|
||||
..write('name: $name, ')
|
||||
..write('createdAt: $createdAt, ')
|
||||
..write('rowid: $rowid')
|
||||
..write(')'))
|
||||
.toString();
|
||||
@@ -451,8 +559,19 @@ class $GameTableTable extends GameTable
|
||||
'REFERENCES player_table (id) ON DELETE CASCADE',
|
||||
),
|
||||
);
|
||||
static const VerificationMeta _createdAtMeta = const VerificationMeta(
|
||||
'createdAt',
|
||||
);
|
||||
@override
|
||||
List<GeneratedColumn> get $columns => [id, name, winnerId];
|
||||
late final GeneratedColumn<DateTime> createdAt = GeneratedColumn<DateTime>(
|
||||
'created_at',
|
||||
aliasedName,
|
||||
false,
|
||||
type: DriftSqlType.dateTime,
|
||||
requiredDuringInsert: true,
|
||||
);
|
||||
@override
|
||||
List<GeneratedColumn> get $columns => [id, name, winnerId, createdAt];
|
||||
@override
|
||||
String get aliasedName => _alias ?? actualTableName;
|
||||
@override
|
||||
@@ -486,6 +605,14 @@ class $GameTableTable extends GameTable
|
||||
} else if (isInserting) {
|
||||
context.missing(_winnerIdMeta);
|
||||
}
|
||||
if (data.containsKey('created_at')) {
|
||||
context.handle(
|
||||
_createdAtMeta,
|
||||
createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta),
|
||||
);
|
||||
} else if (isInserting) {
|
||||
context.missing(_createdAtMeta);
|
||||
}
|
||||
return context;
|
||||
}
|
||||
|
||||
@@ -507,6 +634,10 @@ class $GameTableTable extends GameTable
|
||||
DriftSqlType.string,
|
||||
data['${effectivePrefix}winner_id'],
|
||||
)!,
|
||||
createdAt: attachedDatabase.typeMapping.read(
|
||||
DriftSqlType.dateTime,
|
||||
data['${effectivePrefix}created_at'],
|
||||
)!,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -520,10 +651,12 @@ class GameTableData extends DataClass implements Insertable<GameTableData> {
|
||||
final String id;
|
||||
final String name;
|
||||
final String winnerId;
|
||||
final DateTime createdAt;
|
||||
const GameTableData({
|
||||
required this.id,
|
||||
required this.name,
|
||||
required this.winnerId,
|
||||
required this.createdAt,
|
||||
});
|
||||
@override
|
||||
Map<String, Expression> toColumns(bool nullToAbsent) {
|
||||
@@ -531,6 +664,7 @@ class GameTableData extends DataClass implements Insertable<GameTableData> {
|
||||
map['id'] = Variable<String>(id);
|
||||
map['name'] = Variable<String>(name);
|
||||
map['winner_id'] = Variable<String>(winnerId);
|
||||
map['created_at'] = Variable<DateTime>(createdAt);
|
||||
return map;
|
||||
}
|
||||
|
||||
@@ -539,6 +673,7 @@ class GameTableData extends DataClass implements Insertable<GameTableData> {
|
||||
id: Value(id),
|
||||
name: Value(name),
|
||||
winnerId: Value(winnerId),
|
||||
createdAt: Value(createdAt),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -551,6 +686,7 @@ class GameTableData extends DataClass implements Insertable<GameTableData> {
|
||||
id: serializer.fromJson<String>(json['id']),
|
||||
name: serializer.fromJson<String>(json['name']),
|
||||
winnerId: serializer.fromJson<String>(json['winnerId']),
|
||||
createdAt: serializer.fromJson<DateTime>(json['createdAt']),
|
||||
);
|
||||
}
|
||||
@override
|
||||
@@ -560,20 +696,27 @@ class GameTableData extends DataClass implements Insertable<GameTableData> {
|
||||
'id': serializer.toJson<String>(id),
|
||||
'name': serializer.toJson<String>(name),
|
||||
'winnerId': serializer.toJson<String>(winnerId),
|
||||
'createdAt': serializer.toJson<DateTime>(createdAt),
|
||||
};
|
||||
}
|
||||
|
||||
GameTableData copyWith({String? id, String? name, String? winnerId}) =>
|
||||
GameTableData(
|
||||
id: id ?? this.id,
|
||||
name: name ?? this.name,
|
||||
winnerId: winnerId ?? this.winnerId,
|
||||
);
|
||||
GameTableData copyWith({
|
||||
String? id,
|
||||
String? name,
|
||||
String? winnerId,
|
||||
DateTime? createdAt,
|
||||
}) => GameTableData(
|
||||
id: id ?? this.id,
|
||||
name: name ?? this.name,
|
||||
winnerId: winnerId ?? this.winnerId,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
);
|
||||
GameTableData copyWithCompanion(GameTableCompanion data) {
|
||||
return GameTableData(
|
||||
id: data.id.present ? data.id.value : this.id,
|
||||
name: data.name.present ? data.name.value : this.name,
|
||||
winnerId: data.winnerId.present ? data.winnerId.value : this.winnerId,
|
||||
createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -582,51 +725,59 @@ class GameTableData extends DataClass implements Insertable<GameTableData> {
|
||||
return (StringBuffer('GameTableData(')
|
||||
..write('id: $id, ')
|
||||
..write('name: $name, ')
|
||||
..write('winnerId: $winnerId')
|
||||
..write('winnerId: $winnerId, ')
|
||||
..write('createdAt: $createdAt')
|
||||
..write(')'))
|
||||
.toString();
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(id, name, winnerId);
|
||||
int get hashCode => Object.hash(id, name, winnerId, createdAt);
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
(other is GameTableData &&
|
||||
other.id == this.id &&
|
||||
other.name == this.name &&
|
||||
other.winnerId == this.winnerId);
|
||||
other.winnerId == this.winnerId &&
|
||||
other.createdAt == this.createdAt);
|
||||
}
|
||||
|
||||
class GameTableCompanion extends UpdateCompanion<GameTableData> {
|
||||
final Value<String> id;
|
||||
final Value<String> name;
|
||||
final Value<String> winnerId;
|
||||
final Value<DateTime> createdAt;
|
||||
final Value<int> rowid;
|
||||
const GameTableCompanion({
|
||||
this.id = const Value.absent(),
|
||||
this.name = const Value.absent(),
|
||||
this.winnerId = const Value.absent(),
|
||||
this.createdAt = const Value.absent(),
|
||||
this.rowid = const Value.absent(),
|
||||
});
|
||||
GameTableCompanion.insert({
|
||||
required String id,
|
||||
required String name,
|
||||
required String winnerId,
|
||||
required DateTime createdAt,
|
||||
this.rowid = const Value.absent(),
|
||||
}) : id = Value(id),
|
||||
name = Value(name),
|
||||
winnerId = Value(winnerId);
|
||||
winnerId = Value(winnerId),
|
||||
createdAt = Value(createdAt);
|
||||
static Insertable<GameTableData> custom({
|
||||
Expression<String>? id,
|
||||
Expression<String>? name,
|
||||
Expression<String>? winnerId,
|
||||
Expression<DateTime>? createdAt,
|
||||
Expression<int>? rowid,
|
||||
}) {
|
||||
return RawValuesInsertable({
|
||||
if (id != null) 'id': id,
|
||||
if (name != null) 'name': name,
|
||||
if (winnerId != null) 'winner_id': winnerId,
|
||||
if (createdAt != null) 'created_at': createdAt,
|
||||
if (rowid != null) 'rowid': rowid,
|
||||
});
|
||||
}
|
||||
@@ -635,12 +786,14 @@ class GameTableCompanion extends UpdateCompanion<GameTableData> {
|
||||
Value<String>? id,
|
||||
Value<String>? name,
|
||||
Value<String>? winnerId,
|
||||
Value<DateTime>? createdAt,
|
||||
Value<int>? rowid,
|
||||
}) {
|
||||
return GameTableCompanion(
|
||||
id: id ?? this.id,
|
||||
name: name ?? this.name,
|
||||
winnerId: winnerId ?? this.winnerId,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
rowid: rowid ?? this.rowid,
|
||||
);
|
||||
}
|
||||
@@ -657,6 +810,9 @@ class GameTableCompanion extends UpdateCompanion<GameTableData> {
|
||||
if (winnerId.present) {
|
||||
map['winner_id'] = Variable<String>(winnerId.value);
|
||||
}
|
||||
if (createdAt.present) {
|
||||
map['created_at'] = Variable<DateTime>(createdAt.value);
|
||||
}
|
||||
if (rowid.present) {
|
||||
map['rowid'] = Variable<int>(rowid.value);
|
||||
}
|
||||
@@ -669,6 +825,7 @@ class GameTableCompanion extends UpdateCompanion<GameTableData> {
|
||||
..write('id: $id, ')
|
||||
..write('name: $name, ')
|
||||
..write('winnerId: $winnerId, ')
|
||||
..write('createdAt: $createdAt, ')
|
||||
..write('rowid: $rowid')
|
||||
..write(')'))
|
||||
.toString();
|
||||
@@ -1437,12 +1594,14 @@ typedef $$PlayerTableTableCreateCompanionBuilder =
|
||||
PlayerTableCompanion Function({
|
||||
required String id,
|
||||
required String name,
|
||||
required DateTime createdAt,
|
||||
Value<int> rowid,
|
||||
});
|
||||
typedef $$PlayerTableTableUpdateCompanionBuilder =
|
||||
PlayerTableCompanion Function({
|
||||
Value<String> id,
|
||||
Value<String> name,
|
||||
Value<DateTime> createdAt,
|
||||
Value<int> rowid,
|
||||
});
|
||||
|
||||
@@ -1534,6 +1693,11 @@ class $$PlayerTableTableFilterComposer
|
||||
builder: (column) => ColumnFilters(column),
|
||||
);
|
||||
|
||||
ColumnFilters<DateTime> get createdAt => $composableBuilder(
|
||||
column: $table.createdAt,
|
||||
builder: (column) => ColumnFilters(column),
|
||||
);
|
||||
|
||||
Expression<bool> gameTableRefs(
|
||||
Expression<bool> Function($$GameTableTableFilterComposer f) f,
|
||||
) {
|
||||
@@ -1628,6 +1792,11 @@ class $$PlayerTableTableOrderingComposer
|
||||
column: $table.name,
|
||||
builder: (column) => ColumnOrderings(column),
|
||||
);
|
||||
|
||||
ColumnOrderings<DateTime> get createdAt => $composableBuilder(
|
||||
column: $table.createdAt,
|
||||
builder: (column) => ColumnOrderings(column),
|
||||
);
|
||||
}
|
||||
|
||||
class $$PlayerTableTableAnnotationComposer
|
||||
@@ -1645,6 +1814,9 @@ class $$PlayerTableTableAnnotationComposer
|
||||
GeneratedColumn<String> get name =>
|
||||
$composableBuilder(column: $table.name, builder: (column) => column);
|
||||
|
||||
GeneratedColumn<DateTime> get createdAt =>
|
||||
$composableBuilder(column: $table.createdAt, builder: (column) => column);
|
||||
|
||||
Expression<T> gameTableRefs<T extends Object>(
|
||||
Expression<T> Function($$GameTableTableAnnotationComposer a) f,
|
||||
) {
|
||||
@@ -1755,15 +1927,26 @@ class $$PlayerTableTableTableManager
|
||||
({
|
||||
Value<String> id = const Value.absent(),
|
||||
Value<String> name = const Value.absent(),
|
||||
Value<DateTime> createdAt = const Value.absent(),
|
||||
Value<int> rowid = const Value.absent(),
|
||||
}) => PlayerTableCompanion(id: id, name: name, rowid: rowid),
|
||||
}) => PlayerTableCompanion(
|
||||
id: id,
|
||||
name: name,
|
||||
createdAt: createdAt,
|
||||
rowid: rowid,
|
||||
),
|
||||
createCompanionCallback:
|
||||
({
|
||||
required String id,
|
||||
required String name,
|
||||
required DateTime createdAt,
|
||||
Value<int> rowid = const Value.absent(),
|
||||
}) =>
|
||||
PlayerTableCompanion.insert(id: id, name: name, rowid: rowid),
|
||||
}) => PlayerTableCompanion.insert(
|
||||
id: id,
|
||||
name: name,
|
||||
createdAt: createdAt,
|
||||
rowid: rowid,
|
||||
),
|
||||
withReferenceMapper: (p0) => p0
|
||||
.map(
|
||||
(e) => (
|
||||
@@ -1881,12 +2064,14 @@ typedef $$GroupTableTableCreateCompanionBuilder =
|
||||
GroupTableCompanion Function({
|
||||
required String id,
|
||||
required String name,
|
||||
required DateTime createdAt,
|
||||
Value<int> rowid,
|
||||
});
|
||||
typedef $$GroupTableTableUpdateCompanionBuilder =
|
||||
GroupTableCompanion Function({
|
||||
Value<String> id,
|
||||
Value<String> name,
|
||||
Value<DateTime> createdAt,
|
||||
Value<int> rowid,
|
||||
});
|
||||
|
||||
@@ -1958,6 +2143,11 @@ class $$GroupTableTableFilterComposer
|
||||
builder: (column) => ColumnFilters(column),
|
||||
);
|
||||
|
||||
ColumnFilters<DateTime> get createdAt => $composableBuilder(
|
||||
column: $table.createdAt,
|
||||
builder: (column) => ColumnFilters(column),
|
||||
);
|
||||
|
||||
Expression<bool> playerGroupTableRefs(
|
||||
Expression<bool> Function($$PlayerGroupTableTableFilterComposer f) f,
|
||||
) {
|
||||
@@ -2027,6 +2217,11 @@ class $$GroupTableTableOrderingComposer
|
||||
column: $table.name,
|
||||
builder: (column) => ColumnOrderings(column),
|
||||
);
|
||||
|
||||
ColumnOrderings<DateTime> get createdAt => $composableBuilder(
|
||||
column: $table.createdAt,
|
||||
builder: (column) => ColumnOrderings(column),
|
||||
);
|
||||
}
|
||||
|
||||
class $$GroupTableTableAnnotationComposer
|
||||
@@ -2044,6 +2239,9 @@ class $$GroupTableTableAnnotationComposer
|
||||
GeneratedColumn<String> get name =>
|
||||
$composableBuilder(column: $table.name, builder: (column) => column);
|
||||
|
||||
GeneratedColumn<DateTime> get createdAt =>
|
||||
$composableBuilder(column: $table.createdAt, builder: (column) => column);
|
||||
|
||||
Expression<T> playerGroupTableRefs<T extends Object>(
|
||||
Expression<T> Function($$PlayerGroupTableTableAnnotationComposer a) f,
|
||||
) {
|
||||
@@ -2128,15 +2326,26 @@ class $$GroupTableTableTableManager
|
||||
({
|
||||
Value<String> id = const Value.absent(),
|
||||
Value<String> name = const Value.absent(),
|
||||
Value<DateTime> createdAt = const Value.absent(),
|
||||
Value<int> rowid = const Value.absent(),
|
||||
}) => GroupTableCompanion(id: id, name: name, rowid: rowid),
|
||||
}) => GroupTableCompanion(
|
||||
id: id,
|
||||
name: name,
|
||||
createdAt: createdAt,
|
||||
rowid: rowid,
|
||||
),
|
||||
createCompanionCallback:
|
||||
({
|
||||
required String id,
|
||||
required String name,
|
||||
required DateTime createdAt,
|
||||
Value<int> rowid = const Value.absent(),
|
||||
}) =>
|
||||
GroupTableCompanion.insert(id: id, name: name, rowid: rowid),
|
||||
}) => GroupTableCompanion.insert(
|
||||
id: id,
|
||||
name: name,
|
||||
createdAt: createdAt,
|
||||
rowid: rowid,
|
||||
),
|
||||
withReferenceMapper: (p0) => p0
|
||||
.map(
|
||||
(e) => (
|
||||
@@ -2228,6 +2437,7 @@ typedef $$GameTableTableCreateCompanionBuilder =
|
||||
required String id,
|
||||
required String name,
|
||||
required String winnerId,
|
||||
required DateTime createdAt,
|
||||
Value<int> rowid,
|
||||
});
|
||||
typedef $$GameTableTableUpdateCompanionBuilder =
|
||||
@@ -2235,6 +2445,7 @@ typedef $$GameTableTableUpdateCompanionBuilder =
|
||||
Value<String> id,
|
||||
Value<String> name,
|
||||
Value<String> winnerId,
|
||||
Value<DateTime> createdAt,
|
||||
Value<int> rowid,
|
||||
});
|
||||
|
||||
@@ -2319,6 +2530,11 @@ class $$GameTableTableFilterComposer
|
||||
builder: (column) => ColumnFilters(column),
|
||||
);
|
||||
|
||||
ColumnFilters<DateTime> get createdAt => $composableBuilder(
|
||||
column: $table.createdAt,
|
||||
builder: (column) => ColumnFilters(column),
|
||||
);
|
||||
|
||||
$$PlayerTableTableFilterComposer get winnerId {
|
||||
final $$PlayerTableTableFilterComposer composer = $composerBuilder(
|
||||
composer: this,
|
||||
@@ -2412,6 +2628,11 @@ class $$GameTableTableOrderingComposer
|
||||
builder: (column) => ColumnOrderings(column),
|
||||
);
|
||||
|
||||
ColumnOrderings<DateTime> get createdAt => $composableBuilder(
|
||||
column: $table.createdAt,
|
||||
builder: (column) => ColumnOrderings(column),
|
||||
);
|
||||
|
||||
$$PlayerTableTableOrderingComposer get winnerId {
|
||||
final $$PlayerTableTableOrderingComposer composer = $composerBuilder(
|
||||
composer: this,
|
||||
@@ -2451,6 +2672,9 @@ class $$GameTableTableAnnotationComposer
|
||||
GeneratedColumn<String> get name =>
|
||||
$composableBuilder(column: $table.name, builder: (column) => column);
|
||||
|
||||
GeneratedColumn<DateTime> get createdAt =>
|
||||
$composableBuilder(column: $table.createdAt, builder: (column) => column);
|
||||
|
||||
$$PlayerTableTableAnnotationComposer get winnerId {
|
||||
final $$PlayerTableTableAnnotationComposer composer = $composerBuilder(
|
||||
composer: this,
|
||||
@@ -2560,11 +2784,13 @@ class $$GameTableTableTableManager
|
||||
Value<String> id = const Value.absent(),
|
||||
Value<String> name = const Value.absent(),
|
||||
Value<String> winnerId = const Value.absent(),
|
||||
Value<DateTime> createdAt = const Value.absent(),
|
||||
Value<int> rowid = const Value.absent(),
|
||||
}) => GameTableCompanion(
|
||||
id: id,
|
||||
name: name,
|
||||
winnerId: winnerId,
|
||||
createdAt: createdAt,
|
||||
rowid: rowid,
|
||||
),
|
||||
createCompanionCallback:
|
||||
@@ -2572,11 +2798,13 @@ class $$GameTableTableTableManager
|
||||
required String id,
|
||||
required String name,
|
||||
required String winnerId,
|
||||
required DateTime createdAt,
|
||||
Value<int> rowid = const Value.absent(),
|
||||
}) => GameTableCompanion.insert(
|
||||
id: id,
|
||||
name: name,
|
||||
winnerId: winnerId,
|
||||
createdAt: createdAt,
|
||||
rowid: rowid,
|
||||
),
|
||||
withReferenceMapper: (p0) => p0
|
||||
|
||||
@@ -6,6 +6,7 @@ class GameTable extends Table {
|
||||
TextColumn get name => text()();
|
||||
TextColumn get winnerId =>
|
||||
text().references(PlayerTable, #id, onDelete: KeyAction.cascade)();
|
||||
DateTimeColumn get createdAt => dateTime()();
|
||||
|
||||
@override
|
||||
Set<Column<Object>> get primaryKey => {id};
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'package:drift/drift.dart';
|
||||
class GroupTable extends Table {
|
||||
TextColumn get id => text()();
|
||||
TextColumn get name => text()();
|
||||
DateTimeColumn get createdAt => dateTime()();
|
||||
|
||||
@override
|
||||
Set<Column<Object>> get primaryKey => {id};
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'package:drift/drift.dart';
|
||||
class PlayerTable extends Table {
|
||||
TextColumn get id => text()();
|
||||
TextColumn get name => text()();
|
||||
DateTimeColumn get createdAt => dateTime()();
|
||||
|
||||
@override
|
||||
Set<Column<Object>> get primaryKey => {id};
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:clock/clock.dart';
|
||||
import 'package:game_tracker/data/dto/group.dart';
|
||||
import 'package:game_tracker/data/dto/player.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
@@ -8,14 +9,17 @@ class Game {
|
||||
final List<Player>? players;
|
||||
final Group? group;
|
||||
final String winner;
|
||||
final DateTime createdAt;
|
||||
|
||||
Game({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
required this.name,
|
||||
this.players,
|
||||
this.group,
|
||||
this.winner = '',
|
||||
}) : id = id ?? const Uuid().v4();
|
||||
}) : id = id ?? const Uuid().v4(),
|
||||
createdAt = createdAt ?? clock.now();
|
||||
|
flixcoo marked this conversation as resolved
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:clock/clock.dart';
|
||||
import 'package:game_tracker/data/dto/player.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
@@ -5,9 +6,15 @@ class Group {
|
||||
final String id;
|
||||
final String name;
|
||||
final List<Player> members;
|
||||
final DateTime createdAt;
|
||||
|
||||
Group({String? id, required this.name, required this.members})
|
||||
: id = id ?? const Uuid().v4();
|
||||
Group({
|
||||
String? id,
|
||||
DateTime? createdAt,
|
||||
required this.name,
|
||||
required this.members,
|
||||
}) : id = id ?? const Uuid().v4(),
|
||||
createdAt = createdAt ?? clock.now();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
import 'package:clock/clock.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
class Player {
|
||||
final String id;
|
||||
final String name;
|
||||
final DateTime createdAt;
|
||||
|
||||
Player({String? id, required this.name}) : id = id ?? const Uuid().v4();
|
||||
Player({String? id, DateTime? createdAt, required this.name})
|
||||
: id = id ?? const Uuid().v4(),
|
||||
createdAt = createdAt ?? clock.now();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
|
||||
@@ -20,6 +20,7 @@ dependencies:
|
||||
provider: ^6.1.5
|
||||
skeletonizer: ^2.1.0+1
|
||||
uuid: ^4.5.2
|
||||
clock: ^1.1.2
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:clock/clock.dart';
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:drift/native.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
@@ -15,6 +16,8 @@ void main() {
|
||||
late Player player5;
|
||||
late Group testgroup;
|
||||
late Game testgame;
|
||||
final fixedDate = DateTime(2025, 19, 11, 00, 11, 23);
|
||||
final fakeClock = Clock(() => fixedDate);
|
||||
|
||||
setUp(() {
|
||||
database = AppDatabase(
|
||||
@@ -25,17 +28,22 @@ void main() {
|
||||
),
|
||||
);
|
||||
|
||||
player1 = Player(name: 'Alice');
|
||||
player2 = Player(name: 'Bob');
|
||||
player3 = Player(name: 'Charlie');
|
||||
player4 = Player(name: 'Diana');
|
||||
player5 = Player(name: 'Eve');
|
||||
testgroup = Group(name: 'Test Group', members: [player1, player2, player3]);
|
||||
testgame = Game(
|
||||
name: 'Test Game',
|
||||
group: testgroup,
|
||||
players: [player4, player5],
|
||||
);
|
||||
withClock(fakeClock, () {
|
||||
player1 = Player(name: 'Alice');
|
||||
player2 = Player(name: 'Bob');
|
||||
player3 = Player(name: 'Charlie');
|
||||
player4 = Player(name: 'Diana');
|
||||
player5 = Player(name: 'Eve');
|
||||
testgroup = Group(
|
||||
name: 'Test Group',
|
||||
members: [player1, player2, player3],
|
||||
);
|
||||
testgame = Game(
|
||||
name: 'Test Game',
|
||||
group: testgroup,
|
||||
players: [player4, player5],
|
||||
);
|
||||
});
|
||||
});
|
||||
tearDown(() async {
|
||||
await database.close();
|
||||
@@ -50,6 +58,7 @@ void main() {
|
||||
expect(result.id, testgame.id);
|
||||
expect(result.name, testgame.name);
|
||||
expect(result.winner, testgame.winner);
|
||||
expect(result.createdAt, testgame.createdAt);
|
||||
|
||||
if (result.group != null) {
|
||||
expect(result.group!.members.length, testgroup.members.length);
|
||||
@@ -67,6 +76,7 @@ void main() {
|
||||
for (int i = 0; i < testgame.players!.length; i++) {
|
||||
expect(result.players![i].id, testgame.players![i].id);
|
||||
expect(result.players![i].name, testgame.players![i].name);
|
||||
expect(result.players![i].createdAt, testgame.players![i].createdAt);
|
||||
}
|
||||
} else {
|
||||
fail('Players is null');
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:clock/clock.dart';
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:drift/native.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
@@ -12,6 +13,9 @@ void main() {
|
||||
late Player player3;
|
||||
late Player player4;
|
||||
late Group testgroup;
|
||||
late Group testgroup2;
|
||||
final fixedDate = DateTime(2025, 19, 11, 00, 11, 23);
|
||||
final fakeClock = Clock(() => fixedDate);
|
||||
|
||||
setUp(() {
|
||||
database = AppDatabase(
|
||||
@@ -22,22 +26,27 @@ void main() {
|
||||
),
|
||||
);
|
||||
|
||||
player1 = Player(name: 'Alice');
|
||||
player2 = Player(name: 'Bob');
|
||||
player3 = Player(name: 'Charlie');
|
||||
player4 = Player(name: 'Diana');
|
||||
testgroup = Group(name: 'Test Group', members: [player1, player2, player3]);
|
||||
withClock(fakeClock, () {
|
||||
player1 = Player(name: 'Alice');
|
||||
player2 = Player(name: 'Bob');
|
||||
player3 = Player(name: 'Charlie');
|
||||
player4 = Player(name: 'Diana');
|
||||
testgroup = Group(
|
||||
name: 'Test Group',
|
||||
members: [player1, player2, player3],
|
||||
);
|
||||
testgroup2 = Group(
|
||||
id: 'gr2',
|
||||
name: 'Second Group',
|
||||
members: [player2, player3, player4],
|
||||
);
|
||||
});
|
||||
});
|
||||
tearDown(() async {
|
||||
await database.close();
|
||||
});
|
||||
group('group tests', () {
|
||||
test('all groups get fetched correctly', () async {
|
||||
final testgroup2 = Group(
|
||||
id: 'gr2',
|
||||
name: 'Second Group',
|
||||
members: [player2, player3, player4],
|
||||
);
|
||||
await database.groupDao.addGroup(group: testgroup);
|
||||
await database.groupDao.addGroup(group: testgroup2);
|
||||
|
||||
@@ -48,11 +57,13 @@ void main() {
|
||||
expect(fetchedGroup1.name, testgroup.name);
|
||||
expect(fetchedGroup1.members.length, testgroup.members.length);
|
||||
expect(fetchedGroup1.members.elementAt(0).id, player1.id);
|
||||
expect(fetchedGroup1.members.elementAt(0).createdAt, player1.createdAt);
|
||||
|
||||
final fetchedGroup2 = allGroups.firstWhere((g) => g.id == testgroup2.id);
|
||||
expect(fetchedGroup2.name, testgroup2.name);
|
||||
expect(fetchedGroup2.members.length, testgroup2.members.length);
|
||||
expect(fetchedGroup2.members.elementAt(0).id, player2.id);
|
||||
expect(fetchedGroup2.members.elementAt(0).createdAt, player2.createdAt);
|
||||
});
|
||||
|
||||
test('group and group members gets added correctly', () async {
|
||||
@@ -64,11 +75,13 @@ void main() {
|
||||
|
||||
expect(result.id, testgroup.id);
|
||||
expect(result.name, testgroup.name);
|
||||
expect(result.createdAt, testgroup.createdAt);
|
||||
|
||||
expect(result.members.length, testgroup.members.length);
|
||||
for (int i = 0; i < testgroup.members.length; i++) {
|
||||
expect(result.members[i].id, testgroup.members[i].id);
|
||||
expect(result.members[i].name, testgroup.members[i].name);
|
||||
expect(result.members[i].createdAt, testgroup.members[i].createdAt);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -124,8 +137,6 @@ void main() {
|
||||
|
||||
expect(playerNotAdded, true);
|
||||
|
||||
expect(playerAdded, true);
|
||||
|
||||
final result = await database.groupDao.getGroupById(
|
||||
groupId: testgroup.id,
|
||||
);
|
||||
@@ -133,6 +144,7 @@ void main() {
|
||||
|
||||
final addedPlayer = result.members.firstWhere((p) => p.id == player4.id);
|
||||
expect(addedPlayer.name, player4.name);
|
||||
expect(addedPlayer.createdAt, player4.createdAt);
|
||||
});
|
||||
|
||||
test('Removing player from group works correctly', () async {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:clock/clock.dart';
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:drift/native.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
@@ -7,6 +8,9 @@ import 'package:game_tracker/data/dto/player.dart';
|
||||
void main() {
|
||||
late AppDatabase database;
|
||||
late Player testPlayer;
|
||||
late Player testPlayer2;
|
||||
final fixedDate = DateTime(2025, 19, 11, 00, 11, 23);
|
||||
final fakeClock = Clock(() => fixedDate);
|
||||
|
||||
setUp(() {
|
||||
database = AppDatabase(
|
||||
@@ -17,7 +21,10 @@ void main() {
|
||||
),
|
||||
);
|
||||
|
||||
testPlayer = Player(name: 'Test Player');
|
||||
withClock(fakeClock, () {
|
||||
testPlayer = Player(name: 'Test Player');
|
||||
testPlayer2 = Player(name: 'Second Group');
|
||||
});
|
||||
});
|
||||
tearDown(() async {
|
||||
await database.close();
|
||||
@@ -25,7 +32,6 @@ void main() {
|
||||
|
||||
group('player tests', () {
|
||||
|
sneeex marked this conversation as resolved
Outdated
flixcoo
commented
Kannst du anstatt die fake clock verwenden nicht einfach überprüfen ob die timestamp des players = timestamp des db players ist? Kannst du anstatt die fake clock verwenden nicht einfach überprüfen ob die timestamp des players = timestamp des db players ist?
sneeex
commented
Nein ist ungenau, hab's probiert, funkt net Nein ist ungenau, hab's probiert, funkt net
sneeex
commented
Gibt dann abweichungen von Millisekunden, vermutlich weil die DB nicht so genau speichern kann wie das datetime object, weil die DB intern nämlich timestamps speichert und der ja nicht so genau ist. ["Drift supports two approaches of storing DateTime values in SQL: Gibt dann abweichungen von Millisekunden, vermutlich weil die DB nicht so genau speichern kann wie das datetime object, weil die DB intern nämlich timestamps speichert und der ja nicht so genau ist.
_["Drift supports two approaches of storing DateTime values in SQL:
As unix timestamp (the default): In this mode, drift stores date time values as an SQL INTEGER containing the unix timestamp (in seconds).]_
flixcoo
commented
Und wenn du ein Datum übergibst und danach checkst? Wir müssen ja nicht Testen das Datetime funktioniert sondern nur das der datentransfer geht Und wenn du ein Datum übergibst und danach checkst? Wir müssen ja nicht Testen das Datetime funktioniert sondern nur das der datentransfer geht
sneeex
commented
Ich finde das so schön und ist wohl auch Common practice, spricht doch nichts dagegen oder? Ich will ja eben auch wissen, ob der das Datum mit Zeit in der richtigen Genauigkeit speichert und nicht nur ob er es überhaupt tut. Sollte es mal durch ein Update oder so nicht mehr korrekt sein, ist es ja wichtig zu wissen, ob der datetime der in der DB gespeichert ist dem wahren entspricht. Außerdem will ich das ja so realitätsgetreu wie möglich halten und das datetime auch von der Klasse selbst erzeugen lassen, auch wenn ich es hijacke und nicht selber bei den Playern, groups und Games setzen. Ich finde das so schön und ist wohl auch Common practice, spricht doch nichts dagegen oder? Ich will ja eben auch wissen, ob der das Datum mit Zeit in der richtigen Genauigkeit speichert und nicht nur ob er es überhaupt tut. Sollte es mal durch ein Update oder so nicht mehr korrekt sein, ist es ja wichtig zu wissen, ob der datetime der in der DB gespeichert ist dem wahren entspricht. Außerdem will ich das ja so realitätsgetreu wie möglich halten und das datetime auch von der Klasse selbst erzeugen lassen, auch wenn ich es hijacke und nicht selber bei den Playern, groups und Games setzen.
flixcoo
commented
Also was mich halt bisschen genervt hat, das man diverse Sachen jetzt in Also was mich halt bisschen genervt hat, das man diverse Sachen jetzt in `await withClock(fakeClock, () async {});` wrappen muss. Kannst du es nicht sonst so machen, dass alle Objekte die genutzt werden in der `setUp(() {});` Methode erstellt, damit man die fake clock nicht mehr in den einzelnen Tests brauch?
sneeex
commented
Bestimmt muss mal schauen > Also was mich halt bisschen genervt hat, das man diverse Sachen jetzt in `await withClock(fakeClock, () async {});` wrappen muss. Kannst du es nicht sonst so machen, dass alle Objekte die genutzt werden in der `setUp(() {});` Methode erstellt, damit man die fake clock nicht mehr in den einzelnen Tests brauch?
Bestimmt muss mal schauen
|
||||
test('all players get fetched correctly', () async {
|
||||
final testPlayer2 = Player(name: 'Second Group');
|
||||
await database.playerDao.addPlayer(player: testPlayer);
|
||||
await database.playerDao.addPlayer(player: testPlayer2);
|
||||
|
||||
@@ -36,11 +42,13 @@ void main() {
|
||||
(g) => g.id == testPlayer.id,
|
||||
);
|
||||
expect(fetchedPlayer1.name, testPlayer.name);
|
||||
expect(fetchedPlayer1.createdAt, testPlayer.createdAt);
|
||||
|
||||
final fetchedPlayer2 = allPlayers.firstWhere(
|
||||
(g) => g.id == testPlayer2.id,
|
||||
);
|
||||
expect(fetchedPlayer2.name, testPlayer2.name);
|
||||
expect(fetchedPlayer2.createdAt, testPlayer2.createdAt);
|
||||
});
|
||||
|
||||
test('players get inserted correcly ', () async {
|
||||
@@ -51,6 +59,7 @@ void main() {
|
||||
|
||||
expect(result.id, testPlayer.id);
|
||||
expect(result.name, testPlayer.name);
|
||||
expect(result.createdAt, testPlayer.createdAt);
|
||||
});
|
||||
|
||||
test('players get deleted correcly ', () async {
|
||||
|
||||
Warum Clock verwendet und nicht DateTime?
Datetime hat nicht die möglichkeit eine fakeclock zu erstellen, clock schon, nutzt aber under the hood afaik datetime