X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Futils.ts;h=6694eda690b0570b0cd450decf3fbef5490539be;hb=8b9a525a180cc9f3a98c334cc052dcfc8f36dcd4;hp=edb8e1161916abcf8a7da00428a5edf064296d77;hpb=9a629c6efbe39dfac290347670ca41b0d7100f41;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/utils.ts b/server/models/utils.ts index edb8e1161..6694eda69 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 ], @@ -26,7 +29,7 @@ function getVideoSort (value: string, lastSort: string[] = [ 'id', 'ASC' ]) { ] } - return [ [ field, direction ], lastSort ] + return [ field.split('.').concat([ direction ]), lastSort ] } function getSortOnModel (model: any, value: string, lastSort: string[] = [ 'id', 'ASC' ]) { @@ -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,