]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/lib/request/request-video-qadu-scheduler.ts
Upgrade common server dependencies
[github/Chocobozzz/PeerTube.git] / server / lib / request / request-video-qadu-scheduler.ts
index 5ec7de9c206e1291aa2a6bb4bd9f13d0473f3991..afb9d5c23ba9cabb5e13e26bc1c4a425d27d1c0a 100644 (file)
@@ -1,7 +1,7 @@
 import * as Sequelize from 'sequelize'
 
 import { database as db } from '../../initializers/database'
-import { AbstractRequestScheduler } from './abstract-request-scheduler'
+import { AbstractRequestScheduler, RequestsObjects } from './abstract-request-scheduler'
 import { logger } from '../../helpers'
 import {
   REQUESTS_VIDEO_QADU_LIMIT_PODS,
@@ -9,12 +9,31 @@ import {
   REQUEST_VIDEO_QADU_ENDPOINT,
   REQUEST_VIDEO_QADU_TYPES
 } from '../../initializers'
-import { RequestsVideoQaduGrouped } from '../../models'
-import { RequestVideoQaduType } from '../../../shared'
+import { RequestsVideoQaduGrouped, PodInstance } from '../../models'
+import { RemoteQaduVideoRequest, RequestVideoQaduType } from '../../../shared'
+
+// We create a custom interface because we need "videos" attribute for our computations
+interface RequestsObjectsCustom<U> extends RequestsObjects<U> {
+  [ id: string ]: {
+    toPod: PodInstance
+    endpoint: string
+    ids: number[] // ids
+    datas: U[]
+
+    videos: {
+      [ uuid: string ]: {
+        uuid: string
+        likes?: number
+        dislikes?: number
+        views?: number
+      }
+    }
+  }
+}
 
 export type RequestVideoQaduSchedulerOptions = {
   type: RequestVideoQaduType
-  videoId: string
+  videoId: number
   transaction?: Sequelize.Transaction
 }
 
@@ -37,8 +56,8 @@ class RequestVideoQaduScheduler extends AbstractRequestScheduler<RequestsVideoQa
     return db.RequestVideoQadu
   }
 
-  buildRequestObjects (requests: RequestsVideoQaduGrouped) {
-    const requestsToMakeGrouped = {}
+  buildRequestsObjects (requests: RequestsVideoQaduGrouped) {
+    const requestsToMakeGrouped: RequestsObjectsCustom<RemoteQaduVideoRequest> = {}
 
     Object.keys(requests).forEach(toPodId => {
       requests[toPodId].forEach(data => {
@@ -59,7 +78,7 @@ class RequestVideoQaduScheduler extends AbstractRequestScheduler<RequestsVideoQa
 
         // Maybe another attribute was filled for this video
         let videoData = requestsToMakeGrouped[hashKey].videos[video.id]
-        if (!videoData) videoData = {}
+        if (!videoData) videoData = { uuid: null }
 
         switch (request.type) {
           case REQUEST_VIDEO_QADU_TYPES.LIKES:
@@ -79,8 +98,8 @@ class RequestVideoQaduScheduler extends AbstractRequestScheduler<RequestsVideoQa
             return
         }
 
-        // Do not forget the remoteId so the remote pod can identify the video
-        videoData.remoteId = video.id
+        // Do not forget the uuid so the remote pod can identify the video
+        videoData.uuid = video.uuid
         requestsToMakeGrouped[hashKey].ids.push(request.id)
 
         // Maybe there are multiple quick and dirty update for the same video
@@ -91,8 +110,8 @@ class RequestVideoQaduScheduler extends AbstractRequestScheduler<RequestsVideoQa
 
     // Now we deduped similar quick and dirty updates, we can build our requests datas
     Object.keys(requestsToMakeGrouped).forEach(hashKey => {
-      Object.keys(requestsToMakeGrouped[hashKey].videos).forEach(videoId => {
-        const videoData = requestsToMakeGrouped[hashKey].videos[videoId]
+      Object.keys(requestsToMakeGrouped[hashKey].videos).forEach(videoUUID => {
+        const videoData = requestsToMakeGrouped[hashKey].videos[videoUUID]
 
         requestsToMakeGrouped[hashKey].datas.push({
           data: videoData