From 4771e0008dd26eadbb7eaff64255a6ec914fdadb Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 10 Jul 2017 19:43:21 +0200 Subject: Better typescript typing for a better world --- server/lib/friends.ts | 14 ++++++---- server/lib/request/abstract-request-scheduler.ts | 22 ++++++++++----- server/lib/request/request-scheduler.ts | 8 +++--- .../lib/request/request-video-event-scheduler.ts | 22 ++++++++++----- server/lib/request/request-video-qadu-scheduler.ts | 31 +++++++++++++++++----- 5 files changed, 69 insertions(+), 28 deletions(-) (limited to 'server/lib') diff --git a/server/lib/friends.ts b/server/lib/friends.ts index 3487addbe..4d56e9eb2 100644 --- a/server/lib/friends.ts +++ b/server/lib/friends.ts @@ -34,7 +34,11 @@ import { import { RequestEndpoint, RequestVideoEventType, - RequestVideoQaduType + RequestVideoQaduType, + RemoteVideoCreateData, + RemoteVideoUpdateData, + RemoteVideoRemoveData, + RemoteVideoReportAbuseData } from '../../shared' type QaduParam = { videoId: string, type: RequestVideoQaduType } @@ -52,7 +56,7 @@ function activateSchedulers () { requestVideoEventScheduler.activate() } -function addVideoToFriends (videoData: Object, transaction: Sequelize.Transaction) { +function addVideoToFriends (videoData: RemoteVideoCreateData, transaction: Sequelize.Transaction) { const options = { type: ENDPOINT_ACTIONS.ADD, endpoint: REQUEST_ENDPOINTS.VIDEOS, @@ -62,7 +66,7 @@ function addVideoToFriends (videoData: Object, transaction: Sequelize.Transactio return createRequest(options) } -function updateVideoToFriends (videoData: Object, transaction: Sequelize.Transaction) { +function updateVideoToFriends (videoData: RemoteVideoUpdateData, transaction: Sequelize.Transaction) { const options = { type: ENDPOINT_ACTIONS.UPDATE, endpoint: REQUEST_ENDPOINTS.VIDEOS, @@ -72,7 +76,7 @@ function updateVideoToFriends (videoData: Object, transaction: Sequelize.Transac return createRequest(options) } -function removeVideoToFriends (videoParams: Object) { +function removeVideoToFriends (videoParams: RemoteVideoRemoveData) { const options = { type: ENDPOINT_ACTIONS.REMOVE, endpoint: REQUEST_ENDPOINTS.VIDEOS, @@ -82,7 +86,7 @@ function removeVideoToFriends (videoParams: Object) { return createRequest(options) } -function reportAbuseVideoToFriend (reportData: Object, video: VideoInstance, transaction: Sequelize.Transaction) { +function reportAbuseVideoToFriend (reportData: RemoteVideoReportAbuseData, video: VideoInstance, transaction: Sequelize.Transaction) { const options = { type: ENDPOINT_ACTIONS.REPORT_ABUSE, endpoint: REQUEST_ENDPOINTS.VIDEOS, diff --git a/server/lib/request/abstract-request-scheduler.ts b/server/lib/request/abstract-request-scheduler.ts index 0a9ff65d5..ce4e2ffd2 100644 --- a/server/lib/request/abstract-request-scheduler.ts +++ b/server/lib/request/abstract-request-scheduler.ts @@ -10,6 +10,15 @@ import { REQUESTS_INTERVAL } from '../../initializers' +interface RequestsObjects { + [ id: string ]: { + toPod: PodInstance + endpoint: string + ids: number[] // ids + datas: U[] + } +} + abstract class AbstractRequestScheduler { requestInterval: number limitPods: number @@ -27,7 +36,7 @@ abstract class AbstractRequestScheduler { abstract getRequestModel (): AbstractRequestClass abstract getRequestToPodModel (): AbstractRequestToPodClass - abstract buildRequestObjects (requestsGrouped: T): {} + abstract buildRequestsObjects (requestsGrouped: T): RequestsObjects activate () { logger.info('Requests scheduler activated.') @@ -67,7 +76,7 @@ abstract class AbstractRequestScheduler { // --------------------------------------------------------------------------- // Make a requests to friends of a certain type - protected makeRequest (toPod: PodInstance, requestEndpoint: string, requestsToMake: Object) { + protected makeRequest (toPod: PodInstance, requestEndpoint: string, requestsToMake: any) { const params = { toPod: toPod, method: 'POST' as 'POST', @@ -95,7 +104,7 @@ abstract class AbstractRequestScheduler { return this.getRequestModel().listWithLimitAndRandom(this.limitPods, this.limitPerPod) .then((requestsGrouped: T) => { // We want to group requests by destinations pod and endpoint - const requestsToMake = this.buildRequestObjects(requestsGrouped) + const requestsToMake = this.buildRequestsObjects(requestsGrouped) // If there are no requests, abort if (isEmpty(requestsToMake) === true) { @@ -105,8 +114,8 @@ abstract class AbstractRequestScheduler { logger.info('Making "%s" to friends.', this.description) - const goodPods = [] - const badPods = [] + const goodPods: number[] = [] + const badPods: number[] = [] return Promise.map(Object.keys(requestsToMake), hashKey => { const requestToMake = requestsToMake[hashKey] @@ -149,5 +158,6 @@ abstract class AbstractRequestScheduler { // --------------------------------------------------------------------------- export { - AbstractRequestScheduler + AbstractRequestScheduler, + RequestsObjects } diff --git a/server/lib/request/request-scheduler.ts b/server/lib/request/request-scheduler.ts index 3945ace20..696875dcf 100644 --- a/server/lib/request/request-scheduler.ts +++ b/server/lib/request/request-scheduler.ts @@ -1,11 +1,11 @@ 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_LIMIT_PODS, REQUESTS_LIMIT_PER_POD } from '../../initializers' import { RequestsGrouped } from '../../models' -import { RequestEndpoint } from '../../../shared' +import { RequestEndpoint, RemoteVideoRequest } from '../../../shared' export type RequestSchedulerOptions = { type: string @@ -34,8 +34,8 @@ class RequestScheduler extends AbstractRequestScheduler { return db.RequestToPod } - buildRequestObjects (requestsGrouped: RequestsGrouped) { - const requestsToMakeGrouped = {} + buildRequestsObjects (requestsGrouped: RequestsGrouped) { + const requestsToMakeGrouped: RequestsObjects = {} Object.keys(requestsGrouped).forEach(toPodId => { requestsGrouped[toPodId].forEach(data => { diff --git a/server/lib/request/request-video-event-scheduler.ts b/server/lib/request/request-video-event-scheduler.ts index d4d714c02..8a008c51b 100644 --- a/server/lib/request/request-video-event-scheduler.ts +++ b/server/lib/request/request-video-event-scheduler.ts @@ -1,14 +1,14 @@ 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 { REQUESTS_VIDEO_EVENT_LIMIT_PODS, REQUESTS_VIDEO_EVENT_LIMIT_PER_POD, REQUEST_VIDEO_EVENT_ENDPOINT } from '../../initializers' import { RequestsVideoEventGrouped } from '../../models' -import { RequestVideoEventType } from '../../../shared' +import { RequestVideoEventType, RemoteVideoEventRequest, RemoteVideoEventType } from '../../../shared' export type RequestVideoEventSchedulerOptions = { type: RequestVideoEventType @@ -36,8 +36,8 @@ class RequestVideoEventScheduler extends AbstractRequestScheduler = {} /* Example: { @@ -47,7 +47,15 @@ class RequestVideoEventScheduler extends AbstractRequestScheduler extends RequestsObjects { + [ id: string ]: { + toPod: PodInstance + endpoint: string + ids: number[] // ids + datas: U[] + + videos: { + [ id: string ]: { + remoteId: string + likes?: number + dislikes?: number + views?: number + } + } + } +} export type RequestVideoQaduSchedulerOptions = { type: RequestVideoQaduType @@ -37,8 +56,8 @@ class RequestVideoQaduScheduler extends AbstractRequestScheduler = {} Object.keys(requests).forEach(toPodId => { requests[toPodId].forEach(data => { @@ -59,7 +78,7 @@ class RequestVideoQaduScheduler extends AbstractRequestScheduler