Server: add ability to update a video

This commit is contained in:
Chocobozzz
2016-12-29 19:07:05 +01:00
parent 4ff0d86208
commit 7b1f49de22
7 changed files with 344 additions and 15 deletions

View File

@@ -50,6 +50,12 @@ router.get('/',
pagination.setPagination,
listVideos
)
router.put('/:id',
oAuth.authenticate,
reqFiles,
validatorsVideos.videosUpdate,
updateVideo
)
router.post('/',
oAuth.authenticate,
reqFiles,
@@ -165,7 +171,7 @@ function addVideo (req, res, next) {
},
function sendToFriends (t, video, callback) {
video.toRemoteJSON(function (err, remoteVideo) {
video.toAddRemoteJSON(function (err, remoteVideo) {
if (err) return callback(err)
// Now we'll add the video's meta data to our friends
@@ -193,6 +199,83 @@ function addVideo (req, res, next) {
})
}
function updateVideo (req, res, next) {
let videoInstance = res.locals.video
const videoInfosToUpdate = req.body
waterfall([
function startTransaction (callback) {
db.sequelize.transaction().asCallback(function (err, t) {
return callback(err, t)
})
},
function findOrCreateTags (t, callback) {
if (videoInfosToUpdate.tags) {
db.Tag.findOrCreateTags(videoInfosToUpdate.tags, t, function (err, tagInstances) {
return callback(err, t, tagInstances)
})
} else {
return callback(null, t, null)
}
},
function updateVideoIntoDB (t, tagInstances, callback) {
const options = { transaction: t }
if (videoInfosToUpdate.name) videoInstance.set('name', videoInfosToUpdate.name)
if (videoInfosToUpdate.description) videoInstance.set('description', videoInfosToUpdate.description)
// Add tags association
videoInstance.save(options).asCallback(function (err) {
if (err) return callback(err)
return callback(err, t, tagInstances)
})
},
function associateTagsToVideo (t, tagInstances, callback) {
if (tagInstances) {
const options = { transaction: t }
videoInstance.setTags(tagInstances, options).asCallback(function (err) {
videoInstance.Tags = tagInstances
return callback(err, t)
})
} else {
return callback(null, t)
}
},
function sendToFriends (t, callback) {
const json = videoInstance.toUpdateRemoteJSON()
// Now we'll update the video's meta data to our friends
friends.updateVideoToFriends(json)
return callback(null, t)
}
], function andFinally (err, t) {
if (err) {
logger.error('Cannot insert the video.')
// Abort transaction?
if (t) t.rollback()
return next(err)
}
// Commit transaction
t.commit()
// TODO : include Location of the new video -> 201
return res.type('json').status(204).end()
})
}
function getVideo (req, res, next) {
db.Video.loadAndPopulateAuthorAndPodAndTags(req.params.id, function (err, video) {
if (err) return next(err)