Compare commits

...

3 Commits

Author SHA1 Message Date
Yaros
83b7ebbdd1 refactor: refactored query impl suggestions 2026-02-02 12:40:36 +01:00
Yaros
816c1bf41b refactor: implement suggestions 2026-01-28 14:44:48 +01:00
Yaros
421844de03 fix(mobile): inconsistent query for people 2025-12-07 16:02:46 +01:00

View File

@@ -1,4 +1,5 @@
import 'package:drift/drift.dart';
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
import 'package:immich_mobile/domain/models/person.model.dart';
import 'package:immich_mobile/infrastructure/entities/person.entity.drift.dart';
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
@@ -19,19 +20,28 @@ class DriftPeopleRepository extends DriftDatabaseRepository {
}
Future<List<DriftPerson>> getAllPeople() async {
final people = _db.personEntity;
final faces = _db.assetFaceEntity;
final assets = _db.remoteAssetEntity;
final query =
_db.select(_db.personEntity).join([
leftOuterJoin(_db.assetFaceEntity, _db.assetFaceEntity.personId.equalsExp(_db.personEntity.id)),
_db.select(people).join([
innerJoin(faces, faces.personId.equalsExp(people.id)),
innerJoin(assets, assets.id.equalsExp(faces.assetId)),
])
..where(_db.personEntity.isHidden.equals(false))
..groupBy([_db.personEntity.id], having: _db.assetFaceEntity.id.count().isBiggerOrEqualValue(3))
..where(
people.isHidden.equals(false) &
assets.deletedAt.isNull() &
assets.visibility.equalsValue(AssetVisibility.timeline),
)
..groupBy([people.id], having: faces.id.count().isBiggerOrEqualValue(3) | people.name.equals('').not())
..orderBy([
OrderingTerm(expression: _db.personEntity.name.equals('').not(), mode: OrderingMode.desc),
OrderingTerm(expression: _db.assetFaceEntity.id.count(), mode: OrderingMode.desc),
OrderingTerm(expression: people.name.equals('').not(), mode: OrderingMode.desc),
OrderingTerm(expression: faces.id.count(), mode: OrderingMode.desc),
]);
return query.map((row) {
final person = row.readTable(_db.personEntity);
final person = row.readTable(people);
return person.toDto();
}).get();
}