refactor watch queries

This commit is contained in:
shenlong-tanwen 2026-08-22 09:40:28 +05:30
parent fa44f1ea56
commit 66497fd8e5

View file

@ -22,18 +22,26 @@ class AuthUserRepository extends DatabaseAccessor<Drift> with $AuthUserRepositor
Drift get _db => attachedDatabase;
Selectable<UserDto?> get _authUserQuery => (_db.authUserEntity.select()..limit(1)).asyncMap(_toDto);
Selectable<UserDto?> get _authUserQuery {
final query = _db.select(_db.authUserEntity).join([
leftOuterJoin(
_db.userMetadataEntity,
_db.userMetadataEntity.userId.equalsExp(_db.authUserEntity.id) &
_db.userMetadataEntity.key.equalsValue(.preferences),
),
])..limit(1);
return query.map((row) {
final user = row.readTable(_db.authUserEntity);
final preferences = row.readTableOrNull(_db.userMetadataEntity);
return user.toDto(preferences != null ? [preferences.toDto()] : null);
});
}
Future<UserDto?> get() => _authUserQuery.getSingleOrNull();
Stream<UserDto?> watch() => _authUserQuery.watchSingleOrNull();
Future<UserDto> _toDto(AuthUserEntityData user) async {
final query = _db.userMetadataEntity.select()..where((e) => e.userId.equals(user.id));
final metadata = await query.map((row) => row.toDto()).get();
return user.toDto(metadata);
}
Future<UserDto> upsert(UserDto user) async {
await _db.authUserEntity.insertOnConflictUpdate(
AuthUserEntityCompanion(