hunk.code_window: import { IJobRepository, JobName } from '../job';
   import { AssetSearchOptions, IAssetRepository } from './asset.repository';
   export class AssetCore {
     constructor(private assetRepository: IAssetRepository, private jobRepository: IJobRepository) {}
     getAll(options: AssetSearchOptions) {
  
hunk.labels: keep replace keep keep keep keep keep
hunk.after_edit: import { AssetSearchOptions, IAssetRepository, LivePhotoSearchOptions } from './asset.repository';
  
hunk.file_path: server/libs/domain/src/asset/asset.core.ts
hunk.type: replace
file: import { AssetEntity, AssetType } from '@app/infra/entities';
  
  export interface AssetSearchOptions {
    isVisible?: boolean;
    type?: AssetType;
  }
  
  export enum WithoutProperty {
    THUMBNAIL = 'thumbnail',
    ENCODED_VIDEO = 'encoded-video',
    EXIF = 'exif',
    CLIP_ENCODING = 'clip-embedding',
    OBJECT_TAGS = 'object-tags',
  }
  
  export const IAssetRepository = 'IAssetRepository';
  
  export interface IAssetRepository {
    getByIds(ids: string[]): Promise<AssetEntity[]>;
    getWithout(property: WithoutProperty): Promise<AssetEntity[]>;
    getFirstAssetForAlbumId(albumId: string): Promise<AssetEntity | null>;
    deleteAll(ownerId: string): Promise<void>;
    getAll(options?: AssetSearchOptions): Promise<AssetEntity[]>;
    save(asset: Partial<AssetEntity>): Promise<AssetEntity>;
    findLivePhotoMatch(livePhotoCID: string, otherAssetId: string, type: AssetType): Promise<AssetEntity | null>;
  }
  