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/controllers/api/remote/pods.ts | 8 +++--- server/controllers/api/remote/videos.ts | 43 +++++++++++++++++++++------------ server/controllers/api/users.ts | 16 +++++++----- server/controllers/api/videos/abuse.ts | 4 ++- server/controllers/api/videos/index.ts | 5 ++-- server/controllers/api/videos/rate.ts | 23 ++++++++++++++---- 6 files changed, 65 insertions(+), 34 deletions(-) (limited to 'server/controllers') diff --git a/server/controllers/api/remote/pods.ts b/server/controllers/api/remote/pods.ts index 6319957d3..69bbd4378 100644 --- a/server/controllers/api/remote/pods.ts +++ b/server/controllers/api/remote/pods.ts @@ -2,6 +2,7 @@ import * as express from 'express' import { database as db } from '../../../initializers/database' import { checkSignature, signatureValidator } from '../../../middlewares' +import { PodSignature } from '../../../../shared' const remotePodsRouter = express.Router() @@ -21,12 +22,11 @@ export { // --------------------------------------------------------------------------- function removePods (req: express.Request, res: express.Response, next: express.NextFunction) { - const host = req.body.signature.host + const signature: PodSignature = req.body.signature + const host = signature.host db.Pod.loadByHost(host) - .then(pod => { - return pod.destroy() - }) + .then(pod => pod.destroy()) .then(() => res.type('json').status(204).end()) .catch(err => next(err)) } diff --git a/server/controllers/api/remote/videos.ts b/server/controllers/api/remote/videos.ts index fac85c3a8..96eab6d52 100644 --- a/server/controllers/api/remote/videos.ts +++ b/server/controllers/api/remote/videos.ts @@ -18,6 +18,17 @@ import { import { logger, retryTransactionWrapper } from '../../../helpers' import { quickAndDirtyUpdatesVideoToFriends } from '../../../lib' import { PodInstance, VideoInstance } from '../../../models' +import { + RemoteVideoRequest, + RemoteVideoCreateData, + RemoteVideoUpdateData, + RemoteVideoRemoveData, + RemoteVideoReportAbuseData, + RemoteQaduVideoRequest, + RemoteQaduVideoData, + RemoteVideoEventRequest, + RemoteVideoEventData +} from '../../../../shared' const ENDPOINT_ACTIONS = REQUEST_ENDPOINT_ACTIONS[REQUEST_ENDPOINTS.VIDEOS] @@ -60,11 +71,11 @@ export { // --------------------------------------------------------------------------- function remoteVideos (req: express.Request, res: express.Response, next: express.NextFunction) { - const requests = req.body.data + const requests: RemoteVideoRequest[] = req.body.data const fromPod = res.locals.secure.pod // We need to process in the same order to keep consistency - Promise.each(requests, (request: any) => { + Promise.each(requests, request => { const data = request.data // Get the function we need to call in order to process the request @@ -83,10 +94,10 @@ function remoteVideos (req: express.Request, res: express.Response, next: expres } function remoteVideosQadu (req: express.Request, res: express.Response, next: express.NextFunction) { - const requests = req.body.data + const requests: RemoteQaduVideoRequest[] = req.body.data const fromPod = res.locals.secure.pod - Promise.each(requests, (request: any) => { + Promise.each(requests, request => { const videoData = request.data return quickAndDirtyUpdateVideoRetryWrapper(videoData, fromPod) @@ -97,10 +108,10 @@ function remoteVideosQadu (req: express.Request, res: express.Response, next: ex } function remoteVideosEvents (req: express.Request, res: express.Response, next: express.NextFunction) { - const requests = req.body.data + const requests: RemoteVideoEventRequest[] = req.body.data const fromPod = res.locals.secure.pod - Promise.each(requests, (request: any) => { + Promise.each(requests, request => { const eventData = request.data return processVideosEventsRetryWrapper(eventData, fromPod) @@ -110,7 +121,7 @@ function remoteVideosEvents (req: express.Request, res: express.Response, next: return res.type('json').status(204).end() } -function processVideosEventsRetryWrapper (eventData: any, fromPod: PodInstance) { +function processVideosEventsRetryWrapper (eventData: RemoteVideoEventData, fromPod: PodInstance) { const options = { arguments: [ eventData, fromPod ], errorMessage: 'Cannot process videos events with many retries.' @@ -119,7 +130,7 @@ function processVideosEventsRetryWrapper (eventData: any, fromPod: PodInstance) return retryTransactionWrapper(processVideosEvents, options) } -function processVideosEvents (eventData: any, fromPod: PodInstance) { +function processVideosEvents (eventData: RemoteVideoEventData, fromPod: PodInstance) { return db.sequelize.transaction(t => { return fetchOwnedVideo(eventData.remoteId) @@ -172,7 +183,7 @@ function processVideosEvents (eventData: any, fromPod: PodInstance) { }) } -function quickAndDirtyUpdateVideoRetryWrapper (videoData: any, fromPod: PodInstance) { +function quickAndDirtyUpdateVideoRetryWrapper (videoData: RemoteQaduVideoData, fromPod: PodInstance) { const options = { arguments: [ videoData, fromPod ], errorMessage: 'Cannot update quick and dirty the remote video with many retries.' @@ -181,7 +192,7 @@ function quickAndDirtyUpdateVideoRetryWrapper (videoData: any, fromPod: PodInsta return retryTransactionWrapper(quickAndDirtyUpdateVideo, options) } -function quickAndDirtyUpdateVideo (videoData: any, fromPod: PodInstance) { +function quickAndDirtyUpdateVideo (videoData: RemoteQaduVideoData, fromPod: PodInstance) { let videoName return db.sequelize.transaction(t => { @@ -211,7 +222,7 @@ function quickAndDirtyUpdateVideo (videoData: any, fromPod: PodInstance) { } // Handle retries on fail -function addRemoteVideoRetryWrapper (videoToCreateData: any, fromPod: PodInstance) { +function addRemoteVideoRetryWrapper (videoToCreateData: RemoteVideoCreateData, fromPod: PodInstance) { const options = { arguments: [ videoToCreateData, fromPod ], errorMessage: 'Cannot insert the remote video with many retries.' @@ -220,7 +231,7 @@ function addRemoteVideoRetryWrapper (videoToCreateData: any, fromPod: PodInstanc return retryTransactionWrapper(addRemoteVideo, options) } -function addRemoteVideo (videoToCreateData: any, fromPod: PodInstance) { +function addRemoteVideo (videoToCreateData: RemoteVideoCreateData, fromPod: PodInstance) { logger.debug('Adding remote video "%s".', videoToCreateData.remoteId) return db.sequelize.transaction(t => { @@ -293,7 +304,7 @@ function addRemoteVideo (videoToCreateData: any, fromPod: PodInstance) { } // Handle retries on fail -function updateRemoteVideoRetryWrapper (videoAttributesToUpdate: any, fromPod: PodInstance) { +function updateRemoteVideoRetryWrapper (videoAttributesToUpdate: RemoteVideoUpdateData, fromPod: PodInstance) { const options = { arguments: [ videoAttributesToUpdate, fromPod ], errorMessage: 'Cannot update the remote video with many retries' @@ -302,7 +313,7 @@ function updateRemoteVideoRetryWrapper (videoAttributesToUpdate: any, fromPod: P return retryTransactionWrapper(updateRemoteVideo, options) } -function updateRemoteVideo (videoAttributesToUpdate: any, fromPod: PodInstance) { +function updateRemoteVideo (videoAttributesToUpdate: RemoteVideoUpdateData, fromPod: PodInstance) { logger.debug('Updating remote video "%s".', videoAttributesToUpdate.remoteId) return db.sequelize.transaction(t => { @@ -346,7 +357,7 @@ function updateRemoteVideo (videoAttributesToUpdate: any, fromPod: PodInstance) }) } -function removeRemoteVideo (videoToRemoveData: any, fromPod: PodInstance) { +function removeRemoteVideo (videoToRemoveData: RemoteVideoRemoveData, fromPod: PodInstance) { // We need the instance because we have to remove some other stuffs (thumbnail etc) return fetchRemoteVideo(fromPod.host, videoToRemoveData.remoteId) .then(video => { @@ -358,7 +369,7 @@ function removeRemoteVideo (videoToRemoveData: any, fromPod: PodInstance) { }) } -function reportAbuseRemoteVideo (reportData: any, fromPod: PodInstance) { +function reportAbuseRemoteVideo (reportData: RemoteVideoReportAbuseData, fromPod: PodInstance) { return fetchOwnedVideo(reportData.videoRemoteId) .then(video => { logger.debug('Reporting remote abuse for video %s.', video.id) diff --git a/server/controllers/api/users.ts b/server/controllers/api/users.ts index 845facd55..e79480521 100644 --- a/server/controllers/api/users.ts +++ b/server/controllers/api/users.ts @@ -17,7 +17,7 @@ import { setUsersSort, token } from '../../middlewares' -import { UserVideoRate as FormatedUserVideoRate } from '../../../shared' +import { UserVideoRate as FormatedUserVideoRate, UserCreate, UserUpdate } from '../../../shared' const usersRouter = express.Router() @@ -78,10 +78,12 @@ export { // --------------------------------------------------------------------------- function createUser (req: express.Request, res: express.Response, next: express.NextFunction) { + const body: UserCreate = req.body + const user = db.User.build({ - username: req.body.username, - password: req.body.password, - email: req.body.email, + username: body.username, + password: body.password, + email: body.email, displayNSFW: false, role: USER_ROLES.USER }) @@ -132,10 +134,12 @@ function removeUser (req: express.Request, res: express.Response, next: express. } function updateUser (req: express.Request, res: express.Response, next: express.NextFunction) { + const body: UserUpdate = req.body + db.User.loadByUsername(res.locals.oauth.token.user.username) .then(user => { - if (req.body.password) user.password = req.body.password - if (req.body.displayNSFW !== undefined) user.displayNSFW = req.body.displayNSFW + if (body.password) user.password = body.password + if (body.displayNSFW !== undefined) user.displayNSFW = body.displayNSFW return user.save() }) diff --git a/server/controllers/api/videos/abuse.ts b/server/controllers/api/videos/abuse.ts index 3b1b7f58e..7d2e3bcfb 100644 --- a/server/controllers/api/videos/abuse.ts +++ b/server/controllers/api/videos/abuse.ts @@ -17,6 +17,7 @@ import { setPagination } from '../../../middlewares' import { VideoInstance } from '../../../models' +import { VideoAbuseCreate } from '../../../../shared' const abuseVideoRouter = express.Router() @@ -63,10 +64,11 @@ function reportVideoAbuseRetryWrapper (req: express.Request, res: express.Respon function reportVideoAbuse (req: express.Request, res: express.Response) { const videoInstance = res.locals.video const reporterUsername = res.locals.oauth.token.User.username + const body: VideoAbuseCreate = req.body const abuse = { reporterUsername, - reason: req.body.reason, + reason: body.reason, videoId: videoInstance.id, reporterPodId: null // This is our pod that reported this abuse } diff --git a/server/controllers/api/videos/index.ts b/server/controllers/api/videos/index.ts index 3532c753e..4ae7ea2ed 100644 --- a/server/controllers/api/videos/index.ts +++ b/server/controllers/api/videos/index.ts @@ -39,6 +39,7 @@ import { renamePromise } from '../../../helpers' import { TagInstance } from '../../../models' +import { VideoCreate, VideoUpdate } from '../../../../shared' import { abuseVideoRouter } from './abuse' import { blacklistRouter } from './blacklist' @@ -155,7 +156,7 @@ function addVideoRetryWrapper (req: express.Request, res: express.Response, next } function addVideo (req: express.Request, res: express.Response, videoFile: Express.Multer.File) { - const videoInfos = req.body + const videoInfos: VideoCreate = req.body return db.sequelize.transaction(t => { const user = res.locals.oauth.token.User @@ -257,7 +258,7 @@ function updateVideoRetryWrapper (req: express.Request, res: express.Response, n function updateVideo (req: express.Request, res: express.Response) { const videoInstance = res.locals.video const videoFieldsSave = videoInstance.toJSON() - const videoInfosToUpdate = req.body + const videoInfosToUpdate: VideoUpdate = req.body return db.sequelize.transaction(t => { let tagsPromise: Promise diff --git a/server/controllers/api/videos/rate.ts b/server/controllers/api/videos/rate.ts index dfb5a450f..8456cbaf2 100644 --- a/server/controllers/api/videos/rate.ts +++ b/server/controllers/api/videos/rate.ts @@ -1,4 +1,5 @@ import * as express from 'express' +import * as Promise from 'bluebird' import { database as db } from '../../../initializers/database' import { @@ -18,6 +19,7 @@ import { authenticate, videoRateValidator } from '../../../middlewares' +import { UserVideoRateUpdate, VideoRateType } from '../../../../shared' const rateVideoRouter = express.Router() @@ -47,7 +49,8 @@ function rateVideoRetryWrapper (req: express.Request, res: express.Response, nex } function rateVideo (req: express.Request, res: express.Response) { - const rateType = req.body.rating + const body: UserVideoRateUpdate = req.body + const rateType = body.rating const videoInstance = res.locals.video const userInstance = res.locals.oauth.token.User @@ -62,24 +65,34 @@ function rateVideo (req: express.Request, res: express.Response) { if (rateType === VIDEO_RATE_TYPES.LIKE) likesToIncrement++ else if (rateType === VIDEO_RATE_TYPES.DISLIKE) dislikesToIncrement++ + let promise: Promise + // There was a previous rate, update it if (previousRate) { // We will remove the previous rate, so we will need to remove it from the video attribute if (previousRate.type === VIDEO_RATE_TYPES.LIKE) likesToIncrement-- else if (previousRate.type === VIDEO_RATE_TYPES.DISLIKE) dislikesToIncrement-- - previousRate.type = rateType + if (rateType === 'none') { // Destroy previous rate + promise = previousRate.destroy() + } else { // Update previous rate + previousRate.type = rateType as VideoRateType - return previousRate.save(options).then(() => ({ t, likesToIncrement, dislikesToIncrement })) - } else { // There was not a previous rate, insert a new one + promise = previousRate.save() + } + } else if (rateType !== 'none') { // There was not a previous rate, insert a new one if there is a rate const query = { userId: userInstance.id, videoId: videoInstance.id, type: rateType } - return db.UserVideoRate.create(query, options).then(() => ({ likesToIncrement, dislikesToIncrement })) + promise = db.UserVideoRate.create(query, options) + } else { + promise = Promise.resolve() } + + return promise.then(() => ({ likesToIncrement, dislikesToIncrement })) }) .then(({ likesToIncrement, dislikesToIncrement }) => { const options = { transaction: t } -- cgit v1.2.3