Add total results field and wrap videos in data field when listing
authorChocobozzz <florian.bigard@gmail.com>
Sat, 21 May 2016 17:30:22 +0000 (19:30 +0200)
committerChocobozzz <florian.bigard@gmail.com>
Sat, 21 May 2016 17:30:22 +0000 (19:30 +0200)
videos

server/controllers/api/v1/videos.js
server/models/videos.js
server/tests/api/checkParams.js
server/tests/api/friendsAdvanced.js
server/tests/api/multiplePods.js
server/tests/api/singlePod.js
server/tests/api/users.js

index e903cbcf4135950da1dd89769a88f75ebbcd1fb3..f7aeea4532e711aff477b6eca79f83134536789e 100644 (file)
@@ -62,7 +62,7 @@ router.post('/',
 )
 router.get('/:id',
   reqValidatorVideos.videosGet,
-  getVideos
+  getVideo
 )
 router.delete('/:id',
   oAuth2.authenticate,
@@ -165,7 +165,7 @@ function addVideo (req, res, next) {
   })
 }
 
-function getVideos (req, res, next) {
+function getVideo (req, res, next) {
   Videos.get(req.params.id, function (err, videoObj) {
     if (err) return next(err)
 
@@ -179,10 +179,10 @@ function getVideos (req, res, next) {
 }
 
 function listVideos (req, res, next) {
-  Videos.list(req.query.start, req.query.count, req.query.sort, function (err, videosList) {
+  Videos.list(req.query.start, req.query.count, req.query.sort, function (err, videosList, totalVideos) {
     if (err) return next(err)
 
-    res.json(getFormatedVideos(videosList))
+    res.json(getFormatedVideos(videosList, totalVideos))
   })
 }
 
@@ -237,10 +237,10 @@ function removeVideo (req, res, next) {
 }
 
 function searchVideos (req, res, next) {
-  Videos.search(req.params.name, req.query.start, req.query.count, req.query.sort, function (err, videosList) {
+  Videos.search(req.params.name, req.query.start, req.query.count, req.query.sort, function (err, videosList, totalVideos) {
     if (err) return next(err)
 
-    res.json(getFormatedVideos(videosList))
+    res.json(getFormatedVideos(videosList, totalVideos))
   })
 }
 
@@ -263,14 +263,17 @@ function getFormatedVideo (videoObj) {
   return formatedVideo
 }
 
-function getFormatedVideos (videosObj) {
+function getFormatedVideos (videosObj, totalVideos) {
   const formatedVideos = []
 
   videosObj.forEach(function (videoObj) {
     formatedVideos.push(getFormatedVideo(videoObj))
   })
 
-  return formatedVideos
+  return {
+    total: totalVideos,
+    data: formatedVideos
+  }
 }
 
 // Maybe the torrent is not seeded, but we catch the error to don't stop the removing process
index 9cac8eddabd9e40129811ba359eebe1a449b1992..9521e63e314ca35a08fd60d41ed8876e932b94d2 100644 (file)
@@ -1,5 +1,6 @@
 'use strict'
 
+const async = require('async')
 const config = require('config')
 const mongoose = require('mongoose')
 
@@ -81,15 +82,8 @@ function get (id, callback) {
 }
 
 function list (start, count, sort, callback) {
-  VideosDB.find({}).skip(start).limit(start + count).sort(sort)
-  .exec(function (err, videosList) {
-    if (err) {
-      logger.error('Cannot get the list of the videos.')
-      return callback(err)
-    }
-
-    return callback(null, videosList)
-  })
+  const query = {}
+  return findWithCount(query, start, count, sort, callback)
 }
 
 function listFromUrl (fromUrl, callback) {
@@ -131,17 +125,29 @@ function removeByIds (ids, callback) {
 }
 
 function search (name, start, count, sort, callback) {
-  VideosDB.find({ name: new RegExp(name) }).skip(start).limit(start + count).sort(sort)
-  .exec(function (err, videos) {
-    if (err) {
-      logger.error('Cannot search the videos.')
-      return callback(err)
-    }
-
-    return callback(null, videos)
-  })
+  const query = { name: new RegExp(name) }
+  findWithCount(query, start, count, sort, callback)
 }
 
 // ---------------------------------------------------------------------------
 
 module.exports = Videos
+
+// ---------------------------------------------------------------------------
+
+function findWithCount (query, start, count, sort, callback) {
+  async.parallel([
+    function (asyncCallback) {
+      VideosDB.find(query).skip(start).limit(start + count).sort(sort).exec(asyncCallback)
+    },
+    function (asyncCallback) {
+      VideosDB.count(query, asyncCallback)
+    }
+  ], function (err, results) {
+    if (err) return callback(err)
+
+    const videos = results[0]
+    const totalVideos = results[1]
+    return callback(null, videos, totalVideos)
+  })
+}
index a109aba47aae22c969575103b58050ea9305cf42..e02fd0da51991eb4a78757288324cb1f2d3d704e 100644 (file)
@@ -299,8 +299,8 @@ describe('Test parameters validator', function () {
           .end(function (err, res) {
             if (err) throw err
 
-            expect(res.body).to.be.an('array')
-            expect(res.body.length).to.equal(3)
+            expect(res.body.data).to.be.an('array')
+            expect(res.body.data.length).to.equal(3)
 
             done()
           })
index f3d5cd4a07ca61b0b1668a403346875c5c803bef..7b895b6b5019150513ffe1283d0380ef361803e4 100644 (file)
@@ -210,8 +210,10 @@ describe('Test advanced friends', function () {
       function (next) {
         getVideos(1, function (err, res) {
           if (err) throw err
-          expect(res.body).to.be.an('array')
-          expect(res.body.length).to.equal(2)
+
+          const videos = res.body.data
+          expect(videos).to.be.an('array')
+          expect(videos.length).to.equal(2)
 
           next()
         })
@@ -221,8 +223,10 @@ describe('Test advanced friends', function () {
 
         getVideos(2, function (err, res) {
           if (err) throw err
-          expect(res.body).to.be.an('array')
-          expect(res.body.length).to.equal(3)
+
+          const videos = res.body.data
+          expect(videos).to.be.an('array')
+          expect(videos.length).to.equal(3)
           done()
         })
       }
@@ -236,8 +240,9 @@ describe('Test advanced friends', function () {
         getVideos(1, function (err, res) {
           if (err) throw err
 
-          expect(res.body).to.be.an('array')
-          expect(res.body.length).to.equal(5)
+          const videos = res.body.data
+          expect(videos).to.be.an('array')
+          expect(videos.length).to.equal(5)
 
           done()
         })
index c31c18b0254125dfe9d7391e0761986eabcf49f7..dac6dd4107cda8f6719cb667ffbdda1ec43ca8c5 100644 (file)
@@ -60,8 +60,9 @@ describe('Test multiple pods', function () {
       utils.getVideosList(server.url, function (err, res) {
         if (err) throw err
 
-        expect(res.body).to.be.an('array')
-        expect(res.body.length).to.equal(0)
+        const videos = res.body.data
+        expect(videos).to.be.an('array')
+        expect(videos.length).to.equal(0)
 
         callback()
       })
@@ -89,13 +90,13 @@ describe('Test multiple pods', function () {
             utils.getVideosList(server.url, function (err, res) {
               if (err) throw err
 
-              const videos = res.body
+              const videos = res.body.data
               expect(videos).to.be.an('array')
               expect(videos.length).to.equal(1)
               const video = videos[0]
               expect(video.name).to.equal('my super name for pod 1')
               expect(video.description).to.equal('my super description for pod 1')
-              expect(video.podUrl).to.equal('http://localhost:9001')
+              expect(video.podUrl).to.equal('localhost:9001')
               expect(video.magnetUri).to.exist
               expect(video.duration).to.equal(10)
               expect(utils.dateIsValid(video.createdDate)).to.be.true
@@ -145,13 +146,13 @@ describe('Test multiple pods', function () {
             utils.getVideosList(server.url, function (err, res) {
               if (err) throw err
 
-              const videos = res.body
+              const videos = res.body.data
               expect(videos).to.be.an('array')
               expect(videos.length).to.equal(2)
               const video = videos[1]
               expect(video.name).to.equal('my super name for pod 2')
               expect(video.description).to.equal('my super description for pod 2')
-              expect(video.podUrl).to.equal('http://localhost:9002')
+              expect(video.podUrl).to.equal('localhost:9002')
               expect(video.magnetUri).to.exist
               expect(video.duration).to.equal(5)
               expect(utils.dateIsValid(video.createdDate)).to.be.true
@@ -203,7 +204,7 @@ describe('Test multiple pods', function () {
             utils.getVideosList(server.url, function (err, res) {
               if (err) throw err
 
-              const videos = res.body
+              const videos = res.body.data
               expect(videos).to.be.an('array')
               expect(videos.length).to.equal(4)
 
@@ -220,14 +221,14 @@ describe('Test multiple pods', function () {
 
               expect(video1.name).to.equal('my super name for pod 3')
               expect(video1.description).to.equal('my super description for pod 3')
-              expect(video1.podUrl).to.equal('http://localhost:9003')
+              expect(video1.podUrl).to.equal('localhost:9003')
               expect(video1.magnetUri).to.exist
               expect(video1.duration).to.equal(5)
               expect(utils.dateIsValid(video1.createdDate)).to.be.true
 
               expect(video2.name).to.equal('my super name for pod 3-2')
               expect(video2.description).to.equal('my super description for pod 3-2')
-              expect(video2.podUrl).to.equal('http://localhost:9003')
+              expect(video2.podUrl).to.equal('localhost:9003')
               expect(video2.magnetUri).to.exist
               expect(video2.duration).to.equal(5)
               expect(utils.dateIsValid(video2.createdDate)).to.be.true
@@ -273,9 +274,9 @@ describe('Test multiple pods', function () {
       utils.getVideosList(servers[2].url, function (err, res) {
         if (err) throw err
 
-        const video = res.body[0]
-        toRemove.push(res.body[2].id)
-        toRemove.push(res.body[3].id)
+        const video = res.body.data[0]
+        toRemove.push(res.body.data[2].id)
+        toRemove.push(res.body.data[3].id)
 
         webtorrent.add(video.magnetUri, function (torrent) {
           expect(torrent.files).to.exist
@@ -294,7 +295,7 @@ describe('Test multiple pods', function () {
       utils.getVideosList(servers[0].url, function (err, res) {
         if (err) throw err
 
-        const video = res.body[1]
+        const video = res.body.data[1]
 
         webtorrent.add(video.magnetUri, function (torrent) {
           expect(torrent.files).to.exist
@@ -313,7 +314,7 @@ describe('Test multiple pods', function () {
       utils.getVideosList(servers[1].url, function (err, res) {
         if (err) throw err
 
-        const video = res.body[2]
+        const video = res.body.data[2]
 
         webtorrent.add(video.magnetUri, function (torrent) {
           expect(torrent.files).to.exist
@@ -332,7 +333,7 @@ describe('Test multiple pods', function () {
       utils.getVideosList(servers[0].url, function (err, res) {
         if (err) throw err
 
-        const video = res.body[3]
+        const video = res.body.data[3]
 
         webtorrent.add(video.magnetUri, function (torrent) {
           expect(torrent.files).to.exist
@@ -366,7 +367,7 @@ describe('Test multiple pods', function () {
         utils.getVideosList(server.url, function (err, res) {
           if (err) throw err
 
-          const videos = res.body
+          const videos = res.body.data
           expect(videos).to.be.an('array')
           expect(videos.length).to.equal(2)
           expect(videos[0].id).not.to.equal(videos[1].id)
index 1a53ada3ace5d15256793a51f12ba202f5536dc6..884a83032706014e38b0e7c905c44e31306e768d 100644 (file)
@@ -47,8 +47,9 @@ describe('Test a single pod', function () {
     utils.getVideosList(server.url, function (err, res) {
       if (err) throw err
 
-      expect(res.body).to.be.an('array')
-      expect(res.body.length).to.equal(0)
+      expect(res.body.total).to.equal(0)
+      expect(res.body.data).to.be.an('array')
+      expect(res.body.data.length).to.equal(0)
 
       done()
     })
@@ -66,13 +67,14 @@ describe('Test a single pod', function () {
     utils.getVideosList(server.url, function (err, res) {
       if (err) throw err
 
-      expect(res.body).to.be.an('array')
-      expect(res.body.length).to.equal(1)
+      expect(res.body.total).to.equal(1)
+      expect(res.body.data).to.be.an('array')
+      expect(res.body.data.length).to.equal(1)
 
-      const video = res.body[0]
+      const video = res.body.data[0]
       expect(video.name).to.equal('my super name')
       expect(video.description).to.equal('my super description')
-      expect(video.podUrl).to.equal('http://localhost:9001')
+      expect(video.podUrl).to.equal('localhost:9001')
       expect(video.magnetUri).to.exist
       expect(video.author).to.equal('root')
       expect(video.isLocal).to.be.true
@@ -106,7 +108,7 @@ describe('Test a single pod', function () {
       const video = res.body
       expect(video.name).to.equal('my super name')
       expect(video.description).to.equal('my super description')
-      expect(video.podUrl).to.equal('http://localhost:9001')
+      expect(video.podUrl).to.equal('localhost:9001')
       expect(video.magnetUri).to.exist
       expect(video.author).to.equal('root')
       expect(video.isLocal).to.be.true
@@ -131,13 +133,14 @@ describe('Test a single pod', function () {
     utils.searchVideo(server.url, 'my', function (err, res) {
       if (err) throw err
 
-      expect(res.body).to.be.an('array')
-      expect(res.body.length).to.equal(1)
+      expect(res.body.total).to.equal(1)
+      expect(res.body.data).to.be.an('array')
+      expect(res.body.data.length).to.equal(1)
 
-      const video = res.body[0]
+      const video = res.body.data[0]
       expect(video.name).to.equal('my super name')
       expect(video.description).to.equal('my super description')
-      expect(video.podUrl).to.equal('http://localhost:9001')
+      expect(video.podUrl).to.equal('localhost:9001')
       expect(video.author).to.equal('root')
       expect(video.isLocal).to.be.true
       expect(utils.dateIsValid(video.createdDate)).to.be.true
@@ -155,8 +158,9 @@ describe('Test a single pod', function () {
     utils.searchVideo(server.url, 'hello', function (err, res) {
       if (err) throw err
 
-      expect(res.body).to.be.an('array')
-      expect(res.body.length).to.equal(0)
+      expect(res.body.total).to.equal(0)
+      expect(res.body.data).to.be.an('array')
+      expect(res.body.data.length).to.equal(0)
 
       done()
     })
@@ -179,8 +183,9 @@ describe('Test a single pod', function () {
     utils.getVideosList(server.url, function (err, res) {
       if (err) throw err
 
-      expect(res.body).to.be.an('array')
-      expect(res.body.length).to.equal(0)
+      expect(res.body.total).to.equal(0)
+      expect(res.body.data).to.be.an('array')
+      expect(res.body.data.length).to.equal(0)
 
       done()
     })
@@ -201,7 +206,8 @@ describe('Test a single pod', function () {
     utils.getVideosList(server.url, function (err, res) {
       if (err) throw err
 
-      const videos = res.body
+      expect(res.body.total).to.equal(6)
+      const videos = res.body.data
       expect(videos).to.be.an('array')
       expect(videos.length).to.equal(6)
 
@@ -221,7 +227,7 @@ describe('Test a single pod', function () {
     utils.getVideosList(server.url, function (err, res) {
       if (err) throw err
 
-      const videos = res.body
+      const videos = res.body.data
       // For the next test
       videosListBase = videos
 
@@ -243,7 +249,8 @@ describe('Test a single pod', function () {
     utils.getVideosListPagination(server.url, 0, 2, function (err, res) {
       if (err) throw err
 
-      const videos = res.body
+      const videos = res.body.data
+      expect(res.body.total).to.equal(6)
       expect(videos.length).to.equal(2)
       expect(videos[0].name === videosListBase[0].name)
       expect(videos[1].name === videosListBase[1].name)
@@ -256,7 +263,8 @@ describe('Test a single pod', function () {
     utils.getVideosListPagination(server.url, 2, 3, function (err, res) {
       if (err) throw err
 
-      const videos = res.body
+      const videos = res.body.data
+      expect(res.body.total).to.equal(6)
       expect(videos.length).to.equal(4)
       expect(videos[0].name === videosListBase[2].name)
       expect(videos[1].name === videosListBase[3].name)
@@ -270,7 +278,8 @@ describe('Test a single pod', function () {
     utils.getVideosListPagination(server.url, 5, 6, function (err, res) {
       if (err) throw err
 
-      const videos = res.body
+      const videos = res.body.data
+      expect(res.body.total).to.equal(6)
       expect(videos.length).to.equal(1)
       expect(videos[0].name === videosListBase[5].name)
 
@@ -282,7 +291,8 @@ describe('Test a single pod', function () {
     utils.searchVideoWithPagination(server.url, 'webm', 0, 1, function (err, res) {
       if (err) throw err
 
-      const videos = res.body
+      const videos = res.body.data
+      expect(res.body.total).to.equal(4)
       expect(videos.length).to.equal(1)
       expect(videos[0].name === 'video_short.webm name')
 
@@ -294,7 +304,8 @@ describe('Test a single pod', function () {
     utils.searchVideoWithPagination(server.url, 'webm', 2, 2, function (err, res) {
       if (err) throw err
 
-      const videos = res.body
+      const videos = res.body.data
+      expect(res.body.total).to.equal(4)
       expect(videos.length).to.equal(2)
       expect(videos[0].name === 'video_short2.webm name')
       expect(videos[1].name === 'video_short3.webm name')
@@ -307,7 +318,8 @@ describe('Test a single pod', function () {
     utils.searchVideoWithPagination(server.url, 'webm', 0, 15, function (err, res) {
       if (err) throw err
 
-      const videos = res.body
+      const videos = res.body.data
+      expect(res.body.total).to.equal(4)
       expect(videos.length).to.equal(4)
 
       done()
@@ -318,7 +330,8 @@ describe('Test a single pod', function () {
     utils.getVideosListSort(server.url, '-name', function (err, res) {
       if (err) throw err
 
-      const videos = res.body
+      const videos = res.body.data
+      expect(res.body.total).to.equal(6)
       expect(videos.length).to.equal(6)
       expect(videos[5].name === 'video_short.mp4 name')
       expect(videos[4].name === 'video_short.ogv name')
@@ -335,7 +348,8 @@ describe('Test a single pod', function () {
     utils.searchVideoWithSort(server.url, 'webm', 'name', function (err, res) {
       if (err) throw err
 
-      const videos = res.body
+      const videos = res.body.data
+      expect(res.body.total).to.equal(4)
       expect(videos.length).to.equal(4)
 
       expect(videos[0].name === 'video_short.webm name')
index cb44d26118f5be5390743e83c6649d04520c24d1..9ab5083a0501df7db62582f78e02c40ccf2a2f2c 100644 (file)
@@ -108,7 +108,7 @@ describe('Test users', function () {
       utils.getVideosList(server.url, function (err, res) {
         if (err) throw err
 
-        const video = res.body[0]
+        const video = res.body.data[0]
         expect(video.author).to.equal('root')
 
         videoId = video.id