Jobs on Compass often timeout
[releng.git] / utils / test / vnfcatalogue / VNF_Catalogue / routes / search_projects.js
index 49fceeb..96f68db 100644 (file)
@@ -9,11 +9,86 @@
 
 var express = require('express');
 var router = express.Router();
+var async = require('async');
+
+
+var renderer = function(res, err, results) {
+    console.log(results);
+    res.render('search_projects', { title: 'Express', json: results });
+}
+
+var get_tags = function(result, callback) {
+    db_pool.getConnection(function(err, connection) {
+        sql_query = 'select tag_name from tag where tag_id in (select tag_id from vnf_tags where vnf_id = ' + result['vnf_id'] + ') limit 5';
+        // TODO find why it works and not above
+        connection.query(sql_query, function (error, results, fields) {
+            console.log(results);
+            result['tags'] = results;
+            callback(null, result);
+            //connection.release();
+            if (error) throw error;
+        });
+    });
+}
+
+
+var get_images = function(result, callback) {
+    db_pool.getConnection(function(err, connection) {
+        sql_query = 'select photo_url from photo where photo_id = ' + result['photo_id'];
+        // TODO find why it works here and not when declared outside the method
+        console.log(sql_query);
+        connection.query(sql_query, function (error, results, fields) {
+            console.log(results[0].photo_url);
+            result['photo_url'] = results[0].photo_url;
+            callback(null, result);
+            //connection.release();
+            if (error) throw error;
+        });
+    });
+}
+
+var sql_data = function(tags, renderer, res) {
+    var tag_array = "\'" + tags.map(function (item) { return item; }).join("\',\'") + "\'";
+    console.log(tag_array);
+    var condition = '';
+    db_pool.getConnection(function(err, connection) {
+        sql_query = 'select tag_id from tag where tag_name in (' + tag_array + ')';
+        connection.query(sql_query, function (error, results, fields) {
+            condition = 'SELECT * FROM vnf as v';
+            for (var i in results) {
+                condition += (i == 0) ? ' WHERE ' : ' AND ';
+                condition += 'v.vnf_id IN (SELECT vnf_id from vnf_tags where tag_id = ' + results[i]['tag_id'] + ')';
+            }
+
+            connection.query(condition, function (error, results, fields) {
+                    console.log(results);
+                    async.map(results, get_images, function(error, results) {
+                        async.map(results, get_tags, renderer.bind(null, res));
+                    });
+                    //connection.release();
+                    if (error) throw error;
+            });
+
+            connection.release();
+            if (error) throw error;
+        });
+    });
+
+}
 
 router.get('/', function(req, res) {
+
+  console.log(typeof(req.param('tags')));
   var tags = req.param('tags');
-  console.log(tags);
-  res.render('search_projects', { title: 'Express' });
+
+  if(tags) {
+    tags = tags.toLowerCase().split(/[ ,]+/);
+    console.log(tags);
+    sql_data(tags, renderer, res);
+  } else {
+    res.render('search_projects', { title: 'Express', json: false});
+  }
+
 });
 
 module.exports = router;