DefaultScope,
ForeignKey,
HasMany,
- IFindOptions,
Is,
Model,
Scopes,
import { ActorModel, unusedActorAttributesForAPI } from '../activitypub/actor'
import { buildServerIdsFollowedBy, buildTrigramSearchIndex, createSimilarityAttribute, getSort, throwIfNotValid } from '../utils'
import { VideoModel } from './video'
-import { CONSTRAINTS_FIELDS, WEBSERVER } from '../../initializers'
+import { CONSTRAINTS_FIELDS, WEBSERVER } from '../../initializers/constants'
import { ServerModel } from '../server/server'
-import { DefineIndexesOptions } from 'sequelize'
+import { FindOptions, ModelIndexesOptions, Op } from 'sequelize'
import { AvatarModel } from '../avatar/avatar'
import { VideoPlaylistModel } from './video-playlist'
// FIXME: Define indexes here because there is an issue with TS and Sequelize.literal when called directly in the annotation
-const indexes: DefineIndexesOptions[] = [
+const indexes: ModelIndexesOptions[] = [
buildTrigramSearchIndex('video_channel_name_trigram', 'name'),
{
actorId: number
}
-@DefaultScope({
+@DefaultScope(() => ({
include: [
{
- model: () => ActorModel,
+ model: ActorModel,
required: true
}
]
-})
-@Scopes({
+}))
+@Scopes(() => ({
[ScopeNames.SUMMARY]: (withAccount = false) => {
- const base: IFindOptions<VideoChannelModel> = {
+ const base: FindOptions = {
attributes: [ 'name', 'description', 'id', 'actorId' ],
include: [
{
},
model: ActorModel,
where: {
- [Sequelize.Op.or]: [
+ [Op.or]: [
{
serverId: null
},
{
serverId: {
- [ Sequelize.Op.in ]: Sequelize.literal(inQueryInstanceFollow)
+ [ Op.in ]: Sequelize.literal(inQueryInstanceFollow)
}
}
]
[ScopeNames.WITH_ACCOUNT]: {
include: [
{
- model: () => AccountModel,
+ model: AccountModel,
required: true
}
]
},
[ScopeNames.WITH_VIDEOS]: {
include: [
- () => VideoModel
+ VideoModel
]
},
[ScopeNames.WITH_ACTOR]: {
include: [
- () => ActorModel
+ ActorModel
]
}
-})
+}))
@Table({
tableName: 'videoChannel',
indexes
@AllowNull(true)
@Default(null)
- @Is('VideoChannelDescription', value => throwIfNotValid(value, isVideoChannelDescriptionValid, 'description'))
+ @Is('VideoChannelDescription', value => throwIfNotValid(value, isVideoChannelDescriptionValid, 'description', true))
@Column(DataType.STRING(CONSTRAINTS_FIELDS.VIDEO_CHANNELS.DESCRIPTION.max))
description: string
@AllowNull(true)
@Default(null)
- @Is('VideoChannelSupport', value => throwIfNotValid(value, isVideoChannelSupportValid, 'support'))
+ @Is('VideoChannelSupport', value => throwIfNotValid(value, isVideoChannelSupportValid, 'support', true))
@Column(DataType.STRING(CONSTRAINTS_FIELDS.VIDEO_CHANNELS.SUPPORT.max))
support: string
limit: options.count,
order: getSort(options.sort),
where: {
- [Sequelize.Op.or]: [
+ [Op.or]: [
Sequelize.literal(
'lower(immutable_unaccent("VideoChannelModel"."name")) % lower(immutable_unaccent(' + escapedSearch + '))'
),