]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/models/request-video-qadu.ts
Better models define typing
[github/Chocobozzz/PeerTube.git] / server / models / request-video-qadu.ts
index 2b1ed07c9eb3a24820d2beeae078aa7abe6413d3..27ce0ff29ced0a0f620140b6921ef13944f8ffc9 100644 (file)
 */
 
 import { values } from 'lodash'
+import * as Sequelize from 'sequelize'
 
+import { database as db } from '../initializers/database'
 import { REQUEST_VIDEO_QADU_TYPES } from '../initializers'
-
-// ---------------------------------------------------------------------------
-
-module.exports = function (sequelize, DataTypes) {
-  const RequestVideoQadu = sequelize.define('RequestVideoQadu',
+import { addMethodsToModel } from './utils'
+import {
+  RequestVideoQaduClass,
+  RequestVideoQaduInstance,
+  RequestVideoQaduAttributes,
+
+  RequestVideoQaduMethods
+} from './request-video-qadu-interface'
+
+let RequestVideoQadu: Sequelize.Model<RequestVideoQaduInstance, RequestVideoQaduAttributes>
+let countTotalRequests: RequestVideoQaduMethods.CountTotalRequests
+let listWithLimitAndRandom: RequestVideoQaduMethods.ListWithLimitAndRandom
+let removeByRequestIdsAndPod: RequestVideoQaduMethods.RemoveByRequestIdsAndPod
+let removeAll: RequestVideoQaduMethods.RemoveAll
+
+export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) {
+  RequestVideoQadu = sequelize.define<RequestVideoQaduInstance, RequestVideoQaduAttributes>('RequestVideoQadu',
     {
       type: {
         type: DataTypes.ENUM(values(REQUEST_VIDEO_QADU_TYPES)),
@@ -32,26 +46,27 @@ module.exports = function (sequelize, DataTypes) {
         {
           fields: [ 'videoId' ]
         }
-      ],
-      classMethods: {
-        associate,
-
-        listWithLimitAndRandom,
-
-        countTotalRequests,
-        removeAll,
-        removeByRequestIdsAndPod
-      }
+      ]
     }
   )
 
+  const classMethods = [
+    associate,
+
+    listWithLimitAndRandom,
+    countTotalRequests,
+    removeAll,
+    removeByRequestIdsAndPod
+  ]
+  addMethodsToModel(RequestVideoQadu, classMethods)
+
   return RequestVideoQadu
 }
 
 // ------------------------------ STATICS ------------------------------
 
 function associate (models) {
-  this.belongsTo(models.Pod, {
+  RequestVideoQadu.belongsTo(models.Pod, {
     foreignKey: {
       name: 'podId',
       allowNull: false
@@ -59,7 +74,7 @@ function associate (models) {
     onDelete: 'CASCADE'
   })
 
-  this.belongsTo(models.Video, {
+  RequestVideoQadu.belongsTo(models.Video, {
     foreignKey: {
       name: 'videoId',
       allowNull: false
@@ -68,16 +83,16 @@ function associate (models) {
   })
 }
 
-function countTotalRequests (callback) {
+countTotalRequests = function (callback: RequestVideoQaduMethods.CountTotalRequestsCallback) {
   const query = {}
-  return this.count(query).asCallback(callback)
+  return RequestVideoQadu.count(query).asCallback(callback)
 }
 
-function listWithLimitAndRandom (limitPods, limitRequestsPerPod, callback) {
-  const self = this
-  const Pod = this.sequelize.models.Pod
+listWithLimitAndRandom = function (limitPods: number, limitRequestsPerPod: number, callback: RequestVideoQaduMethods.ListWithLimitAndRandomCallback) {
+  const Pod = db.Pod
+  const tableJoin = ''
 
-  Pod.listRandomPodIdsWithRequest(limitPods, 'RequestVideoQadus', function (err, podIds) {
+  Pod.listRandomPodIdsWithRequest(limitPods, 'RequestVideoQadus', tableJoin, function (err, podIds) {
     if (err) return callback(err)
 
     // We don't have friends that have requests
@@ -86,7 +101,7 @@ function listWithLimitAndRandom (limitPods, limitRequestsPerPod, callback) {
     const query = {
       include: [
         {
-          model: self.sequelize.models.Pod,
+          model: RequestVideoQadu['sequelize'].models.Pod,
           where: {
             id: {
               $in: podIds
@@ -94,12 +109,12 @@ function listWithLimitAndRandom (limitPods, limitRequestsPerPod, callback) {
           }
         },
         {
-          model: self.sequelize.models.Video
+          model: RequestVideoQadu['sequelize'].models.Video
         }
       ]
     }
 
-    self.findAll(query).asCallback(function (err, requests) {
+    RequestVideoQadu.findAll(query).asCallback(function (err, requests) {
       if (err) return callback(err)
 
       const requestsGrouped = groupAndTruncateRequests(requests, limitRequestsPerPod)
@@ -108,7 +123,7 @@ function listWithLimitAndRandom (limitPods, limitRequestsPerPod, callback) {
   })
 }
 
-function removeByRequestIdsAndPod (ids, podId, callback) {
+removeByRequestIdsAndPod = function (ids: number[], podId: number, callback: RequestVideoQaduMethods.RemoveByRequestIdsAndPodCallback) {
   const query = {
     where: {
       id: {
@@ -118,17 +133,17 @@ function removeByRequestIdsAndPod (ids, podId, callback) {
     }
   }
 
-  this.destroy(query).asCallback(callback)
+  RequestVideoQadu.destroy(query).asCallback(callback)
 }
 
-function removeAll (callback) {
+removeAll = function (callback: RequestVideoQaduMethods.RemoveAllCallback) {
   // Delete all requests
-  this.truncate({ cascade: true }).asCallback(callback)
+  RequestVideoQadu.truncate({ cascade: true }).asCallback(callback)
 }
 
 // ---------------------------------------------------------------------------
 
-function groupAndTruncateRequests (requests, limitRequestsPerPod) {
+function groupAndTruncateRequests (requests: RequestVideoQaduInstance[], limitRequestsPerPod: number) {
   const requestsGrouped = {}
 
   requests.forEach(function (request) {