mirror of
https://github.com/immich-app/immich.git
synced 2026-03-01 18:19:10 +03:00
feat: asset face sync (#20048)
* chore: remove thumbnailPath from person sync dto * feat: asset face sync
This commit is contained in:
@@ -17,7 +17,8 @@ type AuditTables =
|
||||
| 'memory_asset_audit'
|
||||
| 'stack_audit'
|
||||
| 'person_audit'
|
||||
| 'user_metadata_audit';
|
||||
| 'user_metadata_audit'
|
||||
| 'asset_face_audit';
|
||||
type UpsertTables =
|
||||
| 'user'
|
||||
| 'partner'
|
||||
@@ -29,7 +30,8 @@ type UpsertTables =
|
||||
| 'memory_asset'
|
||||
| 'stack'
|
||||
| 'person'
|
||||
| 'user_metadata';
|
||||
| 'user_metadata'
|
||||
| 'asset_face';
|
||||
|
||||
@Injectable()
|
||||
export class SyncRepository {
|
||||
@@ -40,6 +42,7 @@ export class SyncRepository {
|
||||
albumUser: AlbumUserSync;
|
||||
asset: AssetSync;
|
||||
assetExif: AssetExifSync;
|
||||
assetFace: AssetFaceSync;
|
||||
memory: MemorySync;
|
||||
memoryToAsset: MemoryToAssetSync;
|
||||
partner: PartnerSync;
|
||||
@@ -59,6 +62,7 @@ export class SyncRepository {
|
||||
this.albumUser = new AlbumUserSync(this.db);
|
||||
this.asset = new AssetSync(this.db);
|
||||
this.assetExif = new AssetExifSync(this.db);
|
||||
this.assetFace = new AssetFaceSync(this.db);
|
||||
this.memory = new MemorySync(this.db);
|
||||
this.memoryToAsset = new MemoryToAssetSync(this.db);
|
||||
this.partner = new PartnerSync(this.db);
|
||||
@@ -385,7 +389,6 @@ class PersonSync extends BaseSync {
|
||||
'ownerId',
|
||||
'name',
|
||||
'birthDate',
|
||||
'thumbnailPath',
|
||||
'isHidden',
|
||||
'isFavorite',
|
||||
'color',
|
||||
@@ -398,6 +401,46 @@ class PersonSync extends BaseSync {
|
||||
}
|
||||
}
|
||||
|
||||
class AssetFaceSync extends BaseSync {
|
||||
@GenerateSql({ params: [DummyValue.UUID], stream: true })
|
||||
getDeletes(userId: string, ack?: SyncAck) {
|
||||
return this.db
|
||||
.selectFrom('asset_face_audit')
|
||||
.select(['asset_face_audit.id', 'assetFaceId'])
|
||||
.orderBy('asset_face_audit.id', 'asc')
|
||||
.leftJoin('asset', 'asset.id', 'asset_face_audit.assetId')
|
||||
.where('asset.ownerId', '=', userId)
|
||||
.where('asset_face_audit.deletedAt', '<', sql.raw<Date>("now() - interval '1 millisecond'"))
|
||||
.$if(!!ack, (qb) => qb.where('asset_face_audit.id', '>', ack!.updateId))
|
||||
.stream();
|
||||
}
|
||||
|
||||
@GenerateSql({ params: [DummyValue.UUID], stream: true })
|
||||
getUpserts(userId: string, ack?: SyncAck) {
|
||||
return this.db
|
||||
.selectFrom('asset_face')
|
||||
.select([
|
||||
'asset_face.id',
|
||||
'assetId',
|
||||
'personId',
|
||||
'imageWidth',
|
||||
'imageHeight',
|
||||
'boundingBoxX1',
|
||||
'boundingBoxY1',
|
||||
'boundingBoxX2',
|
||||
'boundingBoxY2',
|
||||
'sourceType',
|
||||
'asset_face.updateId',
|
||||
])
|
||||
.where('asset_face.updatedAt', '<', sql.raw<Date>("now() - interval '1 millisecond'"))
|
||||
.$if(!!ack, (qb) => qb.where('asset_face.updateId', '>', ack!.updateId))
|
||||
.orderBy('asset_face.updateId', 'asc')
|
||||
.leftJoin('asset', 'asset.id', 'asset_face.assetId')
|
||||
.where('asset.ownerId', '=', userId)
|
||||
.stream();
|
||||
}
|
||||
}
|
||||
|
||||
class AssetExifSync extends BaseSync {
|
||||
@GenerateSql({ params: [DummyValue.UUID], stream: true })
|
||||
getUpserts(userId: string, ack?: SyncAck) {
|
||||
|
||||
Reference in New Issue
Block a user