import { Insertable, Selectable, Updateable } from 'kysely'; import { AssetFaces, FaceSearch, Person } from 'src/db'; import { AssetFaceEntity } from 'src/entities/asset-face.entity'; import { PersonEntity } from 'src/entities/person.entity'; import { SourceType } from 'src/enum'; import { Paginated, PaginationOptions } from 'src/utils/pagination'; import { FindOptionsRelations } from 'typeorm'; export const IPersonRepository = 'IPersonRepository'; export interface PersonSearchOptions { minimumFaceCount: number; withHidden: boolean; closestFaceAssetId?: string; } export interface PersonNameSearchOptions { withHidden?: boolean; } export interface PersonNameResponse { id: string; name: string; } export interface AssetFaceId { assetId: string; personId: string; } export interface UpdateFacesData { oldPersonId?: string; faceIds?: string[]; newPersonId: string; } export interface PersonStatistics { assets: number; } export interface PeopleStatistics { total: number; hidden: number; } export interface DeleteFacesOptions { sourceType: SourceType; } export type UnassignFacesOptions = DeleteFacesOptions; export type SelectFaceOptions = (keyof Selectable)[]; export interface IPersonRepository { getAll(options?: Partial): AsyncIterableIterator; getAllForUser(pagination: PaginationOptions, userId: string, options: PersonSearchOptions): Paginated; getAllWithoutFaces(): Promise; getById(personId: string): Promise; getByName(userId: string, personName: string, options: PersonNameSearchOptions): Promise; getDistinctNames(userId: string, options: PersonNameSearchOptions): Promise; create(person: Insertable): Promise; createAll(people: Insertable[]): Promise; delete(entities: PersonEntity[]): Promise; deleteFaces(options: DeleteFacesOptions): Promise; refreshFaces( facesToAdd: Insertable[], faceIdsToRemove: string[], embeddingsToAdd?: Insertable[], ): Promise; getAllFaces(options?: Partial): AsyncIterableIterator; getFaceById(id: string): Promise; getFaceByIdWithAssets( id: string, relations?: FindOptionsRelations, select?: SelectFaceOptions, ): Promise; getFaces(assetId: string): Promise; getFacesByIds(ids: AssetFaceId[]): Promise; getRandomFace(personId: string): Promise; getStatistics(personId: string): Promise; reassignFace(assetFaceId: string, newPersonId: string): Promise; getNumberOfPeople(userId: string): Promise; reassignFaces(data: UpdateFacesData): Promise; unassignFaces(options: UnassignFacesOptions): Promise; update(person: Updateable & { id: string }): Promise; updateAll(people: Insertable[]): Promise; getLatestFaceDate(): Promise; }