import { VideoModel } from './video'
import { CONSTRAINTS_FIELDS, WEBSERVER } from '../../initializers/constants'
import { ServerModel } from '../server/server'
-import { FindOptions, ModelIndexesOptions, Op } from 'sequelize'
+import { FindOptions, Op } from 'sequelize'
import { AvatarModel } from '../avatar/avatar'
import { VideoPlaylistModel } from './video-playlist'
import * as Bluebird from 'bluebird'
import {
MChannelAccountDefault,
MChannelActor,
- MChannelActorAccountDefaultVideos
+ MChannelActorAccountDefaultVideos,
+ MChannelAP,
+ MChannelFormattable,
+ MChannelSummaryFormattable
} from '../../typings/models/video'
-// FIXME: Define indexes here because there is an issue with TS and Sequelize.literal when called directly in the annotation
-const indexes: ModelIndexesOptions[] = [
- buildTrigramSearchIndex('video_channel_name_trigram', 'name'),
-
- {
- fields: [ 'accountId' ]
- },
- {
- fields: [ 'actorId' ]
- }
-]
-
export enum ScopeNames {
FOR_API = 'FOR_API',
WITH_ACCOUNT = 'WITH_ACCOUNT',
},
{
serverId: {
- [ Op.in ]: Sequelize.literal(inQueryInstanceFollow)
+ [Op.in]: Sequelize.literal(inQueryInstanceFollow)
}
}
]
}))
@Table({
tableName: 'videoChannel',
- indexes
+ indexes: [
+ buildTrigramSearchIndex('video_channel_name_trigram', 'name'),
+
+ {
+ fields: [ 'accountId' ]
+ },
+ {
+ fields: [ 'actorId' ]
+ }
+ ]
})
export class VideoChannelModel extends Model<VideoChannelModel> {
@BeforeDestroy
static async sendDeleteIfOwned (instance: VideoChannelModel, options) {
if (!instance.Actor) {
- instance.Actor = await instance.$get('Actor', { transaction: options.transaction }) as ActorModel
+ instance.Actor = await instance.$get('Actor', { transaction: options.transaction })
}
if (instance.Actor.isOwned()) {
}
static listByAccount (options: {
- accountId: number,
- start: number,
- count: number,
+ accountId: number
+ start: number
+ count: number
sort: string
}) {
const query = {
.findByPk(id, options)
}
- toFormattedJSON (): VideoChannel {
+ toFormattedSummaryJSON (this: MChannelSummaryFormattable): VideoChannelSummary {
+ const actor = this.Actor.toFormattedSummaryJSON()
+
+ return {
+ id: this.id,
+ name: actor.name,
+ displayName: this.getDisplayName(),
+ url: actor.url,
+ host: actor.host,
+ avatar: actor.avatar
+ }
+ }
+
+ toFormattedJSON (this: MChannelFormattable): VideoChannel {
const actor = this.Actor.toFormattedJSON()
const videoChannel = {
id: this.id,
return Object.assign(actor, videoChannel)
}
- toFormattedSummaryJSON (): VideoChannelSummary {
- const actor = this.Actor.toFormattedJSON()
-
- return {
- id: this.id,
- name: actor.name,
- displayName: this.getDisplayName(),
- url: actor.url,
- host: actor.host,
- avatar: actor.avatar
- }
- }
-
- toActivityPubObject (): ActivityPubActor {
- const obj = this.Actor.toActivityPubObject(this.name, 'VideoChannel')
+ toActivityPubObject (this: MChannelAP): ActivityPubActor {
+ const obj = this.Actor.toActivityPubObject(this.name)
return Object.assign(obj, {
summary: this.description,