X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Futils.ts;h=c468f748d50c7c984ec61d2f1bfcc9dfb5ce623c;hb=2e401e8575decb1d491d0db48ca1ab1eba5b2a66;hp=70bfbdb8bfa4748dc770186c7a95b913454df570;hpb=ab4b8974997777373a6032073f9c1aaf33ba9931;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/utils.ts b/server/models/utils.ts index 70bfbdb8b..c468f748d 100644 --- a/server/models/utils.ts +++ b/server/models/utils.ts @@ -11,8 +11,6 @@ function getSort (value: string, lastSort: OrderItem = [ 'id', 'ASC' ]): OrderIt if (field.toLowerCase() === 'match') { // Search finalField = Sequelize.col('similarity') - } else if (field === 'videoQuotaUsed') { // Users list - finalField = Sequelize.col('videoQuotaUsed') } else { finalField = field } @@ -20,6 +18,25 @@ function getSort (value: string, lastSort: OrderItem = [ 'id', 'ASC' ]): OrderIt return [ [ finalField, direction ], lastSort ] } +function getAdminUsersSort (value: string): OrderItem[] { + const { direction, field } = buildDirectionAndField(value) + + let finalField: string | ReturnType + + if (field === 'videoQuotaUsed') { // Users list + finalField = Sequelize.col('videoQuotaUsed') + } else { + finalField = field + } + + const nullPolicy = direction === 'ASC' + ? 'NULLS FIRST' + : 'NULLS LAST' + + // FIXME: typings + return [ [ finalField as any, direction, nullPolicy ], [ 'id', 'ASC' ] ] +} + function getPlaylistSort (value: string, lastSort: OrderItem = [ 'id', 'ASC' ]): OrderItem[] { const { direction, field } = buildDirectionAndField(value) @@ -87,12 +104,12 @@ function getBlacklistSort (model: any, value: string, lastSort: OrderItem = [ 'i return [ firstSort, lastSort ] } -function getFollowsSort (value: string, lastSort: OrderItem = [ 'id', 'ASC' ]): OrderItem[] { +function getInstanceFollowsSort (value: string, lastSort: OrderItem = [ 'id', 'ASC' ]): OrderItem[] { const { direction, field } = buildDirectionAndField(value) if (field === 'redundancyAllowed') { return [ - [ 'ActorFollowing', 'Server', 'redundancyAllowed', direction ], + [ 'ActorFollowing.Server.redundancyAllowed', direction ], lastSort ] } @@ -102,7 +119,7 @@ function getFollowsSort (value: string, lastSort: OrderItem = [ 'id', 'ASC' ]): 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() @@ -197,6 +214,12 @@ function parseAggregateResult (result: any) { return total } +function parseRowCountResult (result: any) { + if (result.length !== 0) return result[0].total + + return 0 +} + function createSafeIn (sequelize: Sequelize, stringArr: (string | number)[]) { return stringArr.map(t => { return t === null @@ -254,6 +277,7 @@ export { buildLocalAccountIdsIn, getSort, getCommentSort, + getAdminUsersSort, getVideoSort, getBlacklistSort, createSimilarityAttribute, @@ -263,10 +287,11 @@ export { buildWhereIdOrUUID, isOutdated, parseAggregateResult, - getFollowsSort, + getInstanceFollowsSort, buildDirectionAndField, createSafeIn, - searchAttribute + searchAttribute, + parseRowCountResult } // ---------------------------------------------------------------------------