import { Model, Sequelize } from 'sequelize-typescript'
import validator from 'validator'
import { Col } from 'sequelize/types/lib/utils'
-import { literal, OrderItem } from 'sequelize'
+import { literal, OrderItem, Op } from 'sequelize'
type SortType = { sortModel: string, sortValue: string }
)
}
-function buildBlockedAccountSQL (serverAccountId: number, userAccountId?: number) {
- const blockerIds = [ serverAccountId ]
- if (userAccountId) blockerIds.push(userAccountId)
-
+function buildBlockedAccountSQL (blockerIds: number[]) {
const blockerIdsString = blockerIds.join(', ')
return 'SELECT "targetAccountId" AS "id" FROM "accountBlocklist" WHERE "accountId" IN (' + blockerIdsString + ')' +
'WHERE "serverBlocklist"."accountId" IN (' + blockerIdsString + ')'
}
+function buildBlockedAccountSQLOptimized (columnNameJoin: string, blockerIds: number[]) {
+ const blockerIdsString = blockerIds.join(', ')
+
+ return [
+ literal(
+ `NOT EXISTS (` +
+ ` SELECT 1 FROM "accountBlocklist" ` +
+ ` WHERE "targetAccountId" = ${columnNameJoin} ` +
+ ` AND "accountId" IN (${blockerIdsString})` +
+ `)`
+ ),
+
+ literal(
+ `NOT EXISTS (` +
+ ` SELECT 1 FROM "account" ` +
+ ` INNER JOIN "actor" ON account."actorId" = actor.id ` +
+ ` INNER JOIN "serverBlocklist" ON "actor"."serverId" = "serverBlocklist"."targetServerId" ` +
+ ` WHERE "account"."id" = ${columnNameJoin} ` +
+ ` AND "serverBlocklist"."accountId" IN (${blockerIdsString})` +
+ `)`
+ )
+ ]
+}
+
function buildServerIdsFollowedBy (actorId: any) {
const actorIdNumber = parseInt(actorId + '', 10)
return { direction, field }
}
+function searchAttribute (sourceField?: string, targetField?: string) {
+ if (!sourceField) return {}
+
+ return {
+ [targetField]: {
+ [Op.iLike]: `%${sourceField}%`
+ }
+ }
+}
+
// ---------------------------------------------------------------------------
export {
buildBlockedAccountSQL,
+ buildBlockedAccountSQLOptimized,
buildLocalActorIdsIn,
SortType,
buildLocalAccountIdsIn,
parseAggregateResult,
getFollowsSort,
buildDirectionAndField,
- createSafeIn
+ createSafeIn,
+ searchAttribute
}
// ---------------------------------------------------------------------------