import * as Bluebird from 'bluebird'
import { uniq } from 'lodash'
-import { FindOptions, Op, Order, ScopeOptions, Sequelize, Transaction } from 'sequelize'
+import { FindOptions, Op, Order, ScopeOptions, Sequelize, Transaction, WhereOptions } from 'sequelize'
import {
AllowNull,
BelongsTo,
import { VideoCommentAbuseModel } from '../abuse/video-comment-abuse'
import { AccountModel } from '../account/account'
import { ActorModel, unusedActorAttributesForAPI } from '../activitypub/actor'
-import { buildBlockedAccountSQL, buildLocalAccountIdsIn, getCommentSort, throwIfNotValid } from '../utils'
+import { buildBlockedAccountSQL, buildBlockedAccountSQLOptimized, buildLocalAccountIdsIn, getCommentSort, throwIfNotValid } from '../utils'
import { VideoModel } from './video'
import { VideoChannelModel } from './video-channel'
-enum ScopeNames {
+export enum ScopeNames {
WITH_ACCOUNT = 'WITH_ACCOUNT',
WITH_ACCOUNT_FOR_API = 'WITH_ACCOUNT_FOR_API',
WITH_IN_REPLY_TO = 'WITH_IN_REPLY_TO',
const serverActor = await getServerActor()
const { start, count, videoId, accountId, videoChannelId } = parameters
- const accountExclusion = {
- [Op.notIn]: Sequelize.literal(
- '(' + buildBlockedAccountSQL([ serverActor.Account.id, '"Video->VideoChannel"."accountId"' ]) + ')'
- )
+ const whereAnd: WhereOptions[] = buildBlockedAccountSQLOptimized(
+ '"VideoCommentModel"."accountId"',
+ [ serverActor.Account.id, '"Video->VideoChannel"."accountId"' ]
+ )
+
+ if (accountId) {
+ whereAnd.push({
+ [Op.eq]: accountId
+ })
+ }
+
+ const accountWhere = {
+ [Op.and]: whereAnd
}
- const accountWhere = accountId
- ? {
- [Op.and]: {
- ...accountExclusion,
- [Op.eq]: accountId
- }
- }
- : accountExclusion
const videoChannelWhere = videoChannelId ? { id: videoChannelId } : undefined