Мы сталкиваемся с проблемами качества кода из-за встроенных запросов mysql. Наличие самозанятых запросов mysql действительно загромождает код, а также увеличивает базу кода и т.д.
Наш код загроможден такими вещами, как
/* beautify ignore:start */
/* jshint ignore:start */
var sql = "SELECT *"
+" ,DATE_ADD(sc.created_at,INTERVAL 14 DAY) AS duedate"
+" ,distance_mail(?,?,lat,lon) as distance,count(pks.skill_id) c1"
+" ,count(ps.profile_id) c2"
+" FROM TABLE sc"
+" JOIN "
+" PACKAGE_V psc on sc.id = psc.s_id "
+" JOIN "
+" PACKAGE_SKILL pks on pks.package_id = psc.package_id "
+" LEFT JOIN PROFILE_SKILL ps on ps.skill_id = pks.skill_id and ps.profile_id = ?"
+" WHERE sc.type in "
+" ('a',"
+" 'b',"
+" 'c' ,"
+" 'd',"
+" 'e',"
+" 'f',"
+" 'g',"
+" 'h')"
+" AND sc.status = 'open'"
+" AND sc.crowd_type = ?"
+" AND sc.created_at < DATE_SUB(NOW(),INTERVAL 10 MINUTE) "
+" AND sc.created_at > DATE_SUB(NOW(),INTERVAL 14 DAY)"
+" AND distance_mail(?, ?,lat,lon) < 500"
+" GROUP BY sc.id"
+" HAVING c1 = c2 "
+" ORDER BY distance;";
/* jshint ignore:end */
/* beautify ignore:end */
Мне пришлось немного размыть код.
Как вы можете видеть, повторение этого кода в коде просто нечитаемо. Также из-за того, что atm мы не можем перейти на ES6, что, по крайней мере, немного по сравнению с многострочными строками.
Вопрос в том, есть способ сохранить эти процедуры SQL в одном месте? В качестве дополнительной информации мы используем node (~ 0,12) и выражаем, чтобы открыть API, получив доступ к MySQL db.
Я уже думал, используя JSON, что приведет к еще большему беспорядку. Плюс это может быть даже невозможно, поскольку кодировка JSON немного строгая, и JSON, вероятно, не понравится иметь многострочные строки.
Затем я придумал идею хранения SQL в файле и загрузки при запуске приложения node. Это на данный момент мой лучший шанс получить SQL-запросы в ОДНОМ месте и предложить их остальным модулям node. Вопрос здесь, используйте ОДИН файл? Использовать один файл для каждого запроса? Использовать один файл в таблице базы данных?
Любая помощь приветствуется, я не могу быть первой на этой планете, поэтому, возможно, у кого-то есть рабочее, приятное решение!
PS: Я пытался использовать libs, например squel, но это действительно не помогает, так как наши запросы сложны, как вы можете видеть. Это в основном о том, чтобы получить НАШИ запросы в "центральный запрос".