code review comments and PROX commit ID
[samplevnf.git] / VNF_Catalogue / routes / search_projects.js
1 /*******************************************************************************
2  * Copyright (c) 2017 Kumar Rishabh and others.
3  *
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Apache License, Version 2.0
6  * which accompanies this distribution, and is available at
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *******************************************************************************/
9
10 var express = require('express');
11 var router = express.Router();
12 var async = require('async');
13
14
15 var renderer = function(res, err, results) {
16     //console.log(results);
17     //console.log(results.length);
18     if(results.length >= 1)
19         res.render('search_projects', { title: 'Express', json: results });
20     else
21         res.render('search_projects', { title: 'Express', json: false });
22 }
23
24 var get_tags = function(result, callback) {
25     db_pool.getConnection(function(err, connection) {
26         sql_query = 'select tag_name from tag where tag_id in (select tag_id from vnf_tags where vnf_id = ' + result['vnf_id'] + ') and is_vnf_name = 0 limit 5';
27         // TODO find why it works and not above
28         connection.query(sql_query, function (error, results, fields) {
29             //console.log(results);
30             connection.release();
31             if (error) {
32                 result['tags'] = false;
33                 //throw error;
34             } else {
35                 result['tags'] = results;
36             }
37             callback(null, result);
38         });
39     });
40 }
41
42
43 var get_images = function(result, callback) {
44     db_pool.getConnection(function(err, connection) {
45         sql_query = 'select photo_url from photo where photo_id = ' + result['photo_id'];
46         // TODO find why it works here and not when declared outside the method
47         //console.log(sql_query);
48         connection.query(sql_query, function (error, results, fields) {
49             //console.log(results[0].photo_url);
50             //callback(null, result);
51             connection.release();
52             if (error) {
53                 result['photo_url'] = false;
54                 //throw error;
55             } else {
56                 result['photo_url'] = results[0].photo_url;
57             }
58             callback(null, result);
59             
60         });
61     });
62 }
63
64 var sql_data = function(tags, renderer, res) {
65     var tag_array = "\'" + tags.map(function (item) { return item; }).join("\',\'") + "\'";
66     console.log(tag_array);
67     var condition = '';
68     db_pool.getConnection(function(err, connection) {
69         sql_query = 'select tag_id from tag where tag_name in (' + tag_array + ')';
70         connection.query(sql_query, function (error, results, fields) {
71             console.log('tag_id');
72             console.log(results);
73             condition = 'SELECT * FROM vnf as v';
74             orig_condition = condition;
75             for (var i in results) {
76                 condition += (i == 0) ? ' WHERE ' : ' AND ';
77                 condition += 'v.vnf_id IN (SELECT vnf_id from vnf_tags where tag_id = ' + results[i]['tag_id'] + ')';
78             }
79             if (condition === orig_condition)
80                 condition += ' WHERE v.vnf_id = -1';
81             condition += ' limit 5';
82             console.log(condition);
83
84             connection.query(condition, function (error, results, fields) {
85                     //console.log(results);
86                     connection.release();
87                     if (error) {
88                         //throw error;
89                         console.log('connection error occurred');
90                     } else {
91                         async.map(results, get_images, function(error, results) {
92                             async.map(results, get_tags, renderer.bind(null, res));
93                         });
94                     }
95             });
96
97             //connection.release();
98             //if (error) throw error;
99         });
100     });
101
102 }
103
104 router.get('/', function(req, res) {
105
106   console.log(typeof(req.param('tags')));
107   var tags = req.param('tags');
108
109   if(tags) {
110     tags = tags.toLowerCase().split(/[ ,]+/);
111     console.log(tags);
112     sql_data(tags, renderer, res);
113   } else {
114     res.render('search_projects', { title: 'Express', json: false});
115   }
116
117 });
118
119 module.exports = router;