UNPKG

@icon-solutions/balthazar-query-builder

Version:

This package is a query-builder used to convert data from the segment-builder into SQL-queries.

116 lines (115 loc) 6.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.countQueryBuilder = void 0; const findQueryDataStructure_1 = require("./findQueryDataStructure/findQueryDataStructure"); const generateBaseQueryString_1 = require("./generateBaseQueryString/generateBaseQueryString"); const httpStatuses_1 = require("./httpStatuses/httpStatuses"); const buildQueryString_1 = require("./buildQueryString/buildQueryString"); const sortData_1 = require("./sortData/sortData"); const dataHandler_1 = require("./dataHandler/dataHandler"); const addAnd_1 = require("./addAnd/addAnd"); // QueryBuilders const titleQueryBuilder_1 = require("./queryBuilders/titleQueryBuilder/titleQueryBuilder"); const jobFunctionQueryBuilder_1 = require("./queryBuilders/jobFunctionQueryBuilder/jobFunctionQueryBuilder"); const titleLevelQueryBuilder_1 = require("./queryBuilders/titleLevelQueryBuilder/titleLevelQueryBuilder"); const naceQueryBuilder_1 = require("./queryBuilders/naceQueryBuilder/naceQueryBuilder"); const countQueryBuilder = (queryData) => { console.log("[countQueryBuilder.ts] queryData: ", queryData); const structure = (0, findQueryDataStructure_1.findQueryDataStructure)(queryData); const queryArray = []; const baseQueryString = `SELECT COUNT(DISTINCT EmailAddress.Email) AS "NumberOfContacts" FROM EmailAddress LEFT JOIN Employee ON EmailAddress.EmailAddressID = Employee.EmailAddressID LEFT JOIN RawTitleMatch A ON Employee.RawTitleID = A.RawTitleID `; if (structure.length > 0) { const queryString = (0, generateBaseQueryString_1.generateBaseQueryString)(baseQueryString, structure); queryArray.push(queryString); for (var i = 0; i < structure.length; i++) { try { if (structure[i] === 'Title') { const sortedTitles = (0, sortData_1.sortData)(queryData.selectedTitles); const handledTitlesData = (0, dataHandler_1.dataHandler)(sortedTitles); console.log("[queryBuilder.ts] dataHandler - Title: ", handledTitlesData); (0, titleQueryBuilder_1.titleQueryBuilder)(handledTitlesData, queryArray); (0, addAnd_1.addAnd)(i, structure.length, queryArray); } else if (structure[i] === 'JobFunction') { const sortedJobFunctions = (0, sortData_1.sortData)(queryData.selectedJobFunctions); const handledJobFunctionsData = (0, dataHandler_1.dataHandler)(sortedJobFunctions); console.log("[queryBuilder.ts] dataHandler - JobFunction: ", handledJobFunctionsData); (0, jobFunctionQueryBuilder_1.jobFunctionQueryBuilder)(handledJobFunctionsData, queryArray); (0, addAnd_1.addAnd)(i, structure.length, queryArray); } else if (structure[i] === 'TitleLevel') { const handledTitleLevelsData = (0, dataHandler_1.dataHandler)(queryData.selectedTitleLevels); console.log("[queryBuilder.ts] handledTitleLevelsData: ", handledTitleLevelsData); (0, titleLevelQueryBuilder_1.titleLevelQueryBuilder)(handledTitleLevelsData, queryArray); (0, addAnd_1.addAnd)(i, structure.length, queryArray); } else if (structure[i] === 'Nace') { const handledNaceData = (0, dataHandler_1.dataHandler)(queryData.selectedNaces); (0, naceQueryBuilder_1.naceQueryBuilder)(handledNaceData, queryArray); (0, addAnd_1.addAnd)(i, structure.length, queryArray); } ; } catch (error) { const errorMessage = error.toString(); const result = { query: '', status: httpStatuses_1.httpStatuses.bad_request, message: errorMessage, }; return result; } ; } ; queryArray.push(' AND '); queryArray.push('EmailAddress.Mailable = 1'); /*Legger til filter i spørring*/ if (queryData.selectedFilter !== null && queryData.selectedFilter !== undefined && queryData.selectedFilter.length > 0) { queryArray.push(' AND ('); for (var i = 0; i < queryData.selectedFilter.length; i++) { queryArray.push('EmailAddress.ActivityFilterID = ' + queryData.selectedFilter[i].FilterID); if (i !== queryData.selectedFilter.length - 1) { queryArray.push(' OR '); } else { queryArray.push(') '); } } } /*Legger til rawtitles i spørring*/ if (queryData.excludedRawTitles !== null && queryData.excludedRawTitles !== undefined && queryData.excludedRawTitles.length > 0) { queryArray.push(' AND ('); for (var i = 0; i < queryData.excludedRawTitles.length; i++) { queryArray.push('Employee.RawTitleID != ' + queryData.excludedRawTitles[i].RawTitleID); if (i !== queryData.excludedRawTitles.length - 1) { queryArray.push(' OR '); } else { queryArray.push(') '); } } } /** * Endelig query-result. */ const query = (0, buildQueryString_1.buildQueryString)(queryArray); console.log(query); const result = { query: query, status: httpStatuses_1.httpStatuses.ok, message: 'OK.', }; return result; } else { const result = { query: '', status: httpStatuses_1.httpStatuses.bad_request, message: 'No valid query data found.', }; return result; } ; }; exports.countQueryBuilder = countQueryBuilder;