Commit 52773ef6e841b5efd0433be3c130887eaa02e397
1 parent
4abe5356
Exists in
master
and in
4 other branches
Assync video generation implementation
Showing
1 changed file
with
53 additions
and
4 deletions
Show diff stats
translate-api/controllers/video.js
| ... | ... | @@ -9,16 +9,65 @@ |
| 9 | 9 | * Required libs. |
| 10 | 10 | */ |
| 11 | 11 | var shortid = require('shortid') |
| 12 | + , Video = require('../models/video') | |
| 12 | 13 | , amqp = require('../helpers/amqpManager'); |
| 13 | 14 | |
| 14 | -exports.createVideo = function(req, res) { | |
| 15 | +exports.create = function(req, res) { | |
| 15 | 16 | if (!req.body.gloss) |
| 16 | 17 | return console.log('Gloss key missing'); |
| 17 | 18 | |
| 18 | 19 | var id = shortid.generate(); |
| 19 | 20 | var gloss = req.body.gloss; |
| 20 | 21 | |
| 21 | - amqp.sendToQueue(gloss, id, 'glosses', false, res); | |
| 22 | - amqp.sendToQueue(gloss, id, 'logs', true, res); | |
| 23 | - amqp.receiveFromQueue(id, 'videos', false, res); | |
| 22 | + var video = new Video({ | |
| 23 | + status: 'processing' | |
| 24 | + }); | |
| 25 | + | |
| 26 | + new Promise(function (resolve) { | |
| 27 | + video.save(function(err) { | |
| 28 | + if (err) | |
| 29 | + return console.error(err); | |
| 30 | + res.json({ id: video._id }); | |
| 31 | + resolve(gloss); | |
| 32 | + }); | |
| 33 | + }) | |
| 34 | + .then(function(gloss) { | |
| 35 | + return new Promise(function(resolve) { | |
| 36 | + amqp.sendToQueue(gloss, id, 'glosses', false, res, function(err) { | |
| 37 | + if (err) | |
| 38 | + return console.error(err); | |
| 39 | + amqp.receiveFromQueue(id, 'videos', false, res, function(err, message) { | |
| 40 | + if (err) | |
| 41 | + return console.error(err); | |
| 42 | + resolve(message); | |
| 43 | + }); | |
| 44 | + }); | |
| 45 | + }) | |
| 46 | + .then(function(message) { | |
| 47 | + var body = JSON.parse(message); | |
| 48 | + Video.findOneAndUpdate( {_id: video._id}, { | |
| 49 | + $set:{ | |
| 50 | + file: body.file, | |
| 51 | + size: body.size, | |
| 52 | + status: body.status | |
| 53 | + } | |
| 54 | + }, {new: true}, function(err, content) { | |
| 55 | + if (err) | |
| 56 | + return console.log(err); | |
| 57 | + }); | |
| 58 | + }); | |
| 59 | + }); | |
| 60 | +}; | |
| 61 | + | |
| 62 | +exports.status = function(req, res) { | |
| 63 | + // Receive param id | |
| 64 | + var contentID = req.params.id; | |
| 65 | + // Find content by id on MongoDB | |
| 66 | + return Video.findById(contentID, function (err, video) { | |
| 67 | + // returns error when can not find content | |
| 68 | + if (err) | |
| 69 | + res.status(404).send('Not Found'); | |
| 70 | + else | |
| 71 | + res.json( { 'status': video.status, 'file': video.file, 'size': video.size } ); | |
| 72 | + }); | |
| 24 | 73 | }; | ... | ... |