mirror of
https://github.com/samsonjs/immich.git
synced 2026-03-25 09:15:56 +00:00
fix(mobile): inconsistent query for people (#24437)
* fix(mobile): inconsistent query for people * refactor: implement suggestions * refactor: refactored query impl suggestions
This commit is contained in:
parent
66733eb4c0
commit
9aa3fe82c1
1 changed files with 17 additions and 7 deletions
|
|
@ -1,4 +1,5 @@
|
||||||
import 'package:drift/drift.dart';
|
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/domain/models/person.model.dart';
|
||||||
import 'package:immich_mobile/infrastructure/entities/person.entity.drift.dart';
|
import 'package:immich_mobile/infrastructure/entities/person.entity.drift.dart';
|
||||||
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
|
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
|
||||||
|
|
@ -26,19 +27,28 @@ class DriftPeopleRepository extends DriftDatabaseRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<List<DriftPerson>> getAllPeople() async {
|
Future<List<DriftPerson>> getAllPeople() async {
|
||||||
|
final people = _db.personEntity;
|
||||||
|
final faces = _db.assetFaceEntity;
|
||||||
|
final assets = _db.remoteAssetEntity;
|
||||||
|
|
||||||
final query =
|
final query =
|
||||||
_db.select(_db.personEntity).join([
|
_db.select(people).join([
|
||||||
leftOuterJoin(_db.assetFaceEntity, _db.assetFaceEntity.personId.equalsExp(_db.personEntity.id)),
|
innerJoin(faces, faces.personId.equalsExp(people.id)),
|
||||||
|
innerJoin(assets, assets.id.equalsExp(faces.assetId)),
|
||||||
])
|
])
|
||||||
..where(_db.personEntity.isHidden.equals(false))
|
..where(
|
||||||
..groupBy([_db.personEntity.id], having: _db.assetFaceEntity.id.count().isBiggerOrEqualValue(3))
|
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([
|
..orderBy([
|
||||||
OrderingTerm(expression: _db.personEntity.name.equals('').not(), mode: OrderingMode.desc),
|
OrderingTerm(expression: people.name.equals('').not(), mode: OrderingMode.desc),
|
||||||
OrderingTerm(expression: _db.assetFaceEntity.id.count(), mode: OrderingMode.desc),
|
OrderingTerm(expression: faces.id.count(), mode: OrderingMode.desc),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return query.map((row) {
|
return query.map((row) {
|
||||||
final person = row.readTable(_db.personEntity);
|
final person = row.readTable(people);
|
||||||
return person.toDto();
|
return person.toDto();
|
||||||
}).get();
|
}).get();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue