mirror of
https://github.com/immich-app/immich.git
synced 2025-06-23 07:20:50 -04:00
fix: people ordering by asset count (#19366)
This commit is contained in:
parent
a5ed453929
commit
00aa385972
@ -125,12 +125,12 @@ describe('/people', () => {
|
|||||||
total: 11,
|
total: 11,
|
||||||
hidden: 1,
|
hidden: 1,
|
||||||
people: [
|
people: [
|
||||||
expect.objectContaining({ name: 'Bill' }),
|
|
||||||
expect.objectContaining({ name: 'Freddy' }),
|
expect.objectContaining({ name: 'Freddy' }),
|
||||||
expect.objectContaining({ name: 'Alice' }),
|
expect.objectContaining({ name: 'Bill' }),
|
||||||
expect.objectContaining({ name: 'Bob' }),
|
|
||||||
expect.objectContaining({ name: 'Charlie' }),
|
|
||||||
expect.objectContaining({ name: 'multiple_assets_person' }),
|
expect.objectContaining({ name: 'multiple_assets_person' }),
|
||||||
|
expect.objectContaining({ name: 'Bob' }),
|
||||||
|
expect.objectContaining({ name: 'Alice' }),
|
||||||
|
expect.objectContaining({ name: 'Charlie' }),
|
||||||
expect.objectContaining({ name: 'visible_person' }),
|
expect.objectContaining({ name: 'visible_person' }),
|
||||||
expect.objectContaining({ id: nameNullPerson4Assets.id, name: '' }),
|
expect.objectContaining({ id: nameNullPerson4Assets.id, name: '' }),
|
||||||
expect.objectContaining({ id: nameNullPerson3Assets.id, name: '' }),
|
expect.objectContaining({ id: nameNullPerson3Assets.id, name: '' }),
|
||||||
@ -150,12 +150,12 @@ describe('/people', () => {
|
|||||||
const people = body.people as PersonResponseDto[];
|
const people = body.people as PersonResponseDto[];
|
||||||
|
|
||||||
expect(people.map((p) => p.id)).toEqual([
|
expect(people.map((p) => p.id)).toEqual([
|
||||||
nameBillPersonFavourite.id, // name: 'Bill', count: 2
|
|
||||||
nameFreddyPersonFavourite.id, // name: 'Freddy', count: 2
|
nameFreddyPersonFavourite.id, // name: 'Freddy', count: 2
|
||||||
nameAlicePerson.id, // name: 'Alice', count: 1
|
nameBillPersonFavourite.id, // name: 'Bill', count: 1
|
||||||
nameBobPerson.id, // name: 'Bob', count: 2
|
|
||||||
nameCharliePerson.id, // name: 'Charlie', count: 1
|
|
||||||
multipleAssetsPerson.id, // name: 'multiple_assets_person', count: 3
|
multipleAssetsPerson.id, // name: 'multiple_assets_person', count: 3
|
||||||
|
nameBobPerson.id, // name: 'Bob', count: 2
|
||||||
|
nameAlicePerson.id, // name: 'Alice', count: 1
|
||||||
|
nameCharliePerson.id, // name: 'Charlie', count: 1
|
||||||
visiblePerson.id, // name: 'visible_person', count: 1
|
visiblePerson.id, // name: 'visible_person', count: 1
|
||||||
nameNullPerson4Assets.id, // name: '', count: 4
|
nameNullPerson4Assets.id, // name: '', count: 4
|
||||||
nameNullPerson3Assets.id, // name: '', count: 3
|
nameNullPerson3Assets.id, // name: '', count: 3
|
||||||
@ -173,12 +173,12 @@ describe('/people', () => {
|
|||||||
total: 11,
|
total: 11,
|
||||||
hidden: 1,
|
hidden: 1,
|
||||||
people: [
|
people: [
|
||||||
expect.objectContaining({ name: 'Bill' }),
|
|
||||||
expect.objectContaining({ name: 'Freddy' }),
|
expect.objectContaining({ name: 'Freddy' }),
|
||||||
expect.objectContaining({ name: 'Alice' }),
|
expect.objectContaining({ name: 'Bill' }),
|
||||||
expect.objectContaining({ name: 'Bob' }),
|
|
||||||
expect.objectContaining({ name: 'Charlie' }),
|
|
||||||
expect.objectContaining({ name: 'multiple_assets_person' }),
|
expect.objectContaining({ name: 'multiple_assets_person' }),
|
||||||
|
expect.objectContaining({ name: 'Bob' }),
|
||||||
|
expect.objectContaining({ name: 'Alice' }),
|
||||||
|
expect.objectContaining({ name: 'Charlie' }),
|
||||||
expect.objectContaining({ name: 'visible_person' }),
|
expect.objectContaining({ name: 'visible_person' }),
|
||||||
expect.objectContaining({ id: nameNullPerson4Assets.id, name: '' }),
|
expect.objectContaining({ id: nameNullPerson4Assets.id, name: '' }),
|
||||||
expect.objectContaining({ id: nameNullPerson3Assets.id, name: '' }),
|
expect.objectContaining({ id: nameNullPerson3Assets.id, name: '' }),
|
||||||
@ -197,7 +197,7 @@ describe('/people', () => {
|
|||||||
hasNextPage: true,
|
hasNextPage: true,
|
||||||
total: 11,
|
total: 11,
|
||||||
hidden: 1,
|
hidden: 1,
|
||||||
people: [expect.objectContaining({ name: 'Charlie' })],
|
people: [expect.objectContaining({ name: 'Alice' })],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -35,8 +35,9 @@ having
|
|||||||
order by
|
order by
|
||||||
"person"."isHidden" asc,
|
"person"."isHidden" asc,
|
||||||
"person"."isFavorite" desc,
|
"person"."isFavorite" desc,
|
||||||
NULLIF(person.name, '') asc nulls last,
|
NULLIF(person.name, '') is null asc,
|
||||||
count("asset_faces"."assetId") desc,
|
count("asset_faces"."assetId") desc,
|
||||||
|
NULLIF(person.name, '') asc nulls last,
|
||||||
"person"."createdAt"
|
"person"."createdAt"
|
||||||
limit
|
limit
|
||||||
$5
|
$5
|
||||||
|
@ -180,8 +180,9 @@ export class PersonRepository {
|
|||||||
)
|
)
|
||||||
.$if(!options?.closestFaceAssetId, (qb) =>
|
.$if(!options?.closestFaceAssetId, (qb) =>
|
||||||
qb
|
qb
|
||||||
.orderBy(sql`NULLIF(person.name, '')`, (om) => om.asc().nullsLast())
|
.orderBy(sql`NULLIF(person.name, '') is null`, 'asc')
|
||||||
.orderBy((eb) => eb.fn.count('asset_faces.assetId'), 'desc')
|
.orderBy((eb) => eb.fn.count('asset_faces.assetId'), 'desc')
|
||||||
|
.orderBy(sql`NULLIF(person.name, '')`, (om) => om.asc().nullsLast())
|
||||||
.orderBy('person.createdAt'),
|
.orderBy('person.createdAt'),
|
||||||
)
|
)
|
||||||
.$if(!options?.withHidden, (qb) => qb.where('person.isHidden', '=', false))
|
.$if(!options?.withHidden, (qb) => qb.where('person.isHidden', '=', false))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user