// Translate for example "-name" to [ [ 'name', 'DESC' ], [ 'id', 'ASC' ] ]
function getSort (value: string, lastSort: string[] = [ 'id', 'ASC' ]) {
- const { direction, field } = buildDirectionAndField(value)
+ let { direction, field } = buildDirectionAndField(value)
+
+ if (field.toLowerCase() === 'match') { // Search
+ field = Sequelize.col('similarity')
+ }
return [ [ field, direction ], lastSort ]
}
let { direction, field } = buildDirectionAndField(value)
// Alias
- if (field.toLowerCase() === 'match') field = Sequelize.col('similarity')
-
- // Sort by aggregation
- if (field.toLowerCase() === 'trending') {
+ if (field.toLowerCase() === 'match') { // Search
+ field = Sequelize.col('similarity')
+ } else if (field.toLowerCase() === 'trending') { // Sort by aggregation
return [
[ Sequelize.fn('COALESCE', Sequelize.fn('SUM', Sequelize.col('VideoViews.views')), '0'), direction ],
)
}
+function buildBlockedAccountSQL (serverAccountId: number, userAccountId?: number) {
+ const blockerIds = [ serverAccountId ]
+ if (userAccountId) blockerIds.push(userAccountId)
+
+ const blockerIdsString = blockerIds.join(', ')
+
+ const query = 'SELECT "targetAccountId" AS "id" FROM "accountBlocklist" WHERE "accountId" IN (' + blockerIdsString + ')' +
+ ' UNION ALL ' +
+ 'SELECT "account"."id" AS "id" FROM account INNER JOIN "actor" ON account."actorId" = actor.id ' +
+ 'INNER JOIN "serverBlocklist" ON "actor"."serverId" = "serverBlocklist"."targetServerId" ' +
+ 'WHERE "serverBlocklist"."accountId" IN (' + blockerIdsString + ')'
+
+ return query
+}
+
// ---------------------------------------------------------------------------
export {
+ buildBlockedAccountSQL,
SortType,
getSort,
getVideoSort,