X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=server%2Fmodels%2Futils.ts;h=60b0906e80964a4d5bf3e128dbd08b0b6289095e;hb=be0f59b4eec3c2c4dcd151e2b174be39dff1568e;hp=edb8e1161916abcf8a7da00428a5edf064296d77;hpb=9a629c6efbe39dfac290347670ca41b0d7100f41;p=oweals%2Fpeertube.git diff --git a/server/models/utils.ts b/server/models/utils.ts index edb8e1161..60b0906e8 100644 --- a/server/models/utils.ts +++ b/server/models/utils.ts @@ -4,7 +4,11 @@ type SortType = { sortModel: any, sortValue: string } // 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 ] } @@ -13,10 +17,9 @@ function getVideoSort (value: string, lastSort: string[] = [ 'id', 'ASC' ]) { 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 ], @@ -61,9 +64,25 @@ function createSimilarityAttribute (col: string, value: string) { ) } +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,