Add total results field and wrap videos in data field when listing

videos
This commit is contained in:
Chocobozzz 2016-05-21 19:30:22 +02:00
parent 501bc6c2b1
commit 68ce3ae021
7 changed files with 105 additions and 76 deletions

View File

@ -62,7 +62,7 @@ router.post('/',
) )
router.get('/:id', router.get('/:id',
reqValidatorVideos.videosGet, reqValidatorVideos.videosGet,
getVideos getVideo
) )
router.delete('/:id', router.delete('/:id',
oAuth2.authenticate, 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) { Videos.get(req.params.id, function (err, videoObj) {
if (err) return next(err) if (err) return next(err)
@ -179,10 +179,10 @@ function getVideos (req, res, next) {
} }
function listVideos (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) 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) { 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) if (err) return next(err)
res.json(getFormatedVideos(videosList)) res.json(getFormatedVideos(videosList, totalVideos))
}) })
} }
@ -263,14 +263,17 @@ function getFormatedVideo (videoObj) {
return formatedVideo return formatedVideo
} }
function getFormatedVideos (videosObj) { function getFormatedVideos (videosObj, totalVideos) {
const formatedVideos = [] const formatedVideos = []
videosObj.forEach(function (videoObj) { videosObj.forEach(function (videoObj) {
formatedVideos.push(getFormatedVideo(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 // Maybe the torrent is not seeded, but we catch the error to don't stop the removing process

View File

@ -1,5 +1,6 @@
'use strict' 'use strict'
const async = require('async')
const config = require('config') const config = require('config')
const mongoose = require('mongoose') const mongoose = require('mongoose')
@ -81,15 +82,8 @@ function get (id, callback) {
} }
function list (start, count, sort, callback) { function list (start, count, sort, callback) {
VideosDB.find({}).skip(start).limit(start + count).sort(sort) const query = {}
.exec(function (err, videosList) { return findWithCount(query, start, count, sort, callback)
if (err) {
logger.error('Cannot get the list of the videos.')
return callback(err)
}
return callback(null, videosList)
})
} }
function listFromUrl (fromUrl, callback) { function listFromUrl (fromUrl, callback) {
@ -131,17 +125,29 @@ function removeByIds (ids, callback) {
} }
function search (name, start, count, sort, callback) { function search (name, start, count, sort, callback) {
VideosDB.find({ name: new RegExp(name) }).skip(start).limit(start + count).sort(sort) const query = { name: new RegExp(name) }
.exec(function (err, videos) { findWithCount(query, start, count, sort, callback)
if (err) {
logger.error('Cannot search the videos.')
return callback(err)
}
return callback(null, videos)
})
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
module.exports = Videos 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)
})
}

View File

@ -299,8 +299,8 @@ describe('Test parameters validator', function () {
.end(function (err, res) { .end(function (err, res) {
if (err) throw err if (err) throw err
expect(res.body).to.be.an('array') expect(res.body.data).to.be.an('array')
expect(res.body.length).to.equal(3) expect(res.body.data.length).to.equal(3)
done() done()
}) })

View File

@ -210,8 +210,10 @@ describe('Test advanced friends', function () {
function (next) { function (next) {
getVideos(1, function (err, res) { getVideos(1, function (err, res) {
if (err) throw err 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() next()
}) })
@ -221,8 +223,10 @@ describe('Test advanced friends', function () {
getVideos(2, function (err, res) { getVideos(2, function (err, res) {
if (err) throw err 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() done()
}) })
} }
@ -236,8 +240,9 @@ describe('Test advanced friends', function () {
getVideos(1, function (err, res) { getVideos(1, function (err, res) {
if (err) throw err if (err) throw err
expect(res.body).to.be.an('array') const videos = res.body.data
expect(res.body.length).to.equal(5) expect(videos).to.be.an('array')
expect(videos.length).to.equal(5)
done() done()
}) })

View File

@ -60,8 +60,9 @@ describe('Test multiple pods', function () {
utils.getVideosList(server.url, function (err, res) { utils.getVideosList(server.url, function (err, res) {
if (err) throw err if (err) throw err
expect(res.body).to.be.an('array') const videos = res.body.data
expect(res.body.length).to.equal(0) expect(videos).to.be.an('array')
expect(videos.length).to.equal(0)
callback() callback()
}) })
@ -89,13 +90,13 @@ describe('Test multiple pods', function () {
utils.getVideosList(server.url, function (err, res) { utils.getVideosList(server.url, function (err, res) {
if (err) throw err if (err) throw err
const videos = res.body const videos = res.body.data
expect(videos).to.be.an('array') expect(videos).to.be.an('array')
expect(videos.length).to.equal(1) expect(videos.length).to.equal(1)
const video = videos[0] const video = videos[0]
expect(video.name).to.equal('my super name for pod 1') expect(video.name).to.equal('my super name for pod 1')
expect(video.description).to.equal('my super description 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.magnetUri).to.exist
expect(video.duration).to.equal(10) expect(video.duration).to.equal(10)
expect(utils.dateIsValid(video.createdDate)).to.be.true expect(utils.dateIsValid(video.createdDate)).to.be.true
@ -145,13 +146,13 @@ describe('Test multiple pods', function () {
utils.getVideosList(server.url, function (err, res) { utils.getVideosList(server.url, function (err, res) {
if (err) throw err if (err) throw err
const videos = res.body const videos = res.body.data
expect(videos).to.be.an('array') expect(videos).to.be.an('array')
expect(videos.length).to.equal(2) expect(videos.length).to.equal(2)
const video = videos[1] const video = videos[1]
expect(video.name).to.equal('my super name for pod 2') expect(video.name).to.equal('my super name for pod 2')
expect(video.description).to.equal('my super description 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.magnetUri).to.exist
expect(video.duration).to.equal(5) expect(video.duration).to.equal(5)
expect(utils.dateIsValid(video.createdDate)).to.be.true expect(utils.dateIsValid(video.createdDate)).to.be.true
@ -203,7 +204,7 @@ describe('Test multiple pods', function () {
utils.getVideosList(server.url, function (err, res) { utils.getVideosList(server.url, function (err, res) {
if (err) throw err if (err) throw err
const videos = res.body const videos = res.body.data
expect(videos).to.be.an('array') expect(videos).to.be.an('array')
expect(videos.length).to.equal(4) 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.name).to.equal('my super name for pod 3')
expect(video1.description).to.equal('my super description 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.magnetUri).to.exist
expect(video1.duration).to.equal(5) expect(video1.duration).to.equal(5)
expect(utils.dateIsValid(video1.createdDate)).to.be.true expect(utils.dateIsValid(video1.createdDate)).to.be.true
expect(video2.name).to.equal('my super name for pod 3-2') 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.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.magnetUri).to.exist
expect(video2.duration).to.equal(5) expect(video2.duration).to.equal(5)
expect(utils.dateIsValid(video2.createdDate)).to.be.true 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) { utils.getVideosList(servers[2].url, function (err, res) {
if (err) throw err if (err) throw err
const video = res.body[0] const video = res.body.data[0]
toRemove.push(res.body[2].id) toRemove.push(res.body.data[2].id)
toRemove.push(res.body[3].id) toRemove.push(res.body.data[3].id)
webtorrent.add(video.magnetUri, function (torrent) { webtorrent.add(video.magnetUri, function (torrent) {
expect(torrent.files).to.exist expect(torrent.files).to.exist
@ -294,7 +295,7 @@ describe('Test multiple pods', function () {
utils.getVideosList(servers[0].url, function (err, res) { utils.getVideosList(servers[0].url, function (err, res) {
if (err) throw err if (err) throw err
const video = res.body[1] const video = res.body.data[1]
webtorrent.add(video.magnetUri, function (torrent) { webtorrent.add(video.magnetUri, function (torrent) {
expect(torrent.files).to.exist expect(torrent.files).to.exist
@ -313,7 +314,7 @@ describe('Test multiple pods', function () {
utils.getVideosList(servers[1].url, function (err, res) { utils.getVideosList(servers[1].url, function (err, res) {
if (err) throw err if (err) throw err
const video = res.body[2] const video = res.body.data[2]
webtorrent.add(video.magnetUri, function (torrent) { webtorrent.add(video.magnetUri, function (torrent) {
expect(torrent.files).to.exist expect(torrent.files).to.exist
@ -332,7 +333,7 @@ describe('Test multiple pods', function () {
utils.getVideosList(servers[0].url, function (err, res) { utils.getVideosList(servers[0].url, function (err, res) {
if (err) throw err if (err) throw err
const video = res.body[3] const video = res.body.data[3]
webtorrent.add(video.magnetUri, function (torrent) { webtorrent.add(video.magnetUri, function (torrent) {
expect(torrent.files).to.exist expect(torrent.files).to.exist
@ -366,7 +367,7 @@ describe('Test multiple pods', function () {
utils.getVideosList(server.url, function (err, res) { utils.getVideosList(server.url, function (err, res) {
if (err) throw err if (err) throw err
const videos = res.body const videos = res.body.data
expect(videos).to.be.an('array') expect(videos).to.be.an('array')
expect(videos.length).to.equal(2) expect(videos.length).to.equal(2)
expect(videos[0].id).not.to.equal(videos[1].id) expect(videos[0].id).not.to.equal(videos[1].id)

View File

@ -47,8 +47,9 @@ describe('Test a single pod', function () {
utils.getVideosList(server.url, function (err, res) { utils.getVideosList(server.url, function (err, res) {
if (err) throw err if (err) throw err
expect(res.body).to.be.an('array') expect(res.body.total).to.equal(0)
expect(res.body.length).to.equal(0) expect(res.body.data).to.be.an('array')
expect(res.body.data.length).to.equal(0)
done() done()
}) })
@ -66,13 +67,14 @@ describe('Test a single pod', function () {
utils.getVideosList(server.url, function (err, res) { utils.getVideosList(server.url, function (err, res) {
if (err) throw err if (err) throw err
expect(res.body).to.be.an('array') expect(res.body.total).to.equal(1)
expect(res.body.length).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.name).to.equal('my super name')
expect(video.description).to.equal('my super description') 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.magnetUri).to.exist
expect(video.author).to.equal('root') expect(video.author).to.equal('root')
expect(video.isLocal).to.be.true expect(video.isLocal).to.be.true
@ -106,7 +108,7 @@ describe('Test a single pod', function () {
const video = res.body const video = res.body
expect(video.name).to.equal('my super name') expect(video.name).to.equal('my super name')
expect(video.description).to.equal('my super description') 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.magnetUri).to.exist
expect(video.author).to.equal('root') expect(video.author).to.equal('root')
expect(video.isLocal).to.be.true expect(video.isLocal).to.be.true
@ -131,13 +133,14 @@ describe('Test a single pod', function () {
utils.searchVideo(server.url, 'my', function (err, res) { utils.searchVideo(server.url, 'my', function (err, res) {
if (err) throw err if (err) throw err
expect(res.body).to.be.an('array') expect(res.body.total).to.equal(1)
expect(res.body.length).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.name).to.equal('my super name')
expect(video.description).to.equal('my super description') 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.author).to.equal('root')
expect(video.isLocal).to.be.true expect(video.isLocal).to.be.true
expect(utils.dateIsValid(video.createdDate)).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) { utils.searchVideo(server.url, 'hello', function (err, res) {
if (err) throw err if (err) throw err
expect(res.body).to.be.an('array') expect(res.body.total).to.equal(0)
expect(res.body.length).to.equal(0) expect(res.body.data).to.be.an('array')
expect(res.body.data.length).to.equal(0)
done() done()
}) })
@ -179,8 +183,9 @@ describe('Test a single pod', function () {
utils.getVideosList(server.url, function (err, res) { utils.getVideosList(server.url, function (err, res) {
if (err) throw err if (err) throw err
expect(res.body).to.be.an('array') expect(res.body.total).to.equal(0)
expect(res.body.length).to.equal(0) expect(res.body.data).to.be.an('array')
expect(res.body.data.length).to.equal(0)
done() done()
}) })
@ -201,7 +206,8 @@ describe('Test a single pod', function () {
utils.getVideosList(server.url, function (err, res) { utils.getVideosList(server.url, function (err, res) {
if (err) throw err 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).to.be.an('array')
expect(videos.length).to.equal(6) expect(videos.length).to.equal(6)
@ -221,7 +227,7 @@ describe('Test a single pod', function () {
utils.getVideosList(server.url, function (err, res) { utils.getVideosList(server.url, function (err, res) {
if (err) throw err if (err) throw err
const videos = res.body const videos = res.body.data
// For the next test // For the next test
videosListBase = videos videosListBase = videos
@ -243,7 +249,8 @@ describe('Test a single pod', function () {
utils.getVideosListPagination(server.url, 0, 2, function (err, res) { utils.getVideosListPagination(server.url, 0, 2, function (err, res) {
if (err) throw err 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.length).to.equal(2)
expect(videos[0].name === videosListBase[0].name) expect(videos[0].name === videosListBase[0].name)
expect(videos[1].name === videosListBase[1].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) { utils.getVideosListPagination(server.url, 2, 3, function (err, res) {
if (err) throw err 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.length).to.equal(4)
expect(videos[0].name === videosListBase[2].name) expect(videos[0].name === videosListBase[2].name)
expect(videos[1].name === videosListBase[3].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) { utils.getVideosListPagination(server.url, 5, 6, function (err, res) {
if (err) throw err 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.length).to.equal(1)
expect(videos[0].name === videosListBase[5].name) 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) { utils.searchVideoWithPagination(server.url, 'webm', 0, 1, function (err, res) {
if (err) throw err 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.length).to.equal(1)
expect(videos[0].name === 'video_short.webm name') 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) { utils.searchVideoWithPagination(server.url, 'webm', 2, 2, function (err, res) {
if (err) throw err 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.length).to.equal(2)
expect(videos[0].name === 'video_short2.webm name') expect(videos[0].name === 'video_short2.webm name')
expect(videos[1].name === 'video_short3.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) { utils.searchVideoWithPagination(server.url, 'webm', 0, 15, function (err, res) {
if (err) throw err 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.length).to.equal(4)
done() done()
@ -318,7 +330,8 @@ describe('Test a single pod', function () {
utils.getVideosListSort(server.url, '-name', function (err, res) { utils.getVideosListSort(server.url, '-name', function (err, res) {
if (err) throw err 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.length).to.equal(6)
expect(videos[5].name === 'video_short.mp4 name') expect(videos[5].name === 'video_short.mp4 name')
expect(videos[4].name === 'video_short.ogv 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) { utils.searchVideoWithSort(server.url, 'webm', 'name', function (err, res) {
if (err) throw err 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.length).to.equal(4)
expect(videos[0].name === 'video_short.webm name') expect(videos[0].name === 'video_short.webm name')

View File

@ -108,7 +108,7 @@ describe('Test users', function () {
utils.getVideosList(server.url, function (err, res) { utils.getVideosList(server.url, function (err, res) {
if (err) throw err if (err) throw err
const video = res.body[0] const video = res.body.data[0]
expect(video.author).to.equal('root') expect(video.author).to.equal('root')
videoId = video.id videoId = video.id