From 70e7acfeed549e04fdc8699fb1835949fb93e411 Mon Sep 17 00:00:00 2001 From: Wesnydy Ribeiro Date: Tue, 31 Jan 2017 22:53:54 -0300 Subject: [PATCH] Express basic structure --- translate-api/app.js | 106 ++++++++++++++++------------------------------------------------------------------------------------------ translate-api/controllers/translate.js | 44 ++++++++++++++++++++++++++++++++++++++++++++ translate-api/controllers/video.js | 28 ++++++++++++++++++++++++++++ translate-api/helpers/amqpManager.js | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ translate-api/routes/translate.js | 17 +++++++++++++++++ translate-api/routes/video.js | 16 ++++++++++++++++ 6 files changed, 196 insertions(+), 90 deletions(-) create mode 100644 translate-api/controllers/translate.js create mode 100644 translate-api/controllers/video.js create mode 100644 translate-api/helpers/amqpManager.js create mode 100644 translate-api/routes/translate.js create mode 100644 translate-api/routes/video.js diff --git a/translate-api/app.js b/translate-api/app.js index 092ec5d..0c7ad98 100755 --- a/translate-api/app.js +++ b/translate-api/app.js @@ -11,16 +11,13 @@ /** * Module dependencies. */ -var express = require('express'); -var bodyParser = require('body-parser'); -var shortid = require('shortid'); -var amqp = require('amqplib/callback_api'); +var express = require('express') +var bodyParser = require('body-parser') + +var translate = require('./routes/translate') +var video = require('./routes/video'); -/** - * Express application and router object. - */ var app = express(); -var router = express.Router(); /** * For parsing application/json and application/x-www-form-urlencoded @@ -29,96 +26,25 @@ app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); /** - * Function to send text to the queue. - */ -function sendToQueue(id, text, queue, durability, res) { - amqp.connect('amqp://localhost', function(err, conn) { - if(err) { - res.json({message : err}); - throw err; - } - conn.createChannel(function(err, ch) { - if(err) { - res.json({message : err}); - throw err; - } - ch.assertQueue(queue, {durable : durability}); - ch.sendToQueue(queue, new Buffer(text), {correlationId : id}); - try { - ch.close(); - } - catch (alreadyClosed) { - console.log(alreadyClosed.stackAtStateChange); - } - }); - setTimeout(function() { conn.close(); }, 500000); - }); -} - -/** - * Function to receive gloss from the queue. + * Public directory. */ -function receiveFromQueue(id, queue, durability, res) { - amqp.connect('amqp://localhost', function(err, conn) { - if(err) { - res.json({message : err}); - throw err; - } - conn.createChannel(function(err, ch) { - if(err){ - res.json({message : err}); - throw err; - } - ch.assertQueue(queue, {durable : durability}); - ch.consume(queue, function(msg) { - if (msg.properties.correlationId === id) { - ch.ack(msg); - res.send(msg.content.toString()) - try { - ch.close(); - } - catch (alreadyClosed) { - console.log(alreadyClosed.stackAtStateChange); - } - } - else { - ch.reject(msg); - } - }, {noAck : false}); - }); - setTimeout(function() { conn.close(); }, 500000); - }); -} - -/** - * Route to process text and return gloss. - */ -router.post('/', function(req, res) { - if (!req.body.text) - return console.log('Text key is missing'); - - var id = shortid.generate(); - var text = req.body.text; - sendToQueue(id, text, 'texts', false, res); - sendToQueue(id, text, 'log', true, res); - receiveFromQueue(id, 'glosses', false, res); -}); +app.use('/video', express.static(process.env.VLIBRAS_VIDEO_LIBRAS)); /** - * OLD VERSION + * Allow cross origin requests. */ -router.get('/', function(req, res) { - var texto = req.param('text').toString('utf8'); - var id = shortid.generate(); - sendToQueue(id, texto, 'texts', false, res); - sendToQueue(id, texto, 'log', true, res); - receiveFromQueue(id, 'glosses', false, res); +app.use(function(req, res, next) { + res.setHeader("Access-Control-Allow-Methods", "POST, GET"); + res.header("Access-Control-Allow-Origin", "http://localhost:80"); + res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); + next(); }); /** - * Register routes with prefix '/translate'. + * Register routes. */ -app.use('/translate', router); +app.use('/translate', translate); +app.use('/video', video); /** * Error handler. diff --git a/translate-api/controllers/translate.js b/translate-api/controllers/translate.js new file mode 100644 index 0000000..8d76d48 --- /dev/null +++ b/translate-api/controllers/translate.js @@ -0,0 +1,44 @@ +/** + * Author: Wesnydy Lima Ribeiro + * Email: wesnydy@lavid.ufpb.br + */ + +'use strict'; + +/** + * Required libs. + */ +var shortid = require('shortid') + , amqp = require('../helpers/amqpManager'); + +exports.translate = function(req, res) { + + var body = {}; + var id = shortid.generate(); + + if (!req.body.text) + return console.log('Text key is missing'); + + body.text = req.body.text; + body.type = 'gloss'; + + amqp.sendToQueue(body, id,'texts', false, res); + amqp.sendToQueue(body, id,'logs', true, res); + amqp.receiveFromQueue(id, 'glosses', false, res); +}; + +exports.urltranslate = function(req, res) { + + var body = {}; + var id = shortid.generate(); + + if (!req.body.text) + return console.log('Text key missing'); + + body.text = req.param('text').toString('utf8'); + body.type = 'gloss'; + + amqp.sendToQueue(body, id, 'texts', false, res); + amqp.sendToQueue(body, id, 'logs', true, res); + amqp.receiveFromQueue(id, 'glosses', false, res); +}; diff --git a/translate-api/controllers/video.js b/translate-api/controllers/video.js new file mode 100644 index 0000000..8ee3a49 --- /dev/null +++ b/translate-api/controllers/video.js @@ -0,0 +1,28 @@ +/** + * Author: Wesnydy Lima Ribeiro + * Email: wesnydy@lavid.ufpb.br + */ + +'use strict'; + +/** + * Required libs. + */ +var shortid = require('shortid') + , amqp = require('../helpers/amqpManager'); + +exports.createVideo = function(req, res) { + + var body = {}; + var id = shortid.generate(); + + if (!req.body.text) + return console.log('Text key missing'); + + body.text = req.body.text; + body.type = 'video'; + + amqp.sendToQueue(body, id, 'texts', false, res); + amqp.sendToQueue(body, id, 'logs', true, res); + amqp.receiveFromQueue(id, 'videos', false, res); +}; diff --git a/translate-api/helpers/amqpManager.js b/translate-api/helpers/amqpManager.js new file mode 100644 index 0000000..ca2cab6 --- /dev/null +++ b/translate-api/helpers/amqpManager.js @@ -0,0 +1,75 @@ +/** + * Author: Wesnydy Lima Ribeiro + * Email: wesnydy@lavid.ufpb.br + */ + +'use strict'; + +/** + * Required libs. + */ +var amqplib = require('amqplib/callback_api'); + +/** + * Function to send text to the queue. + */ +exports.sendToQueue = function(body, id, queue, durability, res) { + + amqplib.connect('amqp://localhost', function(err, conn) { + if(err) { + res.json({message : err}); + throw err; + } + conn.createChannel(function(err, ch) { + if(err) { + res.json({message : err}); + throw err; + } + ch.assertQueue(queue, {durable : durability}); + ch.sendToQueue(queue, new Buffer(JSON.stringify(body)), {correlationId : id}); + try { + ch.close(); + } + catch (alreadyClosed) { + console.log(alreadyClosed.stackAtStateChange); + } + }); + setTimeout(function() { conn.close(); }, 500000); + }); +}; + +/** + * Function to receive gloss from the queue. + */ +exports.receiveFromQueue = function(id, queue, durability, res) { + + amqplib.connect('amqp://localhost', function(err, conn) { + if(err) { + res.json({message : err}); + throw err; + } + conn.createChannel(function(err, ch) { + if(err){ + res.json({message : err}); + throw err; + } + ch.assertQueue(queue, {durable : durability}); + ch.consume(queue, function(msg) { + if (msg.properties.correlationId === id) { + ch.ack(msg); + res.send(msg.content.toString()) + try { + ch.close(); + } + catch (alreadyClosed) { + console.log(alreadyClosed.stackAtStateChange); + } + } + else { + ch.reject(msg); + } + }, {noAck : false}); + }); + setTimeout(function() { conn.close(); }, 500000); + }); +}; diff --git a/translate-api/routes/translate.js b/translate-api/routes/translate.js new file mode 100644 index 0000000..01086a5 --- /dev/null +++ b/translate-api/routes/translate.js @@ -0,0 +1,17 @@ +/** + * Author: Wesnydy Lima Ribeiro + * Email: wesnydy@lavid.ufpb.br + */ + +var express = require('express') + , router = express.Router() + , translateController = require('../controllers/translate'); + +/** + * Routes to process text and return gloss. + */ +router + .get('/', translateController.urltranslate) + .post('/', translateController.translate) + +module.exports = router; diff --git a/translate-api/routes/video.js b/translate-api/routes/video.js new file mode 100644 index 0000000..61d2e18 --- /dev/null +++ b/translate-api/routes/video.js @@ -0,0 +1,16 @@ +/** + * Author: Wesnydy Lima Ribeiro + * Email: wesnydy@lavid.ufpb.br + */ + +var express = require('express') + , router = express.Router() + , videoController = require('../controllers/video'); + +/** + * Route to process text and create video. + */ +router + .post('/', videoController.createVideo) + +module.exports = router; -- libgit2 0.21.2