mirror of
https://github.com/immich-app/immich.git
synced 2025-01-07 20:36:48 +01:00
6b1b5054f8
* wip * various fixes * new migration * fix test * add face search entity, update sql * update e2e * set storage to external
49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import { AssetEntity } from 'src/entities/asset.entity';
|
|
import { FaceSearchEntity } from 'src/entities/face-search.entity';
|
|
import { PersonEntity } from 'src/entities/person.entity';
|
|
import { Column, Entity, Index, ManyToOne, OneToOne, PrimaryGeneratedColumn } from 'typeorm';
|
|
|
|
@Entity('asset_faces', { synchronize: false })
|
|
@Index('IDX_asset_faces_assetId_personId', ['assetId', 'personId'])
|
|
@Index(['personId', 'assetId'])
|
|
export class AssetFaceEntity {
|
|
@PrimaryGeneratedColumn('uuid')
|
|
id!: string;
|
|
|
|
@Column()
|
|
assetId!: string;
|
|
|
|
@Column({ nullable: true, type: 'uuid' })
|
|
personId!: string | null;
|
|
|
|
@OneToOne(() => FaceSearchEntity, (faceSearchEntity) => faceSearchEntity.face, { cascade: ['insert'] })
|
|
faceSearch?: FaceSearchEntity;
|
|
|
|
@Column({ default: 0, type: 'int' })
|
|
imageWidth!: number;
|
|
|
|
@Column({ default: 0, type: 'int' })
|
|
imageHeight!: number;
|
|
|
|
@Column({ default: 0, type: 'int' })
|
|
boundingBoxX1!: number;
|
|
|
|
@Column({ default: 0, type: 'int' })
|
|
boundingBoxY1!: number;
|
|
|
|
@Column({ default: 0, type: 'int' })
|
|
boundingBoxX2!: number;
|
|
|
|
@Column({ default: 0, type: 'int' })
|
|
boundingBoxY2!: number;
|
|
|
|
@ManyToOne(() => AssetEntity, (asset) => asset.faces, { onDelete: 'CASCADE', onUpdate: 'CASCADE' })
|
|
asset!: AssetEntity;
|
|
|
|
@ManyToOne(() => PersonEntity, (person) => person.faces, {
|
|
onDelete: 'SET NULL',
|
|
onUpdate: 'CASCADE',
|
|
nullable: true,
|
|
})
|
|
person!: PersonEntity | null;
|
|
}
|