From a64f29c9d7804df9c9feaf7c92b1cec2c4be7d27 Mon Sep 17 00:00:00 2001
From: Vytor Calixto <vytorcalixto@gmail.com>
Date: Wed, 18 Jan 2017 09:59:08 -0200
Subject: [PATCH] Add function addValueToField in reqQueryFields

This adds the option to have values accepted only by one parameter, instead of
globals, like it was then
---
 src/libs/middlewares/reqQueryFields.js | 32 ++++++++++++++++++++++----
 1 file changed, 28 insertions(+), 4 deletions(-)

diff --git a/src/libs/middlewares/reqQueryFields.js b/src/libs/middlewares/reqQueryFields.js
index 27b0365b..4e6c55bc 100644
--- a/src/libs/middlewares/reqQueryFields.js
+++ b/src/libs/middlewares/reqQueryFields.js
@@ -27,6 +27,7 @@ class ReqQueryFields {
         //    fieldValues: {}
         // }
         if(typeof this.fields[field.name] === 'undefined') {
+            log.debug("added field "+field.name);
             this.fields[field.name] = field;
         }
         return this;
@@ -55,6 +56,21 @@ class ReqQueryFields {
 
         if(typeof this.fieldValues[fieldValue.name] === 'undefined') {
             this.fieldValues[fieldValue.name] = fieldValue;
+            log.debug("added value "+fieldValue.name);
+        }
+        return this;
+    }
+
+    addValueToField(fieldValue, field) {
+        if(typeof this.fields[field] === 'undefined') {
+            throw 'No field with name ' +field+ ' defined';
+        }
+        if(typeof this.fields[field].values === 'undefined') {
+            this.fields[field].values = {};
+        }
+        if(typeof this.fields[field].values[fieldValue.name] === 'undefined') {
+            this.fields[field].values[fieldValue.name] = fieldValue;
+            log.debug("added value "+fieldValue.name+ ' to field ' + field);
         }
         return this;
     }
@@ -66,8 +82,10 @@ class ReqQueryFields {
                 let f = this.fields[key];
                 log.debug('f');
                 log.debug(f);
-                Object.keys(this.fieldValues).map((k, i) => {
-                    let value = this.fieldValues[k];
+                // Unimos os valores aceitos globalmente com os aceitos apenas pelo parâmetro
+                let values = _.merge(this.fieldValues, f.values);
+                Object.keys(values).map((k, i) => {
+                    let value = values[k];
                     log.debug('value');
                     log.debug(value);
                     params.push(value.name);
@@ -119,9 +137,13 @@ class ReqQueryFields {
                 let field = this.fields[key];
                 log.debug(field);
                 let param = req[field.name];
+                log.debug('param');
                 log.debug(param);
                 Object.keys(param).map((k, i) => {
-                    let values = this.fieldValues;
+                    let values = _.merge(this.fieldValues, field.values);
+                    log.debug('ValueS');
+                    log.debug(values);
+                    log.debug('k');
                     log.debug(k);
                     if(typeof values[k] !== 'undefined') {
                         // Clonamos para não alterar
@@ -151,8 +173,10 @@ class ReqQueryFields {
                             // Valor sempre vem como string, necessário fazer parse para o banco
                             if(value.where.type === 'integer') whereValue = parseInt(whereValue, 10);
                             if(value.where.type === 'double') whereValue = parseFloat(whereValue);
+                            if(value.where.type === 'string') whereValue = '%'+whereValue+'%';
                             let tbl = value.where.table || value.table;
-                            req.sql.where(tbl+'.'+value.where.field+' '+value.where.relation+' ?', whereValue);
+                            let whereField = (value.where.type === 'string')? 'LOWER('+tbl+'.'+value.where.field+')' : tbl+'.'+value.where.field;
+                            req.sql.where(whereField+' '+value.where.relation+' LOWER(?)', whereValue);
                         }
                     }
                 });
-- 
GitLab