Server: add updatedAt attribute to videos
authorChocobozzz <florian.bigard@gmail.com>
Fri, 30 Dec 2016 10:45:00 +0000 (11:45 +0100)
committerChocobozzz <florian.bigard@gmail.com>
Fri, 30 Dec 2016 10:45:00 +0000 (11:45 +0100)
server/controllers/api/remote.js
server/helpers/custom-validators/videos.js
server/models/video.js
server/tests/api/multiple-pods.js
server/tests/api/single-pod.js
server/tests/utils/miscs.js

index 254ae56d52b0fb63a075ba2b6276755c4bc78c89..a36c31c38c897ff0f1d03da5d92e2401c93bf85f 100644 (file)
@@ -98,7 +98,8 @@ function addRemoteVideo (videoToCreateData, fromPod, finalCallback) {
         description: videoToCreateData.description,
         authorId: author.id,
         duration: videoToCreateData.duration,
-        createdAt: videoToCreateData.createdAt
+        createdAt: videoToCreateData.createdAt,
+        updatedAt: videoToCreateData.updatedAt
       }
 
       const video = db.Video.build(videoData)
@@ -190,6 +191,7 @@ function updateRemoteVideo (videoAttributesToUpdate, fromPod, finalCallback) {
       videoInstance.set('infoHash', videoAttributesToUpdate.infoHash)
       videoInstance.set('duration', videoAttributesToUpdate.duration)
       videoInstance.set('createdAt', videoAttributesToUpdate.createdAt)
+      videoInstance.set('updatedAt', videoAttributesToUpdate.updatedAt)
       videoInstance.set('extname', videoAttributesToUpdate.extname)
 
       videoInstance.save(options).asCallback(function (err) {
index b76eec1b5b72a8795697e70776766b435c1263ce..8448386d94d759958d2ad460c38d3b7a9b21958f 100644 (file)
@@ -28,6 +28,7 @@ function isEachRemoteVideosValid (requests) {
         isRequestTypeAddValid(request.type) &&
         isVideoAuthorValid(video.author) &&
         isVideoDateValid(video.createdAt) &&
+        isVideoDateValid(video.updatedAt) &&
         isVideoDescriptionValid(video.description) &&
         isVideoDurationValid(video.duration) &&
         isVideoInfoHashValid(video.infoHash) &&
@@ -40,6 +41,7 @@ function isEachRemoteVideosValid (requests) {
       (
         isRequestTypeUpdateValid(request.type) &&
         isVideoDateValid(video.createdAt) &&
+        isVideoDateValid(video.updatedAt) &&
         isVideoDescriptionValid(video.description) &&
         isVideoDurationValid(video.duration) &&
         isVideoInfoHashValid(video.infoHash) &&
index f51d08f06f4a4e430c9cbb811d881af6c80e4e78..3fe8368c76c7c88428836a2651bf65841e701a3a 100644 (file)
@@ -20,7 +20,6 @@ const customVideosValidators = require('../helpers/custom-validators').videos
 // ---------------------------------------------------------------------------
 
 module.exports = function (sequelize, DataTypes) {
-  // TODO: add indexes on searchable columns
   const Video = sequelize.define('Video',
     {
       id: {
@@ -329,7 +328,8 @@ function toFormatedJSON () {
     duration: this.duration,
     tags: map(this.Tags, 'name'),
     thumbnailPath: constants.STATIC_PATHS.THUMBNAILS + '/' + this.getThumbnailName(),
-    createdAt: this.createdAt
+    createdAt: this.createdAt,
+    updatedAt: this.updatedAt
   }
 
   return json
@@ -356,6 +356,7 @@ function toAddRemoteJSON (callback) {
       thumbnailData: thumbnailData.toString('binary'),
       tags: map(self.Tags, 'name'),
       createdAt: self.createdAt,
+      updatedAt: self.updatedAt,
       extname: self.extname
     }
 
@@ -373,6 +374,7 @@ function toUpdateRemoteJSON (callback) {
     duration: this.duration,
     tags: map(this.Tags, 'name'),
     createdAt: this.createdAt,
+    updatedAt: this.updatedAt,
     extname: this.extname
   }
 
index 6721870682b6a9e1450f8cf458af594d11714b27..4442a7ff7613cfe8a0376b8dcf27ddefc2b31770 100644 (file)
@@ -105,6 +105,7 @@ describe('Test multiple pods', function () {
               expect(video.duration).to.equal(10)
               expect(video.tags).to.deep.equal([ 'tag1p1', 'tag2p1' ])
               expect(miscsUtils.dateIsValid(video.createdAt)).to.be.true
+              expect(miscsUtils.dateIsValid(video.updatedAt)).to.be.true
               expect(video.author).to.equal('root')
 
               if (server.url !== 'http://localhost:9001') {
@@ -167,6 +168,7 @@ describe('Test multiple pods', function () {
               expect(video.duration).to.equal(5)
               expect(video.tags).to.deep.equal([ 'tag1p2', 'tag2p2', 'tag3p2' ])
               expect(miscsUtils.dateIsValid(video.createdAt)).to.be.true
+              expect(miscsUtils.dateIsValid(video.updatedAt)).to.be.true
               expect(video.author).to.equal('root')
 
               if (server.url !== 'http://localhost:9002') {
@@ -247,6 +249,7 @@ describe('Test multiple pods', function () {
               expect(video1.tags).to.deep.equal([ 'tag1p3' ])
               expect(video1.author).to.equal('root')
               expect(miscsUtils.dateIsValid(video1.createdAt)).to.be.true
+              expect(miscsUtils.dateIsValid(video1.updatedAt)).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')
@@ -256,6 +259,7 @@ describe('Test multiple pods', function () {
               expect(video2.tags).to.deep.equal([ 'tag2p3', 'tag3p3', 'tag4p3' ])
               expect(video2.author).to.equal('root')
               expect(miscsUtils.dateIsValid(video2.createdAt)).to.be.true
+              expect(miscsUtils.dateIsValid(video2.updatedAt)).to.be.true
 
               if (server.url !== 'http://localhost:9003') {
                 expect(video1.isLocal).to.be.false
@@ -398,6 +402,7 @@ describe('Test multiple pods', function () {
           expect(!!videoUpdated).to.be.true
           expect(videoUpdated.description).to.equal('my super description updated')
           expect(videoUpdated.tags).to.deep.equal([ 'tagup1', 'tagup2' ])
+          expect(miscsUtils.dateIsValid(videoUpdated.updatedAt, 20000)).to.be.true
 
           callback()
         })
index 57146900de47cb6994fe85709518c855f2bc29c7..29512dfc6a47ad7d573c7d05db801a105419965c 100644 (file)
@@ -83,6 +83,7 @@ describe('Test a single pod', function () {
       expect(video.isLocal).to.be.true
       expect(video.tags).to.deep.equal([ 'tag1', 'tag2', 'tag3' ])
       expect(miscsUtils.dateIsValid(video.createdAt)).to.be.true
+      expect(miscsUtils.dateIsValid(video.updatedAt)).to.be.true
 
       videosUtils.testVideoImage(server.url, 'video_short.webm', video.thumbnailPath, function (err, test) {
         if (err) throw err
@@ -117,6 +118,7 @@ describe('Test a single pod', function () {
       expect(video.isLocal).to.be.true
       expect(video.tags).to.deep.equal([ 'tag1', 'tag2', 'tag3' ])
       expect(miscsUtils.dateIsValid(video.createdAt)).to.be.true
+      expect(miscsUtils.dateIsValid(video.updatedAt)).to.be.true
 
       videosUtils.testVideoImage(server.url, 'video_short.webm', video.thumbnailPath, function (err, test) {
         if (err) throw err
@@ -143,6 +145,7 @@ describe('Test a single pod', function () {
       expect(video.isLocal).to.be.true
       expect(video.tags).to.deep.equal([ 'tag1', 'tag2', 'tag3' ])
       expect(miscsUtils.dateIsValid(video.createdAt)).to.be.true
+      expect(miscsUtils.dateIsValid(video.updatedAt)).to.be.true
 
       videosUtils.testVideoImage(server.url, 'video_short.webm', video.thumbnailPath, function (err, test) {
         if (err) throw err
@@ -170,6 +173,7 @@ describe('Test a single pod', function () {
   //     expect(video.isLocal).to.be.true
   //     expect(video.tags).to.deep.equal([ 'tag1', 'tag2', 'tag3' ])
   //     expect(miscsUtils.dateIsValid(video.createdAt)).to.be.true
+  //     expect(miscsUtils.dateIsValid(video.updatedAt)).to.be.true
 
   //     videosUtils.testVideoImage(server.url, 'video_short.webm', video.thumbnailPath, function (err, test) {
   //       if (err) throw err
@@ -196,6 +200,7 @@ describe('Test a single pod', function () {
       expect(video.isLocal).to.be.true
       expect(video.tags).to.deep.equal([ 'tag1', 'tag2', 'tag3' ])
       expect(miscsUtils.dateIsValid(video.createdAt)).to.be.true
+      expect(miscsUtils.dateIsValid(video.updatedAt)).to.be.true
 
       videosUtils.testVideoImage(server.url, 'video_short.webm', video.thumbnailPath, function (err, test) {
         if (err) throw err
@@ -522,6 +527,7 @@ describe('Test a single pod', function () {
       expect(video.isLocal).to.be.true
       expect(video.tags).to.deep.equal([ 'tagup1', 'tagup2' ])
       expect(miscsUtils.dateIsValid(video.createdAt)).to.be.true
+      expect(miscsUtils.dateIsValid(video.updatedAt)).to.be.true
 
       done()
     })
@@ -545,6 +551,7 @@ describe('Test a single pod', function () {
         expect(video.isLocal).to.be.true
         expect(video.tags).to.deep.equal([ 'tag1', 'tag2', 'supertag' ])
         expect(miscsUtils.dateIsValid(video.createdAt)).to.be.true
+        expect(miscsUtils.dateIsValid(video.updatedAt)).to.be.true
 
         done()
       })
@@ -569,6 +576,7 @@ describe('Test a single pod', function () {
         expect(video.isLocal).to.be.true
         expect(video.tags).to.deep.equal([ 'tag1', 'tag2', 'supertag' ])
         expect(miscsUtils.dateIsValid(video.createdAt)).to.be.true
+        expect(miscsUtils.dateIsValid(video.updatedAt)).to.be.true
 
         done()
       })
index 4ceff65df5cb09e4bf316979bbc04ac6a1114cae..c4b661496a8c5bf3aa63833ea6f90156b301b2ae 100644 (file)
@@ -6,12 +6,14 @@ const miscsUtils = {
 
 // ---------------------- Export functions --------------------
 
-function dateIsValid (dateString) {
+function dateIsValid (dateString, interval) {
   const dateToCheck = new Date(dateString)
   const now = new Date()
 
   // Check if the interval is more than 2 minutes
-  if (now - dateToCheck > 120000) return false
+  if (!interval) interval = 120000
+
+  if (now - dateToCheck > interval) return false
 
   return true
 }