hunk.code_window:     });
     }
     findLivePhotoMatch(livePhotoCID: string, otherAssetId: string, type: AssetType): Promise<AssetEntity | null> {
       return this.repository.findOne({
         where: {
           id: Not(otherAssetId),
  
hunk.labels: keep keep keep replace keep keep keep
hunk.after_edit:   findLivePhotoMatch(options: LivePhotoSearchOptions): Promise<AssetEntity | null> {
       const { ownerId, otherAssetId, livePhotoCID, type } = options;
  
hunk.file_path: server/libs/infra/src/repositories/asset.repository.ts
hunk.type: replace
file: import { AssetEntity, AssetType } from '@app/infra/entities';
  import { IJobRepository, JobName } from '../job';
  import { AssetSearchOptions, IAssetRepository } from './asset.repository';
  
  export class AssetCore {
    constructor(private assetRepository: IAssetRepository, private jobRepository: IJobRepository) {}
  
    getAll(options: AssetSearchOptions) {
      return this.assetRepository.getAll(options);
    }
  
    async save(asset: Partial<AssetEntity>) {
      const _asset = await this.assetRepository.save(asset);
      await this.jobRepository.queue({
        name: JobName.SEARCH_INDEX_ASSET,
        data: { ids: [_asset.id] },
      });
      return _asset;
    }
  
    findLivePhotoMatch(livePhotoCID: string, otherAssetId: string, type: AssetType): Promise<AssetEntity | null> {
      return this.assetRepository.findLivePhotoMatch(livePhotoCID, otherAssetId, type);
    }
  }
  