import { ResultList, Video, VideoChannel, VideoChannelsSearchQuery, VideoPlaylist, VideoPlaylistsSearchQuery, VideosSearchQuery } from '@shared/models' import { HttpStatusCode } from '../../core-utils/miscs/http-error-codes' import { AbstractCommand, OverrideCommandOptions } from '../shared' export class SearchCommand extends AbstractCommand { searchChannels (options: OverrideCommandOptions & { search: string }) { return this.advancedChannelSearch({ ...options, search: { search: options.search } }) } advancedChannelSearch (options: OverrideCommandOptions & { search: VideoChannelsSearchQuery }) { const { search, token } = options const path = '/api/v1/search/video-channels' return this.getRequestBody>({ ...options, token: token || null, path, query: search, defaultExpectedStatus: HttpStatusCode.OK_200 }) } searchPlaylists (options: OverrideCommandOptions & { search: string }) { return this.advancedPlaylistSearch({ ...options, search: { search: options.search } }) } advancedPlaylistSearch (options: OverrideCommandOptions & { search: VideoPlaylistsSearchQuery }) { const { search, token } = options const path = '/api/v1/search/video-playlists' return this.getRequestBody>({ ...options, token: token || null, path, query: search, defaultExpectedStatus: HttpStatusCode.OK_200 }) } searchVideos (options: OverrideCommandOptions & { search: string sort?: string }) { const { search, sort } = options return this.advancedVideoSearch({ ...options, search: { search: search, sort: sort ?? '-publishedAt' } }) } advancedVideoSearch (options: OverrideCommandOptions & { search: VideosSearchQuery }) { const { search, token } = options const path = '/api/v1/search/videos' return this.getRequestBody>({ ...options, token: token || null, path, query: search, defaultExpectedStatus: HttpStatusCode.OK_200 }) } }