]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/models/abuse/abuse-message.ts
Merge branch 'release/4.2.0' into develop
[github/Chocobozzz/PeerTube.git] / server / models / abuse / abuse-message.ts
index f7721c87d7f5f40860a91dd7630e5312924fef0b..20008768be91dfbfa2936e4ba75e8f836050403e 100644 (file)
@@ -1,10 +1,12 @@
+import { FindOptions } from 'sequelize'
 import { AllowNull, BelongsTo, Column, CreatedAt, DataType, ForeignKey, Is, Model, Table, UpdatedAt } from 'sequelize-typescript'
 import { isAbuseMessageValid } from '@server/helpers/custom-validators/abuses'
+import { MAbuseMessage, MAbuseMessageFormattable } from '@server/types/models'
 import { AbuseMessage } from '@shared/models'
+import { AttributesOnly } from '@shared/typescript-utils'
 import { AccountModel, ScopeNames as AccountScopeNames } from '../account/account'
-import { throwIfNotValid, getSort } from '../utils'
+import { getSort, throwIfNotValid } from '../utils'
 import { AbuseModel } from './abuse'
-import { MAbuseMessageFormattable, MAbuseMessage } from '@server/types/models'
 
 @Table({
   tableName: 'abuseMessage',
@@ -17,7 +19,7 @@ import { MAbuseMessageFormattable, MAbuseMessage } from '@server/types/models'
     }
   ]
 })
-export class AbuseMessageModel extends Model<AbuseMessageModel> {
+export class AbuseMessageModel extends Model<Partial<AttributesOnly<AbuseMessageModel>>> {
 
   @AllowNull(false)
   @Is('AbuseMessage', value => throwIfNotValid(value, isAbuseMessageValid, 'message'))
@@ -61,21 +63,28 @@ export class AbuseMessageModel extends Model<AbuseMessageModel> {
   Abuse: AbuseModel
 
   static listForApi (abuseId: number) {
-    const options = {
-      where: { abuseId },
+    const getQuery = (forCount: boolean) => {
+      const query: FindOptions = {
+        where: { abuseId },
+        order: getSort('createdAt')
+      }
 
-      order: getSort('createdAt'),
+      if (forCount !== true) {
+        query.include = [
+          {
+            model: AccountModel.scope(AccountScopeNames.SUMMARY),
+            required: false
+          }
+        ]
+      }
 
-      include: [
-        {
-          model: AccountModel.scope(AccountScopeNames.SUMMARY),
-          required: false
-        }
-      ]
+      return query
     }
 
-    return AbuseMessageModel.findAndCountAll(options)
-      .then(({ rows, count }) => ({ data: rows, total: count }))
+    return Promise.all([
+      AbuseMessageModel.count(getQuery(true)),
+      AbuseMessageModel.findAll(getQuery(false))
+    ]).then(([ total, data ]) => ({ total, data }))
   }
 
   static loadByIdAndAbuseId (messageId: number, abuseId: number): Promise<MAbuseMessage> {
@@ -94,6 +103,8 @@ export class AbuseMessageModel extends Model<AbuseMessageModel> {
 
     return {
       id: this.id,
+      createdAt: this.createdAt,
+
       byModerator: this.byModerator,
       message: this.message,