X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Futils.ts;h=0b6ac8340be0ee099bdd127c0964306faa830f14;hb=0a8a79552cf59c800011c9f63eaa8658230acddc;hp=88e31f22e0f6f1f92d0762d1a64f986f25c97522;hpb=87a0cac618c8ed4a09408273d0f5a468530e8062;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/utils.ts b/server/models/utils.ts index 88e31f22e..0b6ac8340 100644 --- a/server/models/utils.ts +++ b/server/models/utils.ts @@ -1,5 +1,6 @@ import { literal, Op, OrderItem, Sequelize } from 'sequelize' import validator from 'validator' +import { forceNumber } from '@shared/core-utils' type SortType = { sortModel: string, sortValue: string } @@ -117,9 +118,19 @@ function getInstanceFollowsSort (value: string, lastSort: OrderItem = [ 'id', 'A return getSort(value, lastSort) } +function getChannelSyncSort (value: string): OrderItem[] { + const { direction, field } = buildDirectionAndField(value) + if (field.toLowerCase() === 'videochannel') { + return [ + [ literal('"VideoChannel.name"'), direction ] + ] + } + return [ [ field, direction ] ] +} + function isOutdated (model: { createdAt: Date, updatedAt: Date }, refreshInterval: number) { if (!model.createdAt || !model.updatedAt) { - throw new Error('Miss createdAt & updatedAt attribuets to model') + throw new Error('Miss createdAt & updatedAt attributes to model') } const now = Date.now() @@ -192,7 +203,7 @@ function buildBlockedAccountSQLOptimized (columnNameJoin: string, blockerIds: nu } function buildServerIdsFollowedBy (actorId: any) { - const actorIdNumber = parseInt(actorId + '', 10) + const actorIdNumber = forceNumber(actorId) return '(' + 'SELECT "actor"."serverId" FROM "actorFollow" ' + @@ -208,7 +219,7 @@ function buildWhereIdOrUUID (id: number | string) { function parseAggregateResult (result: any) { if (!result) return 0 - const total = parseInt(result + '', 10) + const total = forceNumber(result) if (isNaN(total)) return 0 return total @@ -220,12 +231,12 @@ function parseRowCountResult (result: any) { return 0 } -function createSafeIn (sequelize: Sequelize, stringArr: (string | number)[]) { - return stringArr.map(t => { +function createSafeIn (sequelize: Sequelize, toEscape: (string | number)[], additionalUnescaped: string[] = []) { + return toEscape.map(t => { return t === null ? null : sequelize.escape('' + t) - }).join(', ') + }).concat(additionalUnescaped).join(', ') } function buildLocalAccountIdsIn () { @@ -280,6 +291,7 @@ export { getAdminUsersSort, getVideoSort, getBlacklistSort, + getChannelSyncSort, createSimilarityAttribute, throwIfNotValid, buildServerIdsFollowedBy,