import { logger } from '../../helpers/logger' import { CONFIG, SORTABLE_COLUMNS } from '../../initializers/constants' import { DBChannel, IndexableChannel } from '../../types/channel.model' import { formatChannelForDB } from '../meilisearch/meilisearch-channels' import { getChannel } from '../requests/peertube-instance' import { AbstractIndexer } from './shared' export class ChannelIndexer extends AbstractIndexer { protected readonly primaryKey = 'primaryKey' protected readonly filterableAttributes = [ 'url', 'host', 'videosCount', 'ownerAccount.handle', 'handle' ] protected readonly sortableAttributes = SORTABLE_COLUMNS.CHANNELS_SEARCH // Keep the order, most important first protected readonly searchableAttributes = [ 'name', 'displayName', 'ownerAccount.displayName', 'description' ] constructor () { super(CONFIG.MEILISEARCH.INDEXES.CHANNELS, formatChannelForDB) } async indexSpecificElement (host: string, name: string) { const channel = await getChannel(host, name) logger.info('Indexing specific channel %s@%s.', name, host) return this.indexElements([ channel ]) } }