diff --git a/mobile/lib/infrastructure/repositories/user.repository.dart b/mobile/lib/infrastructure/repositories/user.repository.dart index 97f9b595a8..9dfa5484d4 100644 --- a/mobile/lib/infrastructure/repositories/user.repository.dart +++ b/mobile/lib/infrastructure/repositories/user.repository.dart @@ -22,18 +22,26 @@ class AuthUserRepository extends DatabaseAccessor with $AuthUserRepositor Drift get _db => attachedDatabase; - Selectable get _authUserQuery => (_db.authUserEntity.select()..limit(1)).asyncMap(_toDto); + Selectable 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 get() => _authUserQuery.getSingleOrNull(); Stream watch() => _authUserQuery.watchSingleOrNull(); - Future _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 upsert(UserDto user) async { await _db.authUserEntity.insertOnConflictUpdate( AuthUserEntityCompanion(