27 lines
1.1 KiB
TypeScript
27 lines
1.1 KiB
TypeScript
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 <IndexableChannel, DBChannel> {
|
|
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 ])
|
|
}
|
|
}
|