Fix sort inconsistency
authorChocobozzz <me@florianbigard.com>
Mon, 19 Feb 2018 08:41:03 +0000 (09:41 +0100)
committerChocobozzz <me@florianbigard.com>
Mon, 19 Feb 2018 09:48:44 +0000 (10:48 +0100)
server/models/account/account.ts
server/models/account/user.ts
server/models/activitypub/actor-follow.ts
server/models/utils.ts
server/models/video/video-abuse.ts
server/models/video/video-blacklist.ts
server/models/video/video-channel.ts
server/models/video/video-comment.ts
server/models/video/video.ts

index d8f305c376814fc306a4314256274684a09dec36..54ec7cfccaf31c2d98128d9430d6bd387764a499 100644 (file)
@@ -197,7 +197,7 @@ export class AccountModel extends Model<AccountModel> {
     const query = {
       offset: start,
       limit: count,
-      order: [ getSort(sort) ]
+      order: getSort(sort),
     }
 
     return AccountModel.findAndCountAll(query)
index 65392190781aae67982c2d165919354c71c01fab..292a5d1501f99048a429c9e701bed33a809f238c 100644 (file)
@@ -125,7 +125,7 @@ export class UserModel extends Model<UserModel> {
     const query = {
       offset: start,
       limit: count,
-      order: [ getSort(sort) ]
+      order: getSort(sort),
     }
 
     return UserModel.findAndCountAll(query)
index a32f5f4981fcb3f4aa6830be1065504a4a20cfa0..8260904a156ceeb9857f7d9aa40df8a523be1c0c 100644 (file)
@@ -215,7 +215,7 @@ export class ActorFollowModel extends Model<ActorFollowModel> {
       distinct: true,
       offset: start,
       limit: count,
-      order: [ getSort(sort) ],
+      order: getSort(sort),
       include: [
         {
           model: ActorModel,
@@ -248,7 +248,7 @@ export class ActorFollowModel extends Model<ActorFollowModel> {
       distinct: true,
       offset: start,
       limit: count,
-      order: [ getSort(sort) ],
+      order: getSort(sort),
       include: [
         {
           model: ActorModel,
index 1606453e0e45212e04cf9591dc119415ea0f1816..59ce83c16e09a79b3fbeac8a97a2b016b0e6e7a5 100644 (file)
@@ -1,5 +1,5 @@
-// Translate for example "-name" to [ 'name', 'DESC' ]
-function getSort (value: string) {
+// Translate for example "-name" to [ [ 'name', 'DESC' ], [ 'id', 'ASC' ] ]
+function getSort (value: string, lastSort: string[] = [ 'id', 'ASC' ]) {
   let field: string
   let direction: 'ASC' | 'DESC'
 
@@ -11,14 +11,14 @@ function getSort (value: string) {
     field = value
   }
 
-  return [ field, direction ]
+  return [ [ field, direction ], lastSort ]
 }
 
-function getSortOnModel (model: any, value: string) {
-  let sort = getSort(value)
+function getSortOnModel (model: any, value: string, lastSort: string[] = [ 'id', 'ASC' ]) {
+  let [ firstSort ] = getSort(value)
 
-  if (model) return [ model, sort[0], sort[1] ]
-  return sort
+  if (model) return [ [ model, firstSort[0], firstSort[1] ], lastSort ]
+  return [ firstSort, lastSort ]
 }
 
 function throwIfNotValid (value: any, validator: (value: any) => boolean, fieldName = 'value') {
index cc7078ae7966541ecea1c3bb79a542af19fc178c..65b734442564c667940dd8686b39ad4dd5860c1e 100644 (file)
@@ -64,7 +64,7 @@ export class VideoAbuseModel extends Model<VideoAbuseModel> {
     const query = {
       offset: start,
       limit: count,
-      order: [ getSort(sort) ],
+      order: getSort(sort),
       include: [
         {
           model: AccountModel,
index 3adcec149f402a1956f952e51b8bdbd3a9e588ca..26167174abe8ff6234045ae0ab14897f6e64e234 100644 (file)
@@ -36,7 +36,7 @@ export class VideoBlacklistModel extends Model<VideoBlacklistModel> {
     const query = {
       offset: start,
       limit: count,
-      order: [ getSortOnModel(sort.sortModel, sort.sortValue) ],
+      order: getSortOnModel(sort.sortModel, sort.sortValue),
       include: [ { model: VideoModel } ]
     }
 
index 289775a0f93312d42e3149bf1c965983ebad04cb..40f3be7fe562ff8826ab5411fb7ec233c8938700 100644 (file)
@@ -151,7 +151,7 @@ export class VideoChannelModel extends Model<VideoChannelModel> {
     const query = {
       offset: start,
       limit: count,
-      order: [ getSort(sort) ]
+      order: getSort(sort)
     }
 
     return VideoChannelModel
@@ -164,7 +164,7 @@ export class VideoChannelModel extends Model<VideoChannelModel> {
 
   static listByAccount (accountId: number) {
     const query = {
-      order: [ getSort('createdAt') ],
+      order: getSort('createdAt'),
       include: [
         {
           model: AccountModel,
index ab0f05d6e50b3af1875fb755d841c2c33529d558..47e3211a3f35304f87a09d04e000d9a7fb79a0e5 100644 (file)
@@ -268,7 +268,7 @@ export class VideoCommentModel extends Model<VideoCommentModel> {
     const query = {
       offset: start,
       limit: count,
-      order: [ getSort(sort) ],
+      order: getSort(sort),
       where: {
         videoId,
         inReplyToCommentId: null
index aa1878caac311566ae88dedbc5cf7bba4ae02349..59a39b1a9a2825270d2d5ca4a91d757bcbebf129 100644 (file)
@@ -493,7 +493,7 @@ export class VideoModel extends Model<VideoModel> {
       distinct: true,
       offset: start,
       limit: count,
-      order: [ getSort('createdAt'), [ 'Tags', 'name', 'ASC' ] ],
+      order: getSort('createdAt', [ 'Tags', 'name', 'ASC' ]),
       where: {
         id: {
           [Sequelize.Op.in]: Sequelize.literal('(' + rawQuery + ')')
@@ -607,7 +607,7 @@ export class VideoModel extends Model<VideoModel> {
     const query = {
       offset: start,
       limit: count,
-      order: [ getSort(sort) ],
+      order: getSort(sort),
       include: [
         {
           model: VideoChannelModel,
@@ -637,7 +637,7 @@ export class VideoModel extends Model<VideoModel> {
     const query = {
       offset: start,
       limit: count,
-      order: [ getSort(sort) ]
+      order: getSort(sort),
     }
 
     const serverActor = await getServerActor()
@@ -656,7 +656,7 @@ export class VideoModel extends Model<VideoModel> {
     const query: IFindOptions<VideoModel> = {
       offset: start,
       limit: count,
-      order: [ getSort(sort) ],
+      order: getSort(sort),
       where: {
         name: {
           [Sequelize.Op.iLike]: '%' + value + '%'